martes, 8 de marzo de 2011

POO

POO:
 La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe variedad de lenguajes de programación que soportan la orientación a objetos.
Ejm: dado un plano para construir sillas (una clase de nombre clase_silla), entonces una silla concreta, en la que podemos sentarnos, construida a partir de este plano, sería un objeto de clase_silla. Es posible crear (construir) múltiples objetos (sillas) utilizando la definición de la clase (plano) anterior
Clase:
 Una clase es una construcción que permite crear tipos personalizados propios mediante la agrupación de variables de otros tipos, métodos y eventos. Una clase es como un plano. Define los datos y el comportamiento de un tipo. Si la clase no se declara como estática, el código de cliente puede utilizarla mediante la creación de objetos o instancias que se asignan a una variable. La variable permanece en memoria hasta todas las referencias a ella están fuera del ámbito. En ese momento, CLR la marca como apta para la recolección de elementos no utilizados. Si la clase se declara como estática, solo existe una copia en memoria y el código de cliente solo puede tener acceso a ella a través de la propia clase y no de una variable de instancia. Para obtener más información, vea Clases estáticas y sus miembros (Guía de programación de C#).
Ejm: || ruby> class Perro
ruby| def ladra
ruby| print "guau guau\n"
ruby| end
ruby| end
nil
||

INSTANCIA:
 Una instancia de un programa es una copia de una versión ejecutable del programa que ha sido escrito en la memoria del computador.
Una instancia de un programa es creada típicamente por el click de usuario en un icono de una interfaz Gráfica para usuarios GUI o por la entrada de un comando en una interfaz de línea de comandos CLI y presionando la tecla ENTER. Instancias de programas pueden ser creadas por otros programas
Ejm: Un ejemplo de instancia en un lenguaje de programación visual, sería tomar o arrastrar un objeto de la barra de herramientas o de la lista de librerías y colocarlo en el escritorio o escenario de trabajo (estamos creando una instancia de ese objeto, una copia).
objeto: En el paradigma de programación orientada a objetos (POO, o bien OOP en inglés), un objeto se define como la unidad que en tiempo de ejecución realiza las tareas de un programa. También a un nivel más básico se define como la instancia de una clase.
Estos objetos interactúan unos con otros, en contraposición a la visión tradicional en la cual un programa es una colección de subrutinas (funciones o procedimientos), o simplemente una lista de instrucciones para el computador. Cada objeto es capaz de recibir mensajes, procesar datos y enviar mensajes a otros objetos de manera similar a un servicio.

HERENCIA:
La herencia es específica de la programación orientada a objetos, donde una clase nueva se crea a partir de una clase existente. La herencia (a la que habitualmente se denomina subclases) proviene del hecho de que la subclase (la nueva clase creada) contiene las atributos y métodos de la clase primaria. La principal ventaja de la herencia es la capacidad para definir atributos y métodos nuevos para la subclase, que luego se aplican a los atributos y métodos heredados.
Esta particularidad permite crear una estructura jerárquica de clases cada vez más especializada. La gran ventaja es que uno ya no debe comenzar desde cero cuando desea especializar una clase existente. Como resultado, se pueden adquirir bibliotecas de clases que ofrecen una base que puede especializarse a voluntad (la compañía que vende estas clases tiende a proteger las datos miembro usando la encapsulación).
Ejm: || ruby> class Mamifero
ruby| def respira
ruby| print "inhalar y exhalar\n"
ruby| end
ruby| end
nil
ruby> class Gato<Mamifero
ruby| def maulla
ruby| print "miau \n"
ruby| end
ruby| end
nil
||

POLIMORFISMO (INFORMÁTICA)
La exactitud de la información en este artículo o sección está discutida.
En la página de discusión puedes consultar el debate al respecto.
En programación orientada a objetos el polimorfismo se refiere a la capacidad para que varias clases derivadas de una antecesora utilicen un mismo método de forma diferente.
Por ejemplo, podemos crear dos clases distintas: Pez y Ave que heredan de la superclase Animal. La clase Animal tiene el método abstracto mover que se implementa de forma distinta en cada una de las subclases (peces y aves se mueven de forma distinta).
Como se mencionó anteriormente, el concepto de polimorfismo se puede aplicar tanto a funciones como a tipos de datos. Así nacen los conceptos de funciones polimórficas y tipos polimórficos. Las primeras son aquellas funciones que pueden evaluarse o ser aplicadas a diferentes tipos de datos de forma indistinta; los tipos polimórficos, por su parte, son aquellos tipos de datos que contienen al menos un elemento cuyo tipo no está especificado.
CLASIFICACIÓN
Se puede clasificar el polimorfismo en dos grandes clases:
Polimorfismo dinámico (o polimorfismo paramétrico) es aquél en el que el código no incluye ningún tipo de especificación sobre el tipo de datos sobre el que se trabaja. Así, puede ser utilizado a todo tipo de datos compatible.
Polimorfismo estático (o polimorfismo ad hoc) es aquél en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados.
El polimorfismo dinámico unido a la herencia es lo que en ocasiones se conoce como programación genérica.
También se clasifica en herencia por redefinición de métodos abstractos y por método sobrecargado. El segundo hace referencia al mismo método con diferentes parámetros.
Otra clasificación agrupa los polimorfismo en dos tipos: Ad-Hoc que incluye a su vez sobrecarga de operadores y coerción, Universal (inclusión o controlado por la herencia, paramétrico o genericidad).
EJEMPLO DE POLIMORFISMO
En este ejemplo haremos uso del lenguaje C++ para mostrar el polimorfismo. También se hará uso de las funciones virtuales puras de este lenguaje, aunque para que el polimorfismo funcione no es necesario que las funciones sean virtuales puras, es decir, perfectamente el código de la clase "superior" (en nuestro caso Empleado) podría tener código
#include<iostream>
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();
};

ATRIBUTO
En computación, un atributo es una especificación que define una propiedad de un Objeto, elemento o archivo. También puede referirse o establecer el valor específico para una instancia determinada de los mismos.
Sin embargo, actualmente, el término atributo puede y con frecuencia se considera como si fuera una propiedad dependiendo de la tecnología que se use.
Para mayor claridad, los atributos deben ser considerados más correctamente como metadatos. Un atributo es con frecuencia y en general una característica de una propiedad.
Un buen ejemplo es el proceso de asignación de valores XML a las propiedades (elementos). Tenga en cuenta que el valor del elemento se encuentra antes de la etiqueta de cierre (por separado), no en el propio elemento. El mismo elemento puede tener una serie de atributos establecidos (Nombre = "estoesunapropiedad").
Si el elemento en cuestión puede ser considerado una propiedad (Nombre_Cliente) de otra entidad (digamos "cliente"), el elemento puede tener cero o más atributos (propiedades) de su propio (Nombre_Cliente es de Tipo = "tipotexto").
Un atributo de un objeto por lo general consiste de un nombre y un valor; de un elemento, un tipo o nombre de clase; de un archivo, un nombre y extensión.
Cada atributo nombrado tiene asociado un conjunto de reglas denominadas operaciones: uno no agrega caracteres o manipula y procesa una matriz de enteros como una imagen ni procesa texto como tipo de coma flotante (números decimales).
Por tanto, una definición de objeto se puede ampliar mediante la imposición de tipos de datos: un formato de representación, un valor por defecto, y las operaciones legales (normas) y restricciones ("¡División por cero no esta permitida!") Son todos los que podrían participar en la definición un atributo, o por el contrario, se puede decir que son atributos de ese tipo de objeto. Un archivo JPEG no es decodificado por las mismas operaciones (por muy similares que sean, estos son todos formatos de datos de gráficos) como un archivo BMP o PNG, ni es un número de coma flotante operado por las normas aplicadas al los enteros largos.
EJEMPLO
en computación gráfica los objetos de planos pueden tener atributos tales como espesor (con valores reales), color (con valores descriptivos como el marrón o verde o los valores definidos en un cierto modelo de color, como RGB), etc Un objeto círculo se puede definir con atributos similares, como un origen y radio.
Lenguajes de marca, como HTML y XML, utilizan los atributos para describir los datos y el formato de los datos.

MÉTODO (INFORMÁTICA)
En la programación orientada a objetos, un método es una subrutina asociada exclusivamente a una clase (llamados métodos de clase o métodos estáticos) o a un objeto (llamados métodos de instancia). Análogamente a los procedimientos en los lenguajes imperativos, un método consiste generalmente de una serie de sentencias para llevar a cabo una acción, un juego de parámetros de entrada que regularán dicha acción y, posiblemente, un valor de salida (o valor de retorno) de algún tipo.
Algunos lenguajes de programación asumen que un método debe de mantener el invariante del objeto al que está asociado asumiendo también que éste es válido cuando el método es invocado. En lenguajes compilados dinámicamente, los métodos pueden ser objetos de primera clase, y en este caso se puede compilar un método sin asociarse a ninguna clase en particular, y luego asociar el vínculo o contrato entre el objeto y el método en tiempo de ejecución. En cambio en lenguajes no compilados dinámicamente o tipados estáticamente, se acude a precondiciones para regular los parámetros del método y postcondiciones para regular su salida (en caso de tenerla). Si alguna de las precondiciones o postcondiciones es falsa el método genera una excepción. Si el estado del objeto no satisface la invariante de su clase al comenzar o finalizar un método, se considera que el programa tiene un error de programación.
La diferencia entre un procedimiento (generalmente llamado función si devuelve un valor) y un método es que éste último, al estar asociado con un objeto o clase en particular, puede acceder y modificar los datos privados del objeto correspondiente de forma tal que sea consistente con el comportamiento deseado para el mismo. Así, es recomendable entender a un método no como una secuencia de instrucciones sino como la forma en que el objeto es útil (el método para hacer su trabajo). Por lo tanto, podemos considerar al método como el pedido a un objeto para que realice una tarea determinada o como la vía para enviar un mensaje al objeto y que éste reaccione acorde a dicho mensaje.

TIPOS DE MÉTODOS
-cientifico -mental -psicotecnico y de maicon -Como ya se mencionó, los métodos de instancia están relacionados con un objeto en particular, mientras que los métodos estáticos o de clase (también denominados métodos compartidos) están asociados a una clase en particular. En una implementación típica, a los métodos de instancia se les pasa una referencia oculta al objeto al que pertenecen, comúnmente denominada this o self (referencias a sí mismo por sus significados en inglés), para que puedan acceder a los datos asociados con el mismo. Un ejemplo típico de un método de clase sería uno que mantuviera la cuenta de la cantidad de objetos creados dentro de esa clase.
Los llamados métodos obtener y métodos establecer (en inglés get y set) proveen un mecanismo para leer y modificar (respectivamente) los datos privados que se encuentran almacenados en un objeto o clase.
Algunos lenguajes de programación requieren la definición de constructores, siendo estos métodos de instancia especiales llamados automáticamente cuando se crea una instancia de alguna clase. En Java y C++ se distinguen por tener el mismo nombre de la clases a la que están asociados.

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