miércoles, 9 de marzo de 2011

POO

POO       Programación orientada a objetos
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.
Los objetos son entidades que combinan estado (atributo)comportamiento (método) e identidad:
§  El estado está compuesto de datos, será uno o varios atributos a los que se habrán asignado unos valores concretos (datos).
§  El comportamiento está definido por los procedimientos o métodos con que puede operar dicho objeto, es decir, qué operaciones se pueden realizar con él.
§  La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante).
Un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamados métodos, que favorecen la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separa el estado y el comportamiento.
Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. Hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría realizando una programación estructurada camuflada en un lenguaje de programación orientado a objetos.
La POO difiere de la programación estructurada tradicional, en la que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. En la programación estructurada sólo se escriben funciones que procesan datos. Los programadores que emplean POO, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos.



Ejemplo:
Cómo se piensa en objetos
Pensar en términos de objetos es muy parecido a cómo lo haríamos en la vida real. Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO. Diríamos que el coche es el elemento principal que tiene una serie de características, como podrían ser el color, el modelo o la marca. Además tiene una serie de funcionalidades asociadas, como pueden ser ponerse en marcha, parar o aparcar.
Pues en un esquema POO el coche sería el objeto, las propiedades serían las características como el color o el modelo y los métodos serían las funcionalidades asociadas como ponerse en marcha o parar.
Por poner otro ejemplo vamos a ver cómo modelizaríamos en un esquema POO una fracción, es decir, esa estructura matemática que tiene un numerador y un denominador que divide al numerador, por ejemplo 3/2.
La fracción será el objeto y tendrá dos propiedades, el numerador y el denominador. Luego podría tener varios métodos como simplificarse, sumarse con otra fracción o número, restarse con otra fracción, etc.
Estos objetos se podrán utilizar en los programas, por ejemplo en un programa de matemáticas harás uso de objetos fracción y en un programa que gestione un taller de coches utilizarás objetos coche. Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos también son objetos. Es decir, el taller de coches será un objeto que utilizará objetos coche, herramienta, mecánico, recambios, etc.

Conceptos fundamentales:
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.
Ejemplo:
¿Qué es una clase?
Una clase es algo abstracto que define la "forma" del objeto, se podría hablar de la clase como el molde de los objetos.
En el mundo real existen objetos del mismo tipo, por ejemplo tu bicicleta es solo una mas de todas las bicicletas del mundo. Entonces diríamos que tu bicicleta es una instancia de la clase "Bicicleta". Todas las bicicletas tienen los atributos: color, cantidad de cambios, dueño y métodos: acelerar, frenar, pasar cambio, volver cambio.
Las fábricas de bicicletas utilizan moldes para producir sus productos en serie, de la misma forma en POO utilizaremos la clase bicicleta (molde) para producir sus instancias (objetos).
Los objetos son instancias de clases.
Ejemplo: Podríamos tener la clase Perro, una instancia de esta clase podría ser el objeto perro llamado "Chicho". La clase Perro especificaría que todos los perros tendrían un nombre, color de pelo, una altura. Mientras que la instancia "Chicho" contendrá valores específicos para cada uno de estos atributos.
Podemos definir a una clase como una plantilla que define variables y métodos comunes para todos los objetos de cierto tipo.
Existe un lenguaje de modelado llamado UML mediante el cual podemos representar gráficamente todo un sistema orientado a objetos utilizando rectángulos, líneas y otro tipo de símbolos gráficos. Según UML, la clase "Cuenta Bancaria" antes mencionada se representará gráficamente como sigue:

Mensajes

Un objeto por si solo no tiene mucho significado. Ejemplo: el objeto "bicicleta" no tiene mucho sentido si no interactúa con un objeto "persona" que pedalee.
La interacción entre objetos se produce mediante mensajes. Los mensajes son llamados a métodos de un objeto en particular.
Podemos decir que el objeto persona envía el mensaje "girar a la izquierda" al objeto bicicleta.
Los mensajes pueden contener parámetros. Por ejemplo teniendo un método en la clase bicicleta llamado "Girar" que recibe como parámetro la dirección (derecha o izquierda).
Un mensaje está compuesto por los siguientes tres elementos:
1.     El objeto destino, hacia el cual el mensaje es enviado
2.     El nombre del método a llamar
3.     Los parámetros solicitados por el método

Beneficios de los mensajes

Como todo lo que un objeto puede hacer esta expresado mediante métodos, el envío de mensajes soporta todas las posibles interacciones entre objetos.
Para enviar o recibir mensajes, los objetos no necesitan formar parte del mismo proceso, ni siquiera de la misma máquina.

INSTANCIA: Definición y ejemplo
Instancia. Se crea cuando una construye un objeto. Las instancias de una clase comparten los mismo atributos pero pueden diferir en qué los atributos contengan. Por ejemplo una clase “Persona” describe los atributos comunes de una persona; cada persona es generalmente parecida, pero varía en atributos como “altura” y “peso”. La clase listaría tipos de atributos, así como también las acciones que una persona podría realizar: “saltar”, “caminar”, “andar”, “comer”. La instancia es el objeto creado en tiempo de corrida de una aplicación. Otro ejemplo sería: “Lassie” es una instancia de la clase “Perro” y así también “Pluto” sería otra instancia de la misma clase.

OBJETO: Objeto. Se refiere comúnmente a atributos (elementos) y comportamientos (métodos) encapsulados en una entidad. Son un método natural para implementar estructuras de datos abstractos, trayendo “físicamente” componentes de datos con procedimientos para luego manipularlos. Todo objeto tiene estado, exhibe un comportamiento bien definido y posee identidad única.

Ejemplo:

¿Qué es un objeto?

Objeto es el concepto clave de la Programación Orientada a Objetos, la idea de objeto es similar a la del mundo real, un objeto puede ser una silla, una mesa. Tu perro es un objeto.
Los objetos tienen dos características: Un estado y un comportamiento. Fijate que por ejemplo tu perro tiene un estado: nombre, color, raza, altura, etc. y un comportamiento: ladrar, cavar pozo, llorar, dormir, comer, etc.
Un auto es un objeto. También tiene un estado: Cantidad de puertas, color, tamaño, etc. y un comportamiento: acelerar, frenar, subir cambio, bajar cambio, girar izq., girar der., etc.
Entonces podemos definir a un objeto en POO, como un conjunto de datos y funciones relacionadas. A las funciones de los objetos, tales como acelerar en el caso del auto, de aquí en más las llamaremos métodos, a los datos los llamaremos atributos.
Los objetos en programación, son modelados observando objetos del mundo real, por ejemplo implementamos el objeto "perro" dentro de nuestro programa definiendo los atributos y métodos del objeto perro real.
El objeto "Auto" se puede representar gráficamente como sigue:


HERENCIA: . Es la capacidad formar nuevas Clases usando clases previamente definidas. Las nuevas clases, conocida como Clases Derivadas, toman (o heredan) los atributos y los métodos preexistentes de la clase “madre”. Es una intento para ayudar a reusar código con poca o casi ninguna modificación.

Los sistemas orientados a objetos permiten definir clases en término de otras clases. Por ejemplo ovejero alemán y caniche son diferentes razas de perros. En la terminología orientada a objetos "Ovejero Alemán" y "Caniche" son subclases de la clase perro. De forma similar Perro es la superclase de "Ovejero Alemán".
Entonces tenemos la siguiente jerarquía de clases:
En UML se representa la relación de herencia mediante una flecha.
Cada subclase hereda los atributos de la superclase. Tanto la clase "Ovejero Alemán" como "Caniche" tendrán los atributos nombre, color de pelo, altura definidos en la clase Perro.
Una subclase no está limitada únicamente a los atributos de su superclase, también puede tener atributos propios, o redefinir algunos definidos anteriormente en la superclase.
No se está limitado tampoco a un solo nivel de herencia, se pueden tener todos los que se consideren necesarios.

Ejemplo:
Clase Empleado hereda de clase Persona, y esta a su vez hereda de clase Animal.
Las subclases proveen un comportamiento especializado sobre los elementos comunes provistos por las superclases. Gracias a la herencia, los programadores pueden rehusar código una y otra vez.

Un ejemplo más complicado de un objeto podría ser el siguiente: Objeto: Cuenta bancaria
Atributos: tipo, titular, saldo.
Métodos: Depositar, Extraer. Aquí se ve la necesidad de que el atributo "saldo" sea solo accesible a través de los métodos "Depositar" y "Extraer" por una cuestión de seguridad, encapsulamiento y para evitar comportamientos indeseados.

POLIMORFISMO: Es la habilidad de un tipo “A” que aparece y es usado como otro tipo “B”. Significa que un tipo “A” de alguna manera deriva de un tipo “B” o que un tipo “A” implementa una interface que representa un tipo “B”.
Ejemplo:  si a un “Perro” se le ordenara que hablara, éste ladraría, más si a un “Cerdo” se le ordenara que hablara respondería con un “oink oink“.

ATRIBUTO: Los atributos son las caracterísiticas individuales que diferencian un objeto de otro y determinan su apariencia, estado u otras cualidades. Los atributos se guardan en variables denominadas de instancia, y cada objeto particular puede tener valores distintos para estas variables.
Las variables de instancia también denominados miembros dato, son declaradas en la clase pero sus valores son fijados y cambiados en el objeto.
Además de las variables de instancia hay variables de clase, las cuales se aplican a la clase y a todas sus instancias.
 Ejemplo: el número de ruedas de un automóvil es el mismo cuatro, para todos los automóviles.
Atributo: 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"
METODOS: Como se ha señalado, los métodos corresponden al comportamiento o protocolo que se encarga de ejecutar las acciones que se requieren para que un objeto realice su trabajo.
Ejemplo: Pensemos en un objetos real, una pelota, la cual posee características propias, tener color, ser redonda o estar inflada. Ahora consideremos cada método como una forma que podemos manipularla: lanzarla, hacerla rodar, inflarla etc.
TIPOS DE METODOS:
-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. Lenguajes como Smalltalk no requieren constructores ni destructores.
Los métodos de acceso son un tipo de método normalmente pequeño y simple que se limita a proveer información acerca del estado de un objeto. Aunque introduce una nueva dependencia, la utilización de métodos es preferida a acceder directamente a la información para proveer de una nueva capa de abstracción (programación orientada a objetos). Por ejemplo, si una clase que modela una cuenta bancaria provee de un método de acceso "obtenerBalance()" en versiones posteriores de la clase se podría cambiar el código de dicho método substancialmente sin que el código dependiente de la clase tuviese que ser modificado (un cambio sería necesario siempre que el tipo de dato devuelto por el método cambie). Los métodos de acceso que pueden cambiar el estado de un objeto son llamados, frecuentemente, métodos de actualización ó métodos de mutación; a su vez, los objetos que proveen de dichos métodos son denominados óbjetos mutables.


ACCESORES: los accesores proporcionan acceso a los datos internos de un objeto, pero no permite saber si los datos están en una variable, una combinación de variables o si son calculados.
LOS COMPORTAMIENTOS COMO
get total ajustado(),get descuento()
se denominan accesores. El acceso podría ser directo,como el caso de get descuento(), o se podría realizar algún tipo de proceso antes de devolver algún valor, como en el caso de get total ajustado()

PARAMETRO: (parameter) En informática, un parámetro es un tipo de variable que es recibida por una función, procedimiento o subrutina.

Un parámetro influye en el comportamiento o el resultado de la ejecución de la función, procedimiento o subrutina (de ahora en más sólo procedimiento) que lo recibe. Son muy utilizados en la
programación.

En general, en la definición de un procedimiento, es incluida una lista ordenada de parámetros; de esta manera, cada vez que el procedimiento es llamado, los argumentos de esa llamada pueden ser asignados a los correspondientes parámetros. Aquí se expone sutilmente la diferencia técnica entre parámetro y argumento, aunque muchas veces son tratados como sinónimos.

La semántica de cómo pueden ser declarados los parámetros y cómo los argumentos son pasados a los parámetros de los procedimientos, son definidos por cada
lenguaje de programación.

Formas de pasar un parámetro

En forma general, existen dos formas de pasar un parámetro a un procedimiento: por valor y por referencia.

Un parámetro se pasa por valor cuando se copia su contenido y si es alterado su valor dentro del procedimiento no se modifica el parámetro original. En cambio cuando un parámetro es pasado por referencia, si se modifica su valor dentro del procedimiento, se ve modificado el original.

Tipos de datos

En
lenguajes de programación fuertemente tipados, cada tipo de parámetro debe ser explícitamente especificado en la declaración del procedimiento. En tanto en los lenguajes que utilizan inferencia de tipos intentan descubrir los tipos automáticamente del cuerpo de la función y su uso. En lenguajes de programación débilmente tipados, el tipo del parámetro es resuelto en tiempo de ejecución.

Algunos lenguajes emplean una palabra clave especial (por ejemplo, void) para indicar que ese procedimiento no tiene parámetros.

Diferencia entre parámetro y argumento en programación

En general las palabras argumento y parámetro son tomadas como sinónimos; en realidad hay diferencia: los parámetros aparecen en la definición del procedimiento, los argumentos aparecen en los llamados a procedimientos.

Un parámetro es una propiedad intrínseca de un procedimiento, dado que está incluido en su definición. En tanto, los argumentos son más bien los valores actuales asignados a los parámetros variables cuando la subrutina es llamada. En la práctica no se suele distinguir tajantemente entre ambos términos.

Para más información y ejemplos ver:
Diferencia entre parámetro y argumento en programación


No hay comentarios:

Publicar un comentario