lunes, 22 de febrero de 2016

METODO GET Y SET




Quizá intuyan de qué trata éste post, quizá no. Los que sepan de programación entenderán que en programación orientada a objetos es más que común (casi obligado) usar métodos Set y métodos Get para acceder a la información de los atributos y modificar o leer el estado de un objeto. Es más, ahora que estuve viendo JSP, los beans ocupan de manera obligatoria, métodos Set y métodos Get para que el JSP almacene información.
Desarrollaré mi tésis de la siguiente manera, digamos que existe una clase genérica pero con muchos atributos, algo típico de la enseñanza de orientación a objetos, una clase persona, que en C++ sería algo como:
class Persona{
private:
    genero_h genero;
    int edad;
    int estatura;
    char* nombre;
    char* apellido_p;
    char* apellido_m;
};
Por mencionar algunas cosas, genero_h es una enumeración que tiene cosas como… H y M xD si quisiéramos manipular los atributos de la clase habría que hacer una lista de métodos Set y Get sobrecargados para un montón de opciones, quizá aquí no haya tantas pero a veces las hay. Veamos cómo queda esa lista:
class Persona{
private:
    genero_h genero;
    int edad;
    int estatura;
    char* nombre;
    char* apellido_p;
    char* apellido_m;
public:
    Persona();
    ~Persona();
    void setGenero(genero_h);
    void setEdad(int);
    void setEstatura(int);
    void setNombre(char*);
    void setApellidoP(char*);
    void setApellidoM(char*);
    genero_h getGenero();
    int getEdad();
    int getEstatura();
    char* getNombre();
    char* getApellidoP();
    char* getApellidoM();
};
A mi por lo menos, esta visión de la clase me resulta confusa, ofuscada, extensiva, hartante y demás adjetivos negativos que pudieran quedar. Este problema crece exponencialmente (sólo para exagerar) si la clase va a realizar otras operaciones y lleva sobrecarga de métodos y de operadores y de etcétera, etcétera, etcétera.
Es por ello, que propongo lo siguiente, en lugar de hacer operaciones Set y Get, la filosofía de la programación orientada a objetos nos provee un mecanismo técnico que ayuda en la tarea de escribir clases elegantes: SOBRECARGA.
Veamos la clase según yo, antes de explicar:
class Persona{
private:
    genero_h genero;
    int edad;
    int estatura;
    char* nombre;
    char* apellido_p;
    char* apellido_m;
public:
    Persona();
    ~Persona();
    void Genero(genero_h);
    genero_h Genero();
    void Edad(int);
    int Edad();
    void Estatura(int);
    int Estatura();
    void Nombre(char*);
    char* Nombre();
    void ApellidoP(char*);
    char* ApellidoP();
    void ApellidoM(char*);
    char* ApellidoM();
};
Quizá la diferencia no sea tan clara, si tomamos en cuenta que en teoria es la misma cantidad de métodos, entonces, ¿cuál es la diferencia? Nosotros estamos sobrecargando los métodos para que en la implementación hagamos cosas como:
Persona persona1();
...
cout << persona1.Nombre() << endl;
...
persona1.Nombre("Maximiliano");
...
Que de otra forma se vería como:
Persona persona1();
...
cout << persona1.getNombre() << endl;
...
persona1.setNombre("Maximiliano");
...
En lo personal, los cambios que propongo sirven para hacer clases elegantes con una implementación igual de elegante, sé que Class.setAttrName() y Class.getAttrName() es significativo, ¿pero qué puede ser más intuitivo que Class.AttrName() y cambiar los parametros?
Ejemplo del método GET Y SET.
class p {
private:
int a;
public:
void setVariable ( int valor );
int getVariable ( void );
}
Implementacion :
void p::setVariable ( int valor ) {
if ( valor < 10 ) a = valor;
}
int p:getVariable () {
return a;
}
Ahi lo tiens, espero q te haya quedado claro.
Por cierto, en una clase puede haber tantos métodos get, set como varialbes hayan.

Conclusiones:
·         Ayudan a la facilitación de las diferentes formas de construcción de un programa en su sintaxis.
·         Tienen como finalidad realizar más rápido los diferentes procesos de algoritmos.
·         depende del programador y del edificio cognoscitivo que cargue, habrá ocasiones en las que sea indispensable usar Set y Get (como en los beans) y otras en las que haya que recurrir a otros sufijos.


Bibliografia:

jueves, 18 de febrero de 2016

CORRECCION DE PRUEBA QUIMESTRAL.



·        Realizar el análisis y diseño detallado de aplicaciones informáticas de gestión 
 
INDICARES DE EVALUACIÓN.
 
·        Se han resuelto y presentado los ejercicios propuestos valorando la correcta elección y utilización de las estructuras; la calidad del resultado; la eficiencia del resultado; 
·        Se ha justificado la importancia de las estructuras dinámicas.
·        Se ha justificado la importancia de los punteros en la gestión de la memoria. 

1.- Determinar el valor que tendrán las variables después de cada operación de asignación (cada respuesta 0.5 puntos)       
 
struct nodo{
int dia;
int mes;
int anio;
 
}def:
 
class Foo{
    private:
       int bar;
    public:
void imp();
 };

int a=3;
int b=4;
int suma(int a, int b)
{
         int c;
         c = a + b;
         return c;
}
 
 
def.dia= basura
Basura
c= 7
 
 
int A;
int B;
B=12;
A=B-4;
A=B-7;
B=A+2;
         A=A*A;
 
int X;
int Y;
X=2;
Y=X+6;
X=X+X;
Y=X-5;
 
 
int HOLA;
int SE_NO;
int OTRA;
HOLA=-7;
NO_SE=12;
OTRA=HOLA + NO_SE;
NO_SE=HOLA + NO_SE;
         HOLA=NO_SE + OTRA;
 
A=25
 
Y= -1
 
NO_SE= Error 
2.- Identifique los errores del programa y corríjalos al frente de cada línea de código (2 puntos);    
  
 
#include <iostream>
#include <conio.h>
using namespace std;
                      
class empleado{                         class Empleado{ 
                                                   Public:
        int edad,numdep;
        char nomb[10];
public:
        void iniciar(void);
        void entradaDatos(void);
        void salidaDatos(void);
} emp1;
 
int main(void){
 Empleado emp2;
 emp1.iniciar();
 emp2.iniciar();
 emp1.entradaDatos();
 emp2.entradaDatos();
 emp1.salidaDatos();
 emp2.salidaDatos();
 getch();
 return 0;
}
 
int Empleado::iniciar(void) {              Void Empleado::iniciar(void) {     
         
         cout >>"PROGRAMA QUE INGRESA DATOS DE EMPLEADO"<<"\n\n";
         cout <<"PROGRAMA QUE INGRESA DATOS DE EMPLEADO"<<"\n\n";
 
}
void Empleado::entradaDatos(void) {
         cout<<"INTRODUZCA los datos del empleado"<<"\n";
         cout<<"INTRODUZCA nombre:"<<"\n";
         cin>>nomb;
         cout<<"INTRODUZCA edad"<<"\n";
         cin>>edad;
         cout<<"numero de departamento"<<"\n";
         cin>>numde;                            cin>>numdep;    
}
void Empleado::salidaDatos(void) {
         cout<<nomb <<"\n";
         cout<<edad<<"\n";
         cout<<numdep<<"\n";      
 
 
} 
 




 
3.- definir cuál sería la estructura correcta de los siguientes enunciados (0.2 cada ítem)       
 
Crear una clase llamada juguete con dos atributos y un método imprimir () el cual imprime los atributos.
 
class juguete{
public:
int pelota;
int maxteal;
public:
void imprimir();
};
void juguete::imprimir(){
printf("%d\n",pelota);
printf("%d",maxteal);
}
 
Enumero dos principios de P.O.O
 
 
Encapsulación
Herencia
Polimorfismo
 
 
 
 
 
Escriba la sintaxis de la función principal de c++
 
main()
{
}
 
 
 
 
 
Represente gráficamente que es polimorfismo
 
 

   
   
    
    
    
    
    
    
    
    
    
    
    
    
   
   
   
  
   
  
 
 
 
 
 
 
Realice una clase con el principio de encapsulamiento.
 
class op{
private: int x;
int y;
public:
void asfa();
}
 
 
 
 
 
 
4.- Encierre la letra de la respuesta correcta de cada pregunta (0,2 cada una)
 
1-      ¿Cuál es la descripción que crees que define mejor el concepto 'clase' en la programación orientada a objetos?
a)      Es un concepto similar al de 'array'
b)      Es un tipo particular de variable
c)      Es un modelo o plantilla a partir de la cual creamos objetos
d)      Es una categoria de datos ordenada secuencialmente

2.       ¿Qué es una pila? (0.3pts)
a)      Una lista en la que sólo se pueden insertar y eliminar nodos en uno de sus extremos.
b)      Un puntero en la que sólo se pueden insertar y eliminar nodos en uno de los extremos.
c)       Un dato int que sólo se pueden insertar y eliminar nodos en uno de los extremos de la lista.
d)      Ninguno de los anteriores.

3.       ¿Qué es una cola? (0.3pts)
a)      Es un puntero, caracterizada por ser una secuencia de elementos FIFO.
b)      es una variable, caracterizada por ser una secuencia de elementos FIFO.
c)      es una estructura, caracterizada por ser una secuencia de elementos FIFO.
d)      Ninguna de las anteriores.

4.       ¿Defina que es una variable? (0.3pts)
a)      Puede ser un puntero.
b)      Puede ser un valor entero.
c)       Es una porción de memoria.
d)      Todas las anteriores

5.       ¿Qué elementos crees que definen a un objeto?
a)      Sus cardinalidad y su tipo
b)      Sus atributos y sus métodos
c)       La forma en que establece comunicación e intercambia mensajes 
d)      Su interfaz y los eventos asociados.

6.       ¿Qué significa instanciar una clase?
a)      Duplicar una clase
b)      Eliminar una clase
c)       Crear un objeto a partir de la clase
d)      Conectar dos clases entre sí

7.       ¿Qué es un puntero? (0.3pts)
a)      Es una matriz que hace referencia a una región de memoria.
b)      Es un valor entero que da referencia a una región de memoria
c)       Ninguna de las anteriores.
d)      Es una variable independiente de memoria que sirve para apuntar a un puntero.


8.       ¿Qué es una estructura dinámica? (0.3pts)
a)      son estructuras que cuya dimensión puede crecer o disminuir durante la creación del programa.
b)      son estructuras que cuya dimensión puede crecer o disminuir durante el diseño del programa
c)       son estructuras que cuya dimensión puede crecer o disminuir durante la ejecución del programa
d)      ninguna de las anteriores.

9.       ¿Por qué dos objetos instanciados de una clase son diferentes?
a)      Porque tienen sus propios atributos y métodos.
b)      Porque los atributos y métodos son iguales en su contenido
c)       No son diferentes son iguales.
d)      Ninguna de las anteriores

10.   ¿Cuál es la diferencia entre objeto y clase?
Ninguna porque son iguales
El objeto se declara en el main y la clase no.
La clase se utiliza para definir qué aspecto tendrán los objetos
El objeto se utiliza para definir qué aspecto tendrán la clase

5.-Realizar el siguiente ejercicio en c++ en el computador (2 Puntos resuelto completamente). El profesor designa el ejercicio a realizar.

Implementar una clase  Jugador que solicite el nombre, edad en un método solidat(), y contenga otro método impdat(), que imprima los datos solicitados con la diferencia que la edad la debe imprimir en días. Declarar un objeto llamado jug1.
Realizar una clase llamada Vehículo que contenga como atributos color, marca, modelo y que contenga un método llamado imprimir() que imprima los datos que no deben ser ingresados por teclado sino puestos dentro del código.