Programacion Orientada A Objetos
Programacion Orientada A Objetos
@danielfm
Abstracción(1)
Consiste en tener en cuenta sólo los aspectos más importantes desde un
punto de vista determinado y no tener en cuenta los restantes aspectos
Supresión intencionada (u ocultación) de algunos detalles de un proceso
o artefacto, con el fin de destacar más claramente otros aspectos,
detalles o estructuras.
Acción y efecto de abstraer: Formar mediante una operación intelectual
una idea mental o noción de un objeto extrayendo de los objetos reales
particulares los rasgos esenciales, comunes a todos ellos.
@danielfm
Abstracción(2)
Las características especificas de un objeto, aquellas que lo distinguen
de los demás tipos de objetos y que logran definir límites conceptuales
respecto a quien está haciendo dicha abstracción del objeto.
Una abstracción se enfoca en la visión externa de un objeto, separa el
comportamiento específico de un objeto, a esta división que realiza se
le conoce como la barrera de abstracción, la cuál se consigue aplicando
el principio de mínimo compromiso.
En el proceso, en cada nivel de detalle, cierta información se muestra y
cierta información se omite.
Mediante la abstracción creamos Modelos de la realidad.
@danielfm
Abstracción(3)
Hay una alta gama de abstracciones que existen desde los objetos que
modelan muy cerca de entidades, a objetos que no tienen razón para existir. Ej:
Abstracción de Entidades: Es un objeto que representa un modelo útil de una
entidad que se desea.
Abstracción de Acciones: Un objeto que representa un conjunto de
operaciones y todas ellas desempeñan funciones del mismo tipo.
Abstracción de Máquinas virtuales: Un objeto que agrupa operaciones, todas
ellas virtuales, utilizadas por algún nivel superior de control u operaciones
(entre ellos podríamos hablar de un circuito).
Abstracción de coincidencia: Un objeto que almacena un conjunto de
operaciones que no tienen relación entre sí.
@danielfm
Abstracción(4)
Toda abstracción tiene propiedades estáticas y dinámicas.
Propiedades estáticas podemos mencionar, el nombre, el tamaño, en
algunas ocasiones su contenido.
Propiedades dinámicas podemos mencionar peso, tamaño, contenido.
Dependiendo el contexto que se esta analizando el contenido u otras
propiedades pueden ser dinámicas como estáticas.
@danielfm
Ejemplo de Abstracción de un vehículo en cuanto a
su comportamiento
¿Cuales son los comportamientos que tienen todos los vehículos?
En base a esta pregunta, automáticamente fluye nuestra abstracción del
comportamiento de un vehículo.
1. Encender Vehículo
2. Apagar Vehículo
3. Acelerar Vehículo
4. Frenar Vehículo
5. Retroceder Vehículo
6. Parabrisas Vehículo
@danielfm
Niveles de abstracción ofertados por un lenguaje
@danielfm
Los lenguajes de programación proporcionan
abstracciones
@danielfm
Paradigma
Forma de entender y representar la realidad.
Conjunto de teorías, estándares y métodos que, juntos, representan un
modo de organizar el pensamiento.
@danielfm
Principales Paradigmas de la Programación
Paradigma Funcional: El lenguaje describe procesos
Lisp y sus dialectos (p. ej. Scheme), Haskell, ML
Paradigma Lógico
Prolog
@danielfm
Mecanismos de abstracción en los lenguajes de
programación (1)
OCULTACIÓN De Información: Omisión intencionada de detalles de
implementación tras una interfaz simple.
Cuando además existe una división estricta entre la vista interna de un
componente (objeto) y su vista externa hablamos de ENCAPSULACIÓN. Estas
dos vistas son:
INTERFAZ: Qué sabe hacer el objeto. Vista externa
IMPLEMENTACIÓN: Cómo lo hace. Vista interna
Favorece la intercambiabilidad.
Favorece la comunicación entre miembros del equipo de desarrollo y la
interconexión de los artefactos resultantes del trabajo de cada miembro.
@danielfm
Mecanismos de abstracción en los lenguajes de
programación (2)
@danielfm
El paradigma orientado a objetos
Metodología de desarrollo de aplicaciones en la cual éstas se organizan
como colecciones cooperativas de objetos, cada uno de los cuales
representan una instancia de alguna clase, y cuyas clases son miembros
de jerarquías de clases unidas mediante relaciones de herencia. (Grady
Booch)
@danielfm
El paradigma orientado a objetos
POO se ha convertido durante las pasadas dos décadas en el paradigma
de programación dominante, y en una herramienta para resolver la
llamada crisis del software.
Motivos de la popularidad de la POO:
POO escala muy bien.
POO proporciona un modelo de abstracción que razona con técnicas
que la gente usa para resolver problemas (metáforas)
“Es más fácil enseñar Smalltalk a niños que a programadores” (Kay 77)
@danielfm
El paradigma orientado a objetos. Otra forma de ver
el mundo. (1)
Ejemplo:
Supongamos que Luis quiere enviar flores a Alba, que vive en otra ciudad.
Luis va a la floristería más cercana, regentada por un florista llamado
Pedro.
Luis le dice a Pedro qué tipo de flores enviar a Alba y la dirección de
recepción.
@danielfm
El paradigma orientado a objetos. Otra forma de ver
el mundo. (2)
El mecanismo utilizado para resolver el problema es
Encontrar un agente apropiado (Pedro)
Enviarle un mensaje conteniendo la petición (envía flores a Alba).
Es la responsabilidad de Pedro satisfacer esa petición.
Para ello, es posible que Pedro disponga de algún método (algoritmo o
conjunto de operaciones) para realizar la tarea.
Luis no necesita (ni le interesa) conocer el método particular que Pedro
utilizará para satisfacer la petición: esa información está OCULTA.
@danielfm
El paradigma orientado a objetos. Otra forma de ver
el mundo. (3)
@danielfm
El paradigma orientado a objetos. Otra forma de ver
el mundo. (4)
Un mundo estructurado en:
Agentes y comunidades
Mensajes y métodos
Responsabilidades
Objetos y clases
Jerarquías de clases
Enlace de métodos
@danielfm
Agentes y comunidades
Un programa OO se estructura como una comunidad de agentes que
interaccionan (OBJETOS). Cada objeto juega un rol en la solución del
problema. Cada objeto proporciona un servicio o realiza una acción que
es posteriormente utilizada por otros miembros de la comunidad.
@danielfm
Mensajes y métodos (1)
A un objeto se le envían mensajes para que realice una determinada
acción.
El objeto selecciona un método apropiado para realizar dicha acción.
A este proceso se le denomina Paso de mensajes
Sintáxis de un mensaje:
receptor.selector(argumentos)
unJuego.mostrarCarta(laCarta,42,47)
@danielfm
Responsabilidades
@danielfm
Objetos y clases
Un objeto es una encapsulación de un estado (valores de los datos) y
comportamiento (operaciones).
@danielfm
Jerarquías de clases
En la vida real, mucho conocimiento se organiza en términos de jerarquías.
Este principio por el cual el conocimiento de una categoría más general es
aplicable a una categoría más específica se denomina generalización, y su
implementación en POO se llama herencia.
Pedro, por ser florista, es un empleado (sabe vender y cobrar)
Los empleados normalmente son humanos (pueden hablar)
Los humanos son mamíferos (Pedro respira oxígeno…)
Las clases de objetos pueden ser organizadas en una estructura jerárquica de
herencia. Una clase ‘hijo’ hereda propiedades de una clase ‘padre’ más alta en
la jerarquía (más general):
@danielfm
Enlace de métodos
Instante en el cual una llamada a un método es asociada al código que se debe
ejecutar
Enlace estático: en tiempo de compilación
Enlace dinámico: en tiempo de ejecución
Supongamos que en este ejemplo
JuegoDeCartas juego = new Poker … ó … new Mus … ó …
juego.repartirCartas(numeroDeJugadores)
La asignación a la variable ‘juego’ depende de la interacción con el usuario
(tiempo de ejecución). El mensaje ‘repartirCartas’ deberá tener enlace
dinámico.
@danielfm
Características Básicas de un LOO
Según Alan Kay (1993), son seis:
1. Todo es un objeto.
2. Cada objeto es construido a partir de otros objetos.
3. Todo objeto es instancia de una clase.
4. Todos los objetos de la misma clase pueden recibir los mismos mensajes (realizar las
mismas acciones). La clase es el lugar donde se define el comportamiento de los
objetos y su estructura interna.
5. Las clases se organizan en una estructura arbórea de raíz única, llamada jerarquía de
herencia.
Ej: puesto que un círculo es una forma, un círculo siempre aceptará todos los mensajes destinados a
una forma.
@danielfm
Características Opcionales de un LOO (1)
Polimorfismo. Capacidad de una entidad de referenciar elementos de distinto
tipo en distintos instantes. Enlace dinámico.
Genericidad. Definición de clases parametrizadas (templates en C++) que
definen tipos genéricos.
Lista<T> : donde T puede ser cualquier tipo.
Gestión de Errores. Tratamiento de condiciones de error mediante
excepciones.
Aserciones. Expresiones que especifican qué hace el software en lugar de
cómo lo hace.
Precondiciones: propiedades que deben ser satisfechas cada vez que se invoca un
servicio.
Postcondiciones: propiedades que deben ser satisfechas al finalizar la ejecución de un
determinado servicio.
Invariantes: aserciones que expresan restricciones para la consistencia global de sus
instancias.
@danielfm
Características Opcionales de un LOO (2)
Tipado estático. Es la imposición de un tipo a un objeto en tiempo de
compilación.
Se asegura en tiempo de compilación que un objeto entiende los
mensajes que se le envían.
Evita errores en tiempo de ejecución
Recogida de basura (garbage collection). Permite liberar
automáticamente la memoria de aquellos objetos que ya no se utilizan.
Concurrencia. Permite que diferentes objetos actúen al mismo tiempo,
usando diferentes threads o hilos de control.
@danielfm
Características Opcionales de un LOO (3)
Persistencia. Es la propiedad por la cual la existencia de un objeto
trasciende la ejecución del programa.
Normalmente implica el uso de algún tipo de base de datos para almacenar objetos.
@danielfm
Propiedades fundamentales de la Orientación a
Objetos
Abstracción. Consiste en tener en cuenta sólo los aspectos más importantes
desde un punto de vista determinado y no tener en cuenta los restantes
aspectos
Encapsulado de datos. Proceso de agrupar datos y operaciones relacionadas
bajo la misma unidad de programación.
Ocultación de datos. Permite separar el aspecto de un componente, definido
por su interfaz con el exterior, de sus detalles internos de implementación.
Herencia. Permite definir nuevas clases a partir de otras clases ya existentes,
de modo que presentan las mismas características y comportamiento de éstas,
así como otras adicionales.
Polimorfismo. Aquella operación tiene el mismo nombre, pero se ejecuta de
diferentes formas en cada clase.
@danielfm
JAVA, Características:
Sencillo. Elimina la complejidad de otros leguajes.
Orientado a objetos. La filosofía de programación orientada a objetos facilita la
creación y mantenimiento de programas.
Independiente de la arquitectura y portable. Al compilar un programa en Java, el
código resultante es un tipo de código binario conocido como Java Bytecode. Este
código es interpretado por diferentes computadoras de igual manera. Como el código
compilado de Java es interpretado, un programa compilado de Java puede ser
utilizado por cualquier computadora que tenga implementado el intérprete de Java.
Robusto. Java simplifica la gestión de la memoria.
Multitarea. Java puede ejecutar diferentes líneas de código al mismo tiempo.
Dinámico. En java no es necesario cargar completamente el programa en memoria,
sino que las clases compiladas pueden ser cargadas bajo demanda en tiempo de
ejecución.
@danielfm
Mecanismo de creación de un programa de Java
Java es a la vez compilado e interpretado.
@danielfm
Variable
Es un espacio de la memoria que almacena un contenido.
Es un espacio de memoria reservado para almacenar un valor.
Está formada por un espacio en el sistema de almacenaje y un nombre
simbólico que está asociado a dicho espacio.
El valor almacenado corresponde a un tipo de dato.
El valor puede ser numérico, de tipo carácter o cadena de caracteres.
Son una de las características fundamentales de los lenguajes de
programación, permiten acceder a la memoria para almacenar y
recuperar los datos con los que nuestros programas van a trabajar.
@danielfm
Tipos de datos en Java
Es un atributo de los datos que indica a la computadora (y/o al
programador) sobre la clase de datos que se va a trabajar.
Algunos tipos de datos usados:
Tipo de dato lógico.
Tipo de dato entero.
Tipo de dato de coma flotante (real, con decimales).
Tipo de dato carácter.
Tipo de dato cadena.
@danielfm
Tipos de datos en Java
@danielfm
Asignación de variables
NOTA: Java es un lenguaje tipado y nos obliga a declarar nuestras variables antes de poder hacer
uso de ellas, con esta declaración le indicamos al compilador el espacio en memoria que debe de
reservar para almacenar la información.
@danielfm
Declaración o definición de variables
Java es un lenguaje tipado y nos obliga a declarar nuestras variables antes
de poder hacer uso de ellas, con esta declaración le indicamos al
compilador el espacio en memoria que debe de reservar para almacenar la
información.
Por ejemplo:
String cliente;
Podemos asignarle algún valor en el momento de declarar una variable.
Por ejemplo:
String cliente = "Isaac Newton";
@danielfm
Declaración o definición de variables
También podemos declararla y en otro lugar del programa fijarle un valor :
String cliente; // declaración
... // El programa sigue
cliente = "Isaac Newton"; // le damos un valor
@danielfm
Ámbito de variable
El ámbito de una variable, éste puede ser:
Local: Cuando la misma sólo es accesible desde un único procedimiento
hijo, no pudiendo ser leída o modificada desde otro procedimiento
hermano o desde el propio procedimiento padre.
Global: Cuando la misma es accesible tanto desde rutinas de la
aplicación, como en todos los procedimientos y funciones de la misma.
@danielfm
Ámbito de variable
public class A {
public Integer numeroEntero = new Integer(); /* Variable Global a todos los Métodos */
public Integer metodo() {
int num = 1; // Variable Local a metodo.
for (int i = 0;i<numeroEntero.intValue();i++) { // i es local al bucle for.
num *= i;
}
// i = 2; Esta línea provocaría error al no haber declarado la variable i.
return Integer.valueOf(num);
}
public void otroMetodo() {
int num = 1; // Variable local num, aquí es una variable distinta a la variable num de método
System.out.println("Variable local num: " + num);
}
}
@danielfm
Tipos de datos primitivos
@danielfm
Conversión de tipos de datos en Java
Es posible transformar el tipo de una variable u objeto en otro diferente al
original con el que fue declarado. Este proceso debe manejar con cuidado pues
un mal uso de la conversión de tipos es frecuente que dé lugar a errores.
Una forma de realizar conversiones consiste en colocar el tipo destino entre
paréntesis, a la izquierda del valor que queremos convertir de la forma
siguiente:
Tipo VariableNueva = (NuevoTipo) VariableAntigua;
Por ejemplo:
int miNumero = (int) ObjetoInteger;
char c = (char) System.in.read();
@danielfm
Conversión de tipos de datos en Java
El tamaño de los tipos que queremos convertir es muy importante.
No todos los tipos se convertirán de forma segura. Por ejemplo, al
convertir un long en un int, el compilador corta los 32 bits superiores del
long (de 64 bits), de forma que encajen en los 32 bits del int, con lo que
si contienen información útil, ésta se perderá.
Este tipo de conversiones que suponen pérdida de información se
denominan “conversiones no seguras” y en general se tratan de evitar,
aunque de forma controlada pueden usarse puntualmente.
@danielfm
Conversión de tipos de datos en Java
@danielfm
Conversión de tipos de datos en Java
El método valueOf es un método sobrecargado aplicable a numerosas clases de Java y
que permite realizar conversiones de tipos. Veamos algunos ejemplos de uso.
@danielfm
La clase principal y el método main (1)
Un programa puede construirse empleando varias clases. En el caso
más simple se utilizará una única clase. Esta clase contiene el programa,
rutina o método principal: main() y en éste se incluyen las sentencias del
programa principal. Estas sentencias se separan entre sí por caracteres
de punto y coma.
@danielfm
La clase principal y el método main (2)
Ejemplo, programa: Hola.java
@danielfm
Comentarios
Se emplean para facilitar la tarea de documentación de los
programadores. Se pueden introducir en el código fuente de un
programa de Java. El compilador ignora todo lo que se incluya entre la
secuencia de caracteres // y el final de la línea. Por ejemplo:
// Este es un comentario estilo C++, llega al final de la línea
El segundo tipo de comentario es el que se utiliza para bloques
´(comentar más de una línea). El compilador también ignora todo lo
que se incluya entre las secuencias de caracteres /* y */. Por ejemplo:
/* En este otro comentario estilo C, el final lo indica la marca */
@danielfm
Identificadores
Son nombres que se les asignan a variables, métodos, clases, etc. en el
código fuente de un programa.
Todo nuevo identificador que se emplee en un programa Java debe
definirse previamente a su utilización.
Existe una serie de palabras reservadas que no pueden emplearse como
identificadores por el programador en el código fuente para otros usos.
Por ejemplo, la palabra double se utiliza para definir un tipo de dato real y la palabra
for se emplea para construir un tipo determinado de bucle.
@danielfm
NetBeans
Es un Entorno de Desarrollo Integrado (IDE) en el que se puede
compilar y ejecutar el lenguaje de alto nivel y convertirlo a lenguaje
máquina.
Es preciso aprender la sintaxis que se utiliza en programación Java.
@danielfm
A PROGRAMAR…
@danielfm
Fuentes de información
https://styde.net/abstraccion-programacion-orientada-a-objetos/
http://www.monografias.com/trabajos14/paradigma/paradigma.shtml
http://javaenejemplos.blogspot.pe/2010/06/paradigma-de-la-
programacion-orientada_07.html
http://luis.izqui.org/resources/ProgOrientadaObjetos.pdf
@danielfm