2.1 Introducción a la Programación orientada a objetos.
2.1.1 Orígenes de la POO.
2.1.2 Beneficios de la POO.
2.2 Clases.
2.2.1 Encapsulamiento.
2.2.1.1 Concepto de caja negra.
2.2.1.2 Concepto de interfaz.
2.2.2 Abstracción.
2.2.2.1 Abstracción efectiva.
2.2.2.2 Ocultamiento de información.
2.2.2.3 Atributos
2.2.2.4 Métodos
2.2.2.5 Mensajes
2.2.3 Diseño de una clase
2.3 Objetos
2.3.1 Ciclo de vida de un objeto.
2.3.2 Estado y comportamiento de los objetos.
2.4 Herencia y Polimorfismo.
2.4.1 Conceptos básicos.
2.4.2 Relación entre herencia y el polimorfismo.
Unidad 2.- Fundamentos del paradigma orientado a objetos.
TEMARIO
Abstracción
Las abstracciones son una manera fundamental que tenemos los humanos de manejarnos con la complejidad. Estas devienen del reconocimiento de las similaridades entre ciertos objetos, situaciones o procesos en el mundo real, y la decisión de concentrarse en estas similaridades ignorando las diferencias. Una abstracción es una descripción simplificada de un sistema que enfatiza algunos de sus detalles o propiedades mientras suprime otros. Una buena abstracción es la que enfatiza detalles que son significantes al lector, y suprime los que no lo son.
Una abstracción se enfoca sobre una vista externa del objeto, y sirve para separar su comportamiento esencial de su implementación.
La abstracción enfoca las características esenciales de algún objeto, relativa a la perspectiva del observador
Un cliente es un objeto que usa recursos de otro objeto. El comportamiento de un objeto se puede caracterizar por las operaciones que sus clientes pueden realizar sobre él, y las operaciones que él puede realizar sobre otros objetos. El conjunto de operaciones que un cliente puede requerir de un objeto define su protocolo.
Encapsulamiento
La abstracción de un objeto debería preceder a su implementación. Una vez que la implementación es seleccionada, esta debería tratarse como un secreto de la abstracción y ocultársela a la mayoría de los clientes.
Abstracción y encapsulamiento son conceptos complementarios: la abstracción enfoca la vista externa de un objeto, y el encapsulamiento (ocultamiento de la información) previene que los clientes vean la parte interna, donde el comportamiento de la abstracción es implementada.
Entonces, "El encapsulamiento es el proceso de ocultar todos los detalles de un objeto que no contribuyen a sus características esenciales.
El encapsulamiento oculta detalles de implementación de un objeto
Objetos
2) Clasificación
3) Instanciación
4) Generalización
5) Abstracción
6) Encapsulación
7) Modularidad
8) Extensibilidad
9) Polimorfismo
10) Reuso de Código
Los aspectos principales de la programación orientada a objetos son:
Objetos
El objeto es la entidad básica del modelo orientado a objetos,
El objeto integra una estructura de datos (atributos) y un comportamiento (operaciones)
Los objetos se distinguen entre sí por medio de su propia identidad, aunque internamente los valores de sus atributos sean iguales.
Clasificación
Las clases describen posibles objetos, comunes en su estructura y comportamiento.
Los objetos que contienen los mismos atributos y operaciones pertenecen a la misma clase.
La estructura de clases integra las operaciones con los atributos a los cuales se aplican.
Instanciación
El proceso de crear objetos pertenecientes a cierta clase se llama instanciación.
El objeto es la instancia de una clase.
Pueden ser instanciados un número indefinido de objetos de cierta clase.
Generalización
En una jerarquía de clases, se comparten atributos y operaciones entre clases basados en la generalización de clases.
El mecanismo para describir la jerarquía de generalización de clases es la herencia.
Las clases más generales se conocen como superclases.
Las clases más especializadas se conocen como subclases.
La herencia puede ser sencilla o múltiple.
Abstracción
Se concentra en lo primordial de una entidad y no en sus propiedades secundarias.
Se concentra en lo que el objeto hace y no en cómo lo hace.
Se da énfasis a cuales son los objetos y no cómo son usados, logrando el desarrollo de sistemas más estables.
Encapsulación
Encapsulación o encapsulamiento es la separación de las propiedades externas de un objeto de los detalles de implementación internos del objeto.
Se separa la interface del objeto de sus implementación, limitando la complejidad al mostrarse sólo la información relevante.
Se limita el impacto a cambios en la implementación, ya que los cambios a las propiedades internas del objeto no afectan su interacción externa.
Se reduce el esfuerzo en migrar el sistema a diferentes plataformas.
Se protege al objeto contra posibles errores, y se permite hacer extensiones futuras en su implementación.
Modularidad
El encapsulamiento de los objetos da lugar a gran modularidad.
Cada módulo se concentra en una sola clase de objetos.
Los módulos tienden a ser pequeños y concisos.
La modularidad facilita encontrar y corregir problemas.
La complejidad del sistema se reduce facilitando su mantenimiento.
Extensibilidad
La extensibilidad permite hacer cambios en el sistema sin afectar lo que ya existe.
Nuevas clases pueden ser definidas sin tener que cambiar la interface del resto del sistema.
La definición de los objetos existentes puede ser extendida sin necesidad de cambios más allá del propio objeto.
Polimorfismo
Polimorfismo permite definir las mismas operaciones con diferente comportamiento en diferentes clases.
Se permite llamar una operación sin preocuparse de cuál implementación es requerida en que clase, siendo la responsabilidad de la jerarquía de clases y no del usuario.
Reuso de Código
La orientación a objetos apoya el reuso de código en el sistema.
Los componentes orientados a objetos se pueden utilizar para estructurar librerías reusables.
El reuso reduce el tamaño del sistema durante la creación y ejecución.
Al corresponder varios objetos a una misma clase, se guardan los atributos y operaciones una sola vez por clase, y no por cada objeto.
Por medio de la generalización y especialización, las subclases heredan atributos y operaciones comunes, definidos en las superclases.
La herencia es uno de los factores más importantes contribuyendo al incremento en el reuso de código dentro de un proyecto o entre múltiples proyectos.
Nuevas subclases de clases previamente definidas se pueden crear en el reuso de una clase, pudiéndose crear nuevas operaciones, o modificar las ya existentes.
Definición de clase
Clase : Es una descripción de atributos y comportamientos de un conjunto de objetos similares. Los objetos de una clase o tipo determinado comparten los mismos comportamientos y atributos. Las clases actúan en forma muy parecida a una plantilla o molde para galletas en el sentido de que una clase se utiliza para crear o instanciar objetos
Los atributos son características externas y visibles de una clase. El color de los ojos y del cabello de una persona, son ejemplos de atributos.
Un método (comportamiento) es la acción que realiza un objeto cuando se le pasa un mensaje o en respuesta a un cambio de estado; es algo que realiza un objeto.
Un objeto puede ejercer el comportamiento de otro objeto ejecutando una operación sobre este último. Los términos llamada a método, llamada a función o paso de mensaje se utilizan en lugar de realizar una operación, cada una de estas acciones activa el comportamiento de un objeto
class es una palabra reservada que se utiliza para definir o declarar una clase
nombre-clase es cualquier identificador válido
extends es una palabra reservada que indica si la clase tiene herencia o es subclase o extensión de una claseSuperior o superclase
claseSuperior es un identificador o nombre de la superclase de la que hereda atributos y comportamientos
implements es una palabra reservada que indica si la clase implementa una o varias interfaces
cuerpo es una secuencia de declaraciones de variables, constantes , constructores y métodos
La sintaxis de una simple definición o declaración de clase es:
Atributos (o Variables)
Los atributos o variables son elementos en los programas que cambian su valor en el transcurso de ejecución del programa. Los atributos guardan valores de cierto tipo que pueden ser valores de tipo primitivos u objetos. En Java podemos clasificar los atributos en:
Instancias de atributos. Son miembros de la clase y se crean al instanciar un objeto de la clase.
Atributos de una clase. Son miembros de la clase y son algo similar a variables globales, utilizan el modificador static.
Atributos locales a métodos. Su ámbito es dentro del método.
La declaración de atributos en Java se hace de forma similar al C / C++.
La sintaxis de una simple declaración de un atributo es:
nombre-de-atributo es cualquier identificador válido.
Métodos
Los métodos son algo parecido a las funciones del lenguaje C /C++, pero en Java no se permiten colocar métodos fuera de la definición de clase . Con los métodos implementamos el comportamiento de los objetos.
Hay varios tipos de métodos:
Métodos de instancia. Son miembros de la clase y son métodos que pueden ser utilizados cuando se crea un objeto de la clase a la que pertenecen, esto es, cuando se crea una instancia de la clase.
Métodos de clase. Son miembros de la clase y son métodos que pueden ser invocados sin necesitar crear una instancia de la clase, y los identificamos fácilmente porque tienen el modificador. STATIC
Métodos constructores. Como veremos más adelante, son métodos con el nombre de la clase y que son invocados al instanciar un objeto o crear un ejemplar de la clase al que pertenecen con el operador new.
Métodos (Continuación)
La sintáxis de una simple declaración de un método es:
lista-de-parámetros es una secuencia de declaraciones de parámetros
[ throws claseExcepcion1,.., claseExcepcionN ] es una lista de posibles excepciones que en un momento dado el código del método puede lanzar.
Cuerpo es una secuencia de declaraciones de variables e instrucciones que son ejecutadas por el método cuando se le invoca.
Métodos (Continuación)
Ejemplo:
public static void main(String args[]) throws IOException { /* aquí van las sentencias del cuerpo */ }
Vamos a aprovechar el ejemplo para definir un concepto importante conocido como firma del método.
Firma de un método: Es la definición del método, excluyendo el cuerpo, es algo parecido al concepto de función prototipo del lenguaje C. En el ejemplo anterior, la firma del método es:
public static void main(String args[]) throws IOException
El concepto es importante, porque la documentación de las API's de Java vemos listadas, cientos de miles de firmas de métodos y las clases a los que pertenecen.
Creación de objetos
Objeto. Un objeto es una cosa, generalmente extraída del vocabulario del espacio del problema o del espacio de la solución .
Todo objeto tiene:
Identidad (puede nombrarse o distinguirse de alguna manera de otros objetos )
Estado ( generalmente hay algunos datos asociados a él)
Comportamiento ( se pueden hacer cosas al objeto, y él puede a su vez puede hacer cosas a otros objetos)
Creación de Objetos. Todo en Java se trata como un objeto. Se puede manipular objetos a través de handles (referencias, identificadores)
El handle o referencia no necesariamente está conectado a un objeto. Ejemplo:
String s;
Solo es creado la referencia pero hay que inicializarlo:
String s = “Curso de Java”;
Para conectar un handle o referencia a un objeto se usa la palabra llave new que es una palabra reservada de Java y significa mas o menos lo siguiente “creame un nuevo objeto de éste tipo” o, " créame una nueva instancia o ejemplar de éste tipo" Ejemplo:
String s = new String(“Curso de Java”);
El caso de objetos de la clase String es especial, porque puede crearse o instanciarse un objeto de esta clase sin el operador new, porque es una clase muy utilizada.
El efecto de crear un objeto con el operador new se traduce en la asignación de memoria para ese objeto en el heap de la RAM.
Creación de objetos (continuación)
Definición de clase
● Una clase se define mediante
―La palabra reservada class
―Seguida por el nombre de la clase que vamos definir
―el cuerpo de la clase estará rodeado de llaves ({ })