viernes, 22 de enero de 2016

Constructores y destructores de una clase

Constructores de una clase:
Cuando se construye un objeto es necesario inicializar sus variables con valores coherentes, imaginemos un objeto de la clase llamada Persona cuyo atributo color de pelo al nacer sea verde, un estado incorrecto tras construir el objeto persona. La solución en los lenguajes orientados a objetos es emplear los constructores. Un constructor es un método perteneciente a la clase que posee unas características especiales:
-          Se llama igual que la clase.
-          No devuelve nada, ni siquiera void
-          Pueden existir varios, pero siguiendo las reglas de la sobrecarga de funciones
-          De entre los que existan, tan sólo uno se ejecutará al crear un objeto de la clase

Para definir los constructores se emplea la siguiente sintaxis:
         [modifVisibilidad] nombreConstructor (listaParámetros) [throws listaExcepciones]
         {
         }

Para modifVisibilidad se aplica las mismas normas que para atributos y métodos:
-          public: indica que es un método accesible a través de una instancia del objeto.
-          private: indica que a través de una instancia no es accesible el método. Al heredar el método se convierte en inaccesible.
-          protected: indica que a través de una instancia no es accesible el método. Al heredar si se puede usar desde la clase derivada.



Destructor de una clase:
Es un método de una clase que se llama justo antes de una instancia de esa clase y se elimina de la memoria. No todos los lenguajes de programación orientados a objetos suelen tener un destructor.
La contrapartida de un destructor es un constructor que se ejecuta cuando se crea el objeto, se instancia y se lo inicializa.

Una clase sólo tiene una función destructor que, no tiene argumentos y no devuelve ningún tipo. Un destructor realiza la operación opuesta de un constructor, limpiando el almacenamiento asignado a los objetos cuando se crean. C++ permite sólo un destructor por clase.

POO (Programación orientada a objetos)


¿En qué consiste la Programación orientada a objetos?
La programación Orientada a objetos (POO) es una forma especial de programar, más cercana a como expresaríamos las cosas en la vida real que otros tipos de programación. Es un paradigma de programación que usa objetos en sus interacciones, para diseñar aplicaciones y programas informáticos.
Características:
Abstracción: Cada objeto en el sistema sirve como modelo de un “agente” abstracto que puede realizar trabajo, informar y cambiar su estado, y “comunicarse” con otros objetos en el sistema sin revelar cómo se implementan esta característica.
Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema.
Polimorfismo: Comportamientos diferentes, asociados a objetos distintos, pueden compartir el mismo nombre, al llamarlos por ese nombre se utilizará el comportamiento correspondiente al objeto que se esté usando. 
Herencia: La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes.
Principio de ocultación: Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que específica cómo pueden interactuar con los objetos de la clase.
¿Qué es un objeto?
Instancia de una clase. Entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos), los mismos que consecuentemente reaccionan a eventos
Un objeto puede ser creado instanciando una clase
¿Qué es una clase?

Es una plantilla para la creación de objetos de datos según un modelo predefinido. Las clases se utilizan para representar entidades o conceptos, como los sustantivos en el lenguaje.

 

Cada clase es un modelo que define un conjunto de variables

Ejemplo de Claseen C++
#include <iostream.h>
class Miclase {
public:
Miclase() {} //constructor por defecto
~Miclase() {} //destructor
void yoMismo() { return this }
};

int main()
{
void* pClase;
Miclase unObjeto;
pClase = unObjeto.yoMismo();
cout<< "El puntero pClase es "
<< pClase <<'\n.';
return 0;
}

Programa Validacion de cedula Ecuatoriana

El Programa realiza un validacion de la cedula de identidad Ecuatoriana, mediante un determinado algoritmo podemos verificar si la cedula es correcta o incorrecta.


#include <conio.h>
#include <stdio.h>
char Cadena[10];
int Num[10];
int par;
int impar[10];
int *ptrNum[10];
int resp;
int im[10];

main(){
int *ptrNum=&Num[10];
printf("ingrese la cedula\t");
//Se realiza la transformacion de caracteres a numeros enteros
for(int i=0;i<=9;i++)
{
   
scanf("%c",&Cadena);

sscanf(Cadena, "%d", &ptrNum[i]);

}

for(int i=0;i<=9;i++)
{
printf("%d\n",ptrNum[i]);
}
for (int i=0;i<9;i++)
{
Num[i]=ptrNum[i];
}
//se realiza la suma de pocisiones pares
printf("La suma de los pares es:");
par=Num[1]+Num[3]+Num[5]+Num[7];
printf("%i",par);
//Se multiplica pocisiones impares x 2

printf("\nPrimera parte impares:");
for(int i=0;i<9;i++)
{
     
impar[i]=Num[i]*2;
im[i]=impar[i];
printf("\n%i",im[i]);
i++;
}
//Funcion si para determinar si es mayor a 9 restar 9
printf("\n2da parte impares");
if(im[0]>9){

printf("\n%i",impar[0]-9);
im[0]=impar[0]-9;}
else{
printf("\n%i",im[0]);}

if(im[2]>9){
printf("\n%i",impar[2]-9);
im[2]=impar[2]-9;}
else{
printf("\n%i",im[2]);}

if(im[4]>9){
printf("\n%i",impar[4]-9);
im[4]=impar[4]-9;}
else{
printf("\n%i",im[4]);}

if(im[6]>9){
printf("\n%i",impar[6]-9);
im[6]=impar[6]-9;}
else{
printf("\n%i",im[6]);}

if(im[8]>9){
printf("\n%i",impar[8]-9);
im[8]=impar[8]-9;}
else{
printf("\n%i",im[8]);}
//Resultado de la suma de pares e impares
resp=(par)+(im[0]+im[2]+im[4]+im[6]+im[8]);
printf("\nSuma total:\t%i",resp);

//Funcion si para determinar si se resta a la decena superior
if(resp>10&resp<20)
{
resp=20-resp;
printf("\nResultado:%i\t",resp);
}
else
if(resp>20&resp<30)
{
resp=30-resp;
printf("\nResultado: %i\t",resp);
}
else
if(resp>30&resp<40)
{
resp=40-resp;
printf("\nResultado: %i\t",resp);
}
else
if(resp>40&resp<50)
{
resp=50-resp;
printf("\nResultado: %i\t",resp);
}
else
if(resp>50&resp<60)
{
resp=60-resp;
printf("\nResultado: %i\t",resp);
}
//Funcion si para determinar el resultado :D
if(resp==ptrNum[9])
{
printf("\nCedula Correcta :D");
}
else
{
printf("\nCedula Incorrecta :(");
}
getch();

}

Correccion de la prueba bloque 2


https://drive.google.com/file/d/0B_IFi7mzrpepZzlYYW1JM3FSc2M/view?usp=sharing