OBJETOS

Informalmente, un objeto representa una entidad del mundo real
Entidades Físicas
(Ej.: Vehículo, Casa, Producto)
Entidades Conceptuales
(Ej.: Proceso Químico, Transacción Bancaria)
Entidades de Software
(Ej.: Lista Enlazada, Interfaz Gráfica)
Según las definiciones formales de James Rumbaugh y Grady Booch (dos de las principales autoridades de la orientación a objetos en la actualidad, y coautores de UML, el lenguaje de modelado universal para objetos), un objeto es una abstracción de la realidad que tiene un significado concreto y claro para el problema que se está modelando. Un ejemplo de una entidad física representada como un objeto conceptual puede ser “Un Auto”.
Ahora bien, todos los objetos tienen 3 características principales:
-Estado: representa la definición de atributos internos del objeto, sus características. Por ejemplo, un auto tiene un cierto número de puertas, un cierto número de ruedas, un volante, un motor, pedales, etc.
-Comportamiento: representa la definición del comportamiento del objeto, las acciones que éste puede realizar. Por ejemplo, un auto puede “arrancar”, “frenar”, “doblar”, “acelerar”, etc.
-Identidad: Cada objeto tiene una identidad única, incluso si su estado es idéntico al de otro objeto.

Un Objeto posee Estado
Lo que el objeto sabe
El estado de un objeto es una de las posibles condiciones en que el objeto puede existir
El estado normalmente cambia en el transcurso del tiempo
El estado de un objeto es implementado por un conjunto de propiedades (atributos), además de las conexiones que puede tener con otros objetos
Lo que el objeto puede hacer
El comportamiento de un objeto determina cómo éste actúa y reacciona frente a las peticiones de otros objetos
Es modelado por un conjunto de mensajes a los que el objeto puede responder (operaciones que puede realizar)
Se implementa mediante métodos
Un Objeto pose Identidad

[]DCE



Objetos
Paradigma de programación orientada a objetos (POO, o OOP en inglés), un objeto es la unidad individual que en tiempo de ejecución realiza las tareas de un programa. 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.

En el mundo de la programación orientada a objetos (POO), un objeto es el resultado de la instanciación de una clase. Una clase es el anteproyecto que ofrece la funcionalidad en ella definida, pero ésta queda implementada sólo al crear una instancia de la clase, en la forma de un objeto. Por ejemplo: 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. Los conceptos de clase y objetos son análogos a los de tipo de datos y variable, es decir, definida una clase podemos crear objetos de esa clase, igual que disponiendo de un determinado tipo de dato (por ejemplo el tipo entero), podemos definir variables de dicho tipo:

int a,b;

( 'int' es un tipo de dato y 'a' y 'b' son variables de tipo entero con las que podemos operar)

Para utilizar la funcionalidad definida en una clase en particular (salvo en las clases abstractas), primeramente es necesario crear un objeto de esa clase. De la misma manera para una persona que desea sentarse, las especificaciones para construir una silla serán de poca utilidad; lo que se necesita es una silla real construida a partir de esas especificaciones. Siguiendo con la analogía anterior, también se puede decir que para hacer operaciones aritméticas, de nada sirve por sí solo el tipo entero (int); para ello necesitamos variables (o constantes) con las que operar.

Instanciación de una clase en un objeto

Para crear un objeto de tipo 'Aritmetica' (instanciar a Aritmetica) en C++ se haría de la siguiente forma:

Aritmetica calculador = Aritmetica();
#Otra manera usando punteros
Aritmetica* calculador1 = new Aritmetica();

la misma operación usando python sería así:

calculador = Aritmetica()

[]W


El elemento fundamental de la OOP es, como su nombre lo indica, el objeto. Podemos definir un objeto como un conjunto complejo de datos y programas que poseen estructura y forman parte de una organización.

Esta definición especifica varias propiedades importantes de los objetos. En primer lugar, un objeto no es un dato simple, sino que contiene en su interior cierto número de componentes bién estructurados. En segundo lugar, cada objeto no es un ente aislado, sino que forma parte de una organización jerárquica o de otro tipo.

HERENCIA

Es una relación entre clases en la cual una clase comparte la estructura y comportamiento definido en otra clase (Grady Booch)
Cada clase que hereda de otra posee:
Los atributos de la clase base además de los propios
Soporta todos o algunos de los métodos de la clase base
Una subclase hereda de una clase base
Ejemplo:
Herencia “Es-Un”: herencia real, donde la subclase es un tipo específico de la superclase
Un Cuadrado es un Rectángulo
Un perro es un mamífero
Un automóvil es un vehículo a motor
El propósito principal de la herencia es el de organizar mejor las clases que componen una determinada realidad, y poder agruparlas en función de atributos y comportamientos comunes a la vez que cada una se especializa según sus particularidades.
Cabe aclarar además que hay dos tipos de herencias:
Herencia Simple: una clase derivada puede heredar sólo de una clase base (los lenguajes .NET soportan este tipo de herencia)
Herencia Múltiple: una clase derivada puede heredar de una o más clases base (C++ es un ejemplo de lenguaje que soporta este tipo de herencia).

[]DCE


Herencia

Es una propiedad que permite que los objetos sean creados a partir de otros ya existentes, obteniendo características (métodos y atributos) similares a los ya existentes. Es la relación entre una clase general y otra clase mas especifica. Es un mecanismo que nos permite crear clases derivadas a partir de clase base, Nos permite compartir automáticamente métodos y datos entre clases subclases y objetos. Por ejemplo: Si declaramos una clase párrafo derivada de un clase texto todos los métodos y variables asociadas con la clase texto son automáticamente heredados por la subclase párrafo.


La herencia es uno de los mecanismos de la programación orientada a objetos, por medio del cual una clase se deriva de otra, llamada entonces superclase, de manera que extiende su funcionalidad. Una de sus funciones más importantes es la de proveer Polimorfismo y late binding.

La idea es la de partir de las situaciones más generales e ir derivando hacia las más particulares, creando categorías, de la misma forma en que piensa el ser humano.

public class Mamifero
{

private int patas;
private String nombre;

public void imprimirPatas()
{
System.out.println(nombre + " tiene " + patas + " patas\n");
}

public Mamifero(String nombre, int patas)
{
this.nombre = nombre;
this.patas = patas;
}
}

public class Perro extends Mamifero
{
public Perro(String nombre){
super(nombre, 4);
}
}

public class Gato extends Mamifero{
public Gato(String nombre){
super(nombre, 4);
}
}

public class CreaPerro {
public static void main(String [] args) {
Perro bobi = new Perro("Bobi");
bobi.imprimirPatas(); /*Está en la clase mamífero*/
}
}


Se declaran las clases mamíferos, gato y perro, haciendo que gato y perro sean unos mamíferos (derivados de esta clase), y se ve como a través de ellos se nombra al animal pero así también se accede a patas dándole el valor por defecto para esa especie.
[]w

POLIMORFISMO

*Es la propiedad que tienen los objetos de permitir invocar genéricamente un comportamiento (método) cuya implementación será delegada al objeto correspondiente recién en tiempo de ejecución
*El polimorfismo tiende a existir en las relaciones de herencia, pero no siempre es así
*La definición del método reside en la clase base
*La implementación del método reside en la clase derivada
*La invocación es resuelta al momento de ejecución


Aquí tenemos un ejemplo práctico de la implementación de polimorfismo en un diseño orientado a objetos. Por un lado tenemos la clase base “Transporte”, que posee los métodos “Avanzar” y “Frenar”. Por otro lado tenemos tres clases distintas derivadas de la clase “Transporte”, cada una de las cuales podrá sobrescribir la implementación de los métodos Avanzar y Frenar para que su comportamiento sea más específico.
Ahora bien, como todas heredan de la misma clase base, las clases derivadas pueden ser tratadas genéricamente. Esto quiere decir que podríamos tener un array que almacene objetos de tipo Transporte, y recorrerlo luego para llamar al método “Avanzar” de cada uno. De esta forma, en tiempo de codificación es imposible saber a qué método “Avanzar” se está llamando en realidad (al del Auto? Al del caballo? Al del transbordador?), sino que esta decisión es tomada en tiempo de ejecución en base al tipo particular de objeto que esté instanciado.

En pseudocódigo, esto se escribiría de la siguiente manera:

Definir arrayTransportes (3) de tipo Transporte
arrayTransportes(1) = nuevo Automóvil() //Un automóvil ES UN TIPO DE transporte
arrayTransportes(2) = nuevo Transbordador() //Un Transbordador ES UN TIPO DE transporte
arrayTransportes(3) = nuevo Caballo() //Un Caballo ES UN TIPO DE transporte

Por Cada (Transporte t en arrayTransportes)
t.Avanzar()
t.Frenar()
Fin

[]DCE


En programación orientada a objetos se denomina polimorfismo a la capacidad que tienen los objetos de una clase de responder al mismo mensaje o evento en función de los parámetros utilizados durante su invocación. Un objeto polimórfico es una entidad que puede contener valores de diferentes tipos durante la ejecución del programa.

En algunos lenguajes, el término polimorfismo es también conocido como 'Sobrecarga de parámetros' ya que las características de los objetos permiten aceptar distintos parámetros para un mismo método (diferentes implementaciones) generalmente con comportamientos distintos e independientes para cada una de ellas.

Ejemplo:

' este método devuelve la suma de 2 parámetros
Function suma(int numero1,int numero2)
' este método devuelve la suma de los 3 parámetros
Function suma(int numero1,int numero2, int numero3)
' este método devuelve la concatenación de cadena1 y cadena2
Function suma(String cadena1, String cadena2)

En el ejemplo mostrado, los 3 métodos pertenecen a la misma clase (que será un objeto una vez instanciado y en memoria). Nótese que el nombre del método es siempre el mismo; estos se diferencian entre sí por:

* La cantidad de parámetros.
* El orden en que se ubican los parámetros al invocar al método.
* El tipo de dato de los parámetros.
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).
[]W


Definición de polimorfismo

La palabra polimorfismo proviene del griego y significa que posee varias formas diferentes. Este es uno de los conceptos esenciales de una programación orientada a objetos. Así como la herencia está relacionada con las clases y su jerarquía, el polimorfismo se relaciona con los métodos.

En general, hay tres tipos de polimorfismo:

* Polimorfismo de sobrecarga
* Polimorfismo paramétrico (también llamado polimorfismo de plantillas)
* Polimorfismo de inclusión (también llamado redefinición o subtipado)

Los diferentes tipos de polimorfismo

Trataremos de describir ahora con más precisión estos tipos de polimorfismo, pero le sugerimos prestar atención, ya que muchas personas suelen confundirse al tratar de comprender las diferencias existentes entre estos tres tipos.
Polimorfismo de sobrecarga

El polimorfismo de sobrecarga ocurre cuando las funciones del mismo nombre existen, con funcionalidad similar, en clases que son completamente independientes una de otra (éstas no tienen que ser clases secundarias de la clase objeto). Por ejemplo, la clase complex, la clase image y la clase link pueden todas tener la función "display". Esto significa que no necesitamos preocuparnos sobre el tipo de objeto con el que estamos trabajando si todo lo que deseamos es verlo en la pantalla.

Por lo tanto, el polimorfismo de sobrecarga nos permite definir operadores cuyos comportamientos varían de acuerdo a los parámetros que se les aplican. Así es posible, por ejemplo, agregar el operador + y hacer que se comporte de manera distinta cuando está haciendo referencia a una operación entre dos números enteros (suma) o bien cuando se encuentra entre dos cadenas de caracteres (concatenación).
Polimorfismo paramétrico

El polimorfismo paramétrico es la capacidad para definir varias funciones utilizando el mismo nombre, pero usando parámetros diferentes (nombre y/o tipo). El polimorfismo paramétrico selecciona automáticamente el método correcto a aplicar en función del tipo de datos pasados en el parámetro.

Por lo tanto, podemos por ejemplo, definir varios métodos homónimos de addition() efectuando una suma de valores.

* El método int addition(int,int) devolvería la suma de dos números enteros.
* float addition(float, float) devolvería la suma de dos flotantes.
* char addition(char, char) daría por resultado la suma de dos caracteres definidos por el autor.
* etc.

Una signature es el nombre y tipo (estático) que se da a los argumentos de una función. Por esto, una firma de método determina qué elemento se va a llamar.
Polimorfismo de subtipado

La habilidad para redefinir un método en clases que se hereda de una clase base se llama especialización. Por lo tanto, se puede llamar un método de objeto sin tener que conocer su tipo intrínseco: esto es polimorfismo de subtipado. Permite no tomar en cuenta detalles de las clases especializadas de una familia de objetos, enmascarándolos con una interfaz común (siendo esta la clase básica).

Imagine un juego de ajedrez con los objetos rey, reina, alfil, caballo, torre y peón, cada uno heredando el objeto pieza.
El método movimiento podría, usando polimorfismo de subtipado, hacer el movimiento correspondiente de acuerdo a la clase objeto que se llama. Esto permite al programa realizar el movimiento.de_pieza sin tener que verse conectado con cada tipo de pieza en particular.
[]http://es.kioskea.net/poo/polymorp.php3


Polimorfismo

El concepto de Polimorfismo es uno de los fundamentos para cualquier lenguaje orientado a Objetos, las mismas raíces de la palabra pueden ser una fuerte pista de su significado: Poli = Multiple, morfismo= Formas , esto implica que un mismo Objeto puede tomar diversas formas.

A través del concepto de Herencias ("Inheritance") es posible ilustrar este comportamiento:

herencias

El poder manipular un Objeto como si éste fuera de un tipo genérico otorga mayor flexibilidad al momento de programar con Objetos, el término Polimorfismo también es asociado con un concepto llamado Late-Binding (Ligamiento Tardío), observe el siguiente fragmento de código:

     Figura a = new Circulo();
Figura b = new Triangulo();

Inicialmente se puede pensar que este código generaría un error debido a que el tipo de referencia es distinta a la instancia del objeto, sin embargo, el fragmento anterior es correcto y demuestra el concepto de Polimorfismo; para asentar este tema se describe un ejemplo más completo:





ENCAPSULAMIENTO

  • Principio que establece que los atributos propios de un objeto no deben ser visibles desde otros objetos
Deben ser declarados como privados
  • Permite abstraer al resto del mundo de la complejidad de la implementación interna
  • Permite exponer el estado del objeto sólo a través del comportamiento que le hayamos definido mediante miembros públicos
  • ¿Por qué es útil?
    • Punto de Control/Validación
    • Mejor respuesta ante los Cambios.
[]Desarrollador 5 Estrellas


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.
[] Wikipedia


Encapsulamiento
El encapsulamiento es el proceso por el cual los datos que se deben enviar a través de una red se deben colocar en paquetes que se puedan administrar y rastrear. El encapsulado consiste pues en ocultar los detalles de implementación de un objeto, pero a la vez se provee una interfaz pública por medio de sus operaciones permitidas. Considerando lo anterior también se define el encapsulado como la propiedad de los objetos de permitir el acceso a su estado únicamente a través de su interfaz o de relaciones preestablecidas con otros objetos.
[]http://www.mastermagazine.info/termino/4880.php


BIBLIOGRAFIA

[]
Powered by Blogger