Mostrando las entradas con la etiqueta Ingeniería de software. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Ingeniería de software. Mostrar todas las entradas

domingo, 31 de agosto de 2008

/saludables prácticas de programación (.NET)



Siempre es recomendable pasar por la sección Patterns & Practices de la MSDN, ha tenido algunos cambios estéticos para mejor, y mejoras en el tipo de contenido, como videos.
Entre tanto material de buena calidad y extenso, se incluye Software Factories para Web Clients y Web Services ya orientados específicamente a VS2008.

Lo mejor, y que recomiendo, es entrar al Catálogo completo y encontrar, el siguiente apartado Improving .NET Application Performance and Scalability que se puede descargar libremente (1150 páginas).





jueves, 1 de noviembre de 2007

/crisis del subdesarrollo



(click sobre la imágen para agrandar)







sábado, 14 de julio de 2007

/diseño de patrones



Aqui hay un link a varios patrones conocidos implementados en C++ y Java, incluye los diagramas UML de los mismos, y están catalogados de acuerdo a los efectos de su aplicación en el modelo de clases (estructurales, creacionales, comportamiento,etc).
Particularmente interesante también, para notar las diferencias de los lenguajes y su manejo de punteros. (En el caso de Java la referencia a los mismos es explícita)

Pronto subiré mi implementación de Colecciones en C++ usando el patrón Iterator.

lunes, 11 de junio de 2007

/implementar data types con C++


Data Type
concepto dado en el curso:

Es un descriptor de un conjunto de valores que carecen de identidad.
Data types pueden ser tipos primitivos predefinidos como:

  • Strings
  • Números
  • Fechas
  • También tipos definidos por el usuario, como enumerados
Muchos lenguajes de programación no tienen una construcción específica para data types.
En esos casos se implementan como clases:
  • Sus instancias serían formalmente objetos
  • Sin embargo, la identidad de esas instancias es ignorada
Data Value

Es un valor único que carece de identidad, una instancia de un data type
Un data value no puede cambiar su estado:
  • Eso quiere decir que todas las operaciones aplicables son “funciones puras” o consultas
  • Los data values son usados típicamente como valores de atributos
Identidad o no Identidad
¿Cómo saber si un elemento tiene o no identidad?:
  • Dos objetos separados que sean idénticos lucen iguales pero no son lo mismo (son distinguibles por su identidad)
  • Dos data values separados que sean idénticos son considerados lo mismo (no son distinguibles por no tener identidad)
Ejemplo de esto: una fecha, el valor 4, dos valores 4 no representan algo distinto.

Valores y Cambios de Estado
El valor “4” no puede ser convertido en el valor “5”. Se le aplica la operación suma con argumento “1” y el resultado es el valor “5”, otro valor diferente.
A un objeto persona se le puede cambiar la edad: reemplazando el valor de su atributo “edad” por otro valor nuevo. El resultado es la misma persona con otra edad.

En el newsgroup de la materia surgieron dudas sobre las diferentes alternativas para implementar data types con C++ (¿struct, class?) :

Esta es la respuesta de un docente:
"Struct no es un constructor del paradigma de orientación a objetos, sino una particularidad del lenguaje C++. Por ende no debería ser utilizado en el curso.
En términos del potencial que posee, no hay diferencias con una
clase. De hecho, se podrían definir operaciones (constructores entre ellos) para un struct."

Definición (ejemplo) del data type Fecha:

#ifndef FECHA_HH
#define FECHA_HH

#include
using namespace std;

class Fecha {

private:
unsigned int dia;
unsigned int mes;
unsigned int anio;
unsigned int hora;
unsigned int minutos;

public:
Fecha();
Fecha(const Fecha&);
Fecha(const int dia, const int mes, const int anio);
Fecha(const int dia, const int mes, const int anio,
const int hora, const int minutos);

virtual~Fecha();

unsigned int getDia() const;
unsigned int getMes() const;
unsigned int getAnio() const;
unsigned int getHora() const;
unsigned int getMinutos() const;

Fecha& operator=(const Fecha&);
bool operator==(const Fecha&) const;
bool operator!=(const Fecha&) const;
bool operator<(const Fecha&) const;
bool operator>(const Fecha&) const;
bool operator<=(const Fecha&) const;
bool operator>=(const Fecha&) const;

};

// imprime la fecha con formato (dd/mm/aaaa hh:mi)
ostream& operator<<(ostream&, const Fecha&);
// se lee la fecha con formato (dd/mm/aaaa hh:mi)
istream& operator>>(istream&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;, Fecha&);

#endif

Son de esas respuestas que no hacen mas que redondear muy bien un concepto.
En este caso, la aplicación de los conceptos de un paradigma a un lenguaje en particular.


miércoles, 30 de mayo de 2007

/escabilidad en aplicaciones web


En el blog de
Peter Van Dijck’s se describe el proceso de escalabilidad aplicado a las diferentes arquitecturas de las diez aplicaciones web más conocidas, como por ejemplo: Flickr, Twitter, LiveJournal, Bloglines, etc.
Las descripciones
son bastante interesantes por el contraste de estrategias, y de las diversas arquitecturas elegidas.

La escalabilidad es la capacidad del sistema de adaptarse a nuevos requerimientos que suelen venir por cambios externos. Si bien el proceso de escalabilidad varía de aplicación en aplicación, ya que depende de la arquitectura elegida para la misma, puede decirse que hay básicamente 3 puntos que deben ser tenidos en cuenta para la escalabilidad de una aplicación web: el crecimiento de su tráfico, el crecimiento de su base de datos, y su mantenibilidad.


viernes, 4 de mayo de 2007

/trabajos de facultad

Voy a dejar material en la sección de links de algunas de las tareas obligatorias de materias cursadas en la carrera de Ing. en Computación, asi como también algun material de apoyo para resolverlas.
Por supuesto, como todo material es perfectible , y mas considerando que esas entregas se hacen desde la urgencia el 90% de las veces, por lo tanto estoy abierta a todo tipo de sugerencias.

P3 - Técnica de diseño de algoritmos, algoritmos ávidos, backtracking, programación dinámica, Dijkstra, métodos de ordenamiento (quick sort, heap sort, selection sort, etc) y análisis de algoritmos. La implementación fue realizada en C/C++ bajo compilador Cygwin para Windows.
aqui

P4 - Analisis y diseño de sistemas. Manejo de UML para el diseño del modelo conceptual y de dominio. Patrones de diseño de software (implementado en C++ compilador gcc de Fedora), aqui.

Métodos Numéricos- técnicas para la resolución de problemas matemáticos de manera computacional, esto implica arrastrar errores porque la computadora no puede almacenar números con cifras infinitas. Lo que genera impresiciones que son contrarrestadas por metodologías de cálculos como interpolación o método de Vaandermonde.
En el curso se resolvieron sistemas de ecuaciones diferenciales, sistemas lineales, inversión de matrices, mínimos cuadrados, etc. La implementación fue realizada usando MatLab versión 7.1 aqui

Posteriormente agregaré el hecho recientemente para Teoría de lenguajes. Se basó en el reconocimiento de patrones de cadenas en texto mediante expresiones regulares usando Perl.