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.


No hay comentarios.: