martes, 8 de marzo de 2011

"poo"

§  Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas.En el mundo real, normalmente tenemos muchos objetos del mismo tipo. Por ejemplo, nuestro teléfono celular es sólo uno de los miles que hay en el mundo. Si hablamos en términos de la programación orientada a objetos, podemos decir que nuestro objeto celular es una instancia de una clase conocida como "celular". Los celulares tienen características (marca, modelo, sistema operativo, pantalla, teclado, etc.) y comportamientos (hacer y recibir llamadas, enviar mensajes multimedia, transmisión de datos, etc.).
Descripción: http://java.ciberaula.com/imagenes/ciberaula/es/area/java/articulo/java_too_tres.gif
Cuando se fabrican los celulares, los fabricantes aprovechan el hecho de que los celulares comparten esas características comunes y construyen modelos o plantillas comunes, para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo. A ese modelo o plantilla le llamamos CLASE, y a los equipos que sacamos a partir de ella la llamamos OBJETOS.
Descripción: http://java.ciberaula.com/imagenes/ciberaula/es/area/java/articulo/java_too_cuatro.gif
Esto mismo se aplica a los objetos de software, se puede tener muchos objetos del mismo tipo y mismas características.
Definición teórica: La clase es un modelo o prototipo que define las variables y métodos comunes a todos los objetos de cierta clase. También se puede decir que una clase es una plantilla genérica para un conjunto de objetos de similares características.
Por otro lado, una instancia de una clase es otra forma de llamar a un objeto. En realidad no existe diferencia entre un objeto y una instancia. Sólo que el objeto es un término más general, pero los objetos y las instancias son ambas representación de una clase.
Definición Teórica: Una instancia es un objeto de una clase en particular.
.ejemplo

Nombre {

   // Variables miembro (habitualmente privadas)

   miembro_1; //lista de miembros

   miembro_2;

   miembro_3;



   // Funciones o métodos (habitualmente públicas)

   funcion_miembro_1( ); // funciones miembro conocidas

   funcion_miembro_2 ( ); // funciones como métodos



   // Propiedades (habitualmente públicas)

   propiedad_1;

   propiedad_2;

   propiedad_3;

   propiedad_4;



Instancia
En un mismo proyecto puedo tener una o más instancias de una misma clase sin problemas.
Cada vez que creamos una nueva instancia, ésta adquiere las propiedades, métodos y eventos de la clase a la que pertenece (es lo que permite la relación es un), sin embargo, cada instancia es independiente de las otras; esto nos da dos ventajas:
1.     Si hago algún cambio en la clase, todas las instancias de esta clase se actualizarán automáticamente; esto nos permite hacer cambios sin tener que ir a cada una de las instancias (se aplica el mismo principio de herencia, aunque a un nivel diferente).
2.     Al ser independientes de las otras instancias, puedo darles valores diferentes sin que afecten a las demás (como tener una silla negra, una roja, una más alta, etc.). Aunque comparten la misma estructura, pueden programarse individualmente, dando versatilidad y flexibilidad al código.

§  Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos) los mismos que consecuentemente reaccionan a eventos. Se corresponde con los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase.

§  Herencia: (por ejemplo, herencia de la clase C a la clase D) Es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y variables publicas declaradas en C. Los componentes registrados como "privados" (private) también se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos públicos. Esto es así para mantener hegemónico el ideal de OOP.
El mecanismo de herencia permite definir nuevas clases partiendo de otras ya existentes, de este modo se consigue reflejar todos los niveles de generalización que se deseen.
El término extends indica que una clase deriva de otra heredando todas sus propiedades. A una clase derivada de otra se le denomina subclase, mientras que la clase de la cual procede recibe el nombre de superclase. En todo lenguaje orientado a objetos existe una jerarquía de clases relacionadas en base a términos de herencia. En Java el punto más alto de la jerarquía es la clase object de la cual derivan en último término todas las demás clases. Object proporciona una serie de capacidades básicas que son comunes a todas las clases. Si en la definición de la nueva clase no aparece el término extends Java considera que tal clase deriva directamente de object.

Polimorfismo significa un objeto y muchas formas, es decir, permite que un método tenga múltiples implementaciones en base al tipo de objeto que se le pasa en la llamada. A esto se le conoce como sobrecarga del método. Los métodos que actúan sobre los objetos requieren información en forma de parámetros. Java es un lenguaje fuertemente equipado, es decir, los tipos deben ser exactamente iguales porque en caso contrario no se entiende el mensaje.
ejem  
#include


using namespace std;






class figura {


     public:


            float base;


            float altura;    


    public:


           float captura();


           virtual unsigned float perimetro()=0;


           virtual unsigned float area()=0;


};






class rectangulo: public figura{


     public:


            void imprime();


            unsigned float perimetro(){return 2*(base+altura);}


            unsigned float area(){return base*altura;}


     };






class triangulo: public figura{


     public:


            void muestra();


            unsigned float perimetro(){return 2*altura+base}


            unsigned float area(){return (base*altura)/2;}


     };






void figura::captura(){


     cout<<"CALCULO DEL AREA Y PERIMETRO DE UN TRIANGULO ISÓSCELES Y UN RECTANGULO:" <<endl;


     cout<<"escribe la altura: ";


     cin>>altura;


     cout<<"escribe la base: ";


     cin>>base;


     cout<<"EL PERIMETRO ES:" << perimetro();


     cout<<"EL AREA ES:" << area();


};



Los atributos son datos específicos de una clase. En la definición de clase se indica cuales son los atributos y conque nombre se va a designar a cada uno de ellos. El que una declaración de atributo sea pública significa que el elemento definido pueda utilizarse libremente desde cualquier otro punto del programa.
En el caso de una clase su carácter público es necesario para poder crear objetos de esa clase en otros puntos del programa (new). Para acceder a un atributo hay que indicarle el nombre del objeto al que pertenece:
unaEntrada.nombre = "Juan Pablo"
unaEntrada.apellidos = "de Frutos Martínez"
§ metodo: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema.
ACCESORES
Las variables instancia de un objeto son sus atributos, eso que diferencia a un objeto de otro dentro de la misma clase. Es importante poder modificar y leer estos atributos; lo que supone definir métodos denominados //accesores de atributos//. Veremos en un momento que no siempre hay que definir los métodos accesores explícitamente, pero vayamos paso a paso. Los dos tipos de accesores son los de //escritura// y los de //lectura//.
|| ruby> class Fruta
ruby| def set_kind(k) # escritor
ruby| @kind = k
ruby| end
ruby| def get_kind # lector
ruby| @kind
ruby| end
ruby| end
nilx
ruby> f1 = Fruta.new
#<Fruta:0x401c4410>
ruby> f1.set_kind("melocotón") #utilizamos el escritor
"melocotón"
ruby> f1.get_kind #utilizamos el lector
"melocotón"
ruby> f1 #inspeccionamos el objeto
#<Fruta:0x401c4410 @kind="melocotón">
||
Sencillo; podemos almacenar y recuperar información sobre la clase de fruta que queremos tener en cuenta. Pero los nombres de nuestros métodos son un poco largos. Los siguientes son más breves y convencionales:
|| ruby> class Fruta
ruby| def kind=(k)
ruby| @kind = k
ruby| end
ruby| def kind
ruby| @kind
ruby| end
ruby| end
nil
ruby> f2 = Fruta.new
#<Fruta:0x401c30c4>
ruby> f2.kind = "banana"
"banana"
ruby> f2.kind
"banana"
||
PARAMETRO
Un parámetro es un método para pasar información (valores a variables) del programa principal a un procedimiento y viceversa.
Un parámetro es, prácticamente, una variable cuyo valor debe ser ya sea proporcionado por el programa principal al procedimiento o ser devuelto desde el procedimiento hasta el programa principal. Por consiguiente, existen dos tipos de parámetros:
-         Parámetros de entrada: Sus valores deben ser proporcionados por el programa principal.
-         Parámetros de salida: Son parámetros cuyos valores se calcularán en el procedimiento y se deben devolver al programa principal para su proceso posterior.
Transferencia de información desde y/o hasta los procedimientos
Existen dos tipos de procedimientos:
-         Procedimientos sin parámetros: No existe comunicación entre el programa principal y los procedimientos ni viceversa.
-         Procedimientos con parámetros: Existe comunicación entre el programa principal y los procedimientos o entre dos procedimientos.
Ejemplo 1:
(Parámetros de entrada)
Procedure RecuadroDos (N : Integer);
Var
            J : Integer;
Begin
            For J := 1 to  N do
                        Write(`*´)
End;
Ejemplo 2:
(Parámetros de entrada/salida)
El procedimiento Geometria recibe la longitud y anchura de un rectángulo, calcula el área y perímetro del rectángulo y devuelve los valores obtenidos al programa principal.
Procedure Geometria (Longitud, Anchura : Real; Var Area, Perímetro : Real);
Begin
            Area := Longitud * Anchura;
            Perimetro := 2 * (Longitud + Anchura)
End;
ENCAPSULAMIENTO (INFORMÁTICA)
En
programación modular, y más específicamente en programación orientada a
objetos, se denomina encapsulamiento al ocultamiento del estado, es decir, de
los datos miembro, de un objeto de manera que sólo se puede cambiar mediante
las operaciones definidas para ese objeto .
Cada objeto está aislado del exterior, es un módulo natural, y la aplicación entera se reduce a un agregado o rompecabezas de objetos. El aislamiento protege a los datos asociados a un objeto contra su modificación por quien no tenga derecho a acceder a ellos, eliminando efectos secundarios e interacciones.
De esta forma el usuario de la clase puede obviar la implementación de los métodos y propiedades para concentrarse sólo en cómo usarlos. Por otro lado se evita que el usuario pueda cambiar su estado de maneras imprevistas e incontroladas.
Encapsulamiento
Se dice que es el empaquetado de métodos y atributos dentro de un objeto, mediante una interfaz grafica. La clave está precisamente en el envoltorio del objeto .
Como se puede observar de los diagramas, las variables del objeto se localizan en el centro o núcleo del objeto. Los métodos rodean y esconden el núcleo del objeto de otros objetos en el programa. Al empaquetamiento de las variables de un objeto con la protección de sus métodos se le llama encapsulamiento. Típicamente, el encapsulamiento es utilizado para esconder detalles de la puesta en práctica no importantes de otros objetos. Entonces, los detalles de la puesta en práctica pueden cambiar en cualquier tiempo sin afectar otras partes del programa.







No hay comentarios:

Publicar un comentario