0% encontró este documento útil (0 votos)
111 vistas55 páginas

Programacion Orientada A Objetos

Este documento presenta conceptos clave del paradigma de programación orientada a objetos (POO). Explica que la abstracción consiste en enfocarse en los aspectos más importantes de un objeto y ocultar detalles irrelevantes. Los paradigmas son formas de entender la realidad, y POO se basa en agentes, mensajes, responsabilidades, objetos y clases. Finalmente, describe conceptos como encapsulación, herencia y jerarquías de clases.

Cargado por

JUAN JOSE
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
111 vistas55 páginas

Programacion Orientada A Objetos

Este documento presenta conceptos clave del paradigma de programación orientada a objetos (POO). Explica que la abstracción consiste en enfocarse en los aspectos más importantes de un objeto y ocultar detalles irrelevantes. Los paradigmas son formas de entender la realidad, y POO se basa en agentes, mensajes, responsabilidades, objetos y clases. Finalmente, describe conceptos como encapsulación, herencia y jerarquías de clases.

Cargado por

JUAN JOSE
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 55

Metodologías de Programación

Ing. Daniel Maza Medina | @danielfm


02. Paradigma de la POO
¿una filosofía?
Analicemos
 ¿Qué es abstracción?
 ¿Paradigma?
 ¿POO?

@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

 Paradigma Imperativo (o procedural)


 C, Pascal

 Paradigma Orientado a Objetos


 Java, C++, Smalltalk, …

@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)

 No basta con utilizar un lenguaje OO para programar orientado a


objetos. Para eso hay que seguir un paradigma de programación OO.
(Cristina Cachero)

@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)

 Gran desarrollo de herramientas OO (IDEs, librerías,…) en todos los


dominios.

@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)

 Así, la solución del problema requiere de la cooperación de varios


individuos para su solución.
 La definición de problemas en términos de responsabilidades
incrementa el nivel de abstracción y permite una mayor independencia
entre objetos.

@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

 El comportamiento de cada objeto se describe en términos de


responsabilidades
 Mayor independencia entre los objetos
 Protocolo: Conjunto de responsabilidades de un objeto

@danielfm
Objetos y clases
 Un objeto es una encapsulación de un estado (valores de los datos) y
comportamiento (operaciones).

 Los objetos se agrupan en categorías (clases).


 Un objeto es una instancia de una clase.
 El método invocado por un objeto en respuesta a un mensaje viene
determinado por la clase del objeto receptor.

@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.

6. Un programa es un conjunto de objetos que se comunican mediante el paso de


mensajes.

@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.

 Reflexión. Capacidad de un programa de manipular su propio estado,


estructura y comportamiento.

@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

//Almacenamos un dato en memoria referenciado por


el nombre edad
edad = 5;

//Recuperamos el dato almacenado y lo modificamos


edad = edad + 1;

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

 La sentencia (sintaxis) para declarar una variable se resume como:


Tipo_Dato Nombre_Variable [= 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.

 NOTA: No todas las conversiones son posibles por lo general por


incoherencia de datos.
@danielfm
Conversión de tipos de datos en Java

 no: indica que no hay posibilidad de conversión.


 si: indica que el casting es implícito.
 si*: indica que el casting es implícito pero se puede producir pérdida de precisión.
 cast: indica que hay que hacer casting explícito.
@danielfm
Estructura de un programa en Java
 La clase principal y el método main.
 Comentarios.
 Identificadores

@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

También podría gustarte