Title: Programacin I Programacin Orientadas a Objetos
1Programación IProgramación Orientadas a Objetos
- Ing. MSc. José R. Fuentes
- UNI - RUPAP
2Contenido del Curso
- Introducción a la POO
- Elementos del Lenguaje
- Sentencias de Control
- Arreglos
- Métodos
- Clases y Paquetes
- Subclases e interfaces.
- Excepciones
- Ficheros
- Estructuras dinámicas
- Programas para Internet
3Capítulo I Importancia de la POO
4Contenido.
- Introducción a la POO.
- Introducción
- Historia de la POO
- Concepto de Objeto y clase
- Abstracción
- Encapsulamiento
- Herencia
- Polimorfismo
5Introducción
- La Programación Orientada a Objetos también
conocida como POO. Más que una técnica, es una
filosofía, una nueva forma de modelar el mundo
real, es un nuevo paradigma que nos ayuda a
realizar nuestras aplicaciones con mayor - Rapidez
- Facilidad
- Productividad
- Naturalidad
- Economía.
6Introducción
- Conoces algún paradigma que exista en la
actualidad o que haya existido? - Ejemplo
- La tierra es plana.
- La luz viaja a la misma velocidad a través del
Universo. - No solo de pan vive el hombre.
- Si el hombre pudiera volar entonces tendría alas
como los pájaros
7Qué es programación orientada a objetos (POO)?
- Es un método de implementación en el que los
programas se organizan como colecciones
cooperativas de objetos, cada uno de los cuales
representa una instancia de alguna clase, y cuyas
clases son, todas ellas, miembros de una
jerarquía de clases unidas mediante relaciones de
herencia. - La POO
- Utiliza objetos no algoritmos, como sus bloques
lógicos de construcción fundamentales. - Cada objeto es una instancia de alguna clase.
- Las clases se relacionan unas con otras por medio
de relaciones de herencia. - Sí en un programa falta alguno de estos elementos
no es OO.
8Qué es programación orientada a objetos (POO)?
- Un lenguaje es OO sí y solo sí
- Soporta objetos que son abstracciones de datos
con una interfaz de operaciones con nombre y un
estado local oculto. - Los objetos tienen un tipo asociado clase.
- Los tipos clase pueden heredar atributos de los
supertipos superclases (Cardelli y Wegner). - P.e. Smalltalk, Object Pascal, C, Eiffel, CLOS,
Java... - La programación sin herencia es no OO se
denomina programación con tipos abstractos de
datos. - Lenguajes basados en objetos (Cardelli y Wegner).
P.e. Ada.
9Analisis Orientado a Objetos (AOO)
- Surge por influencia del DOO.
- Enfatiza la construcción de modelos del mundo
real, utilizano una visión del mundo orientada a
objetos. - El AOO es un método de análisis que examina los
requisitos desde la perspectiva de las clases y
objetos que se encuentran en el vocabularios del
dominio del problema.
10Qué es diseño orientado a objetos?
- Lo que sí es
- El diseño orientado a objetos es un método de
diseño que abarca el proceso de descomposición
orientada a objetos y una notación para describir
los modelos lógico y físico, así como los modelos
estático y dinámico del sistema que se diseña. - Una herramienta que permite a los ingenieros de
software crear software que se sea - Menos rígido.
- Menos frágil.
- Más resusable.
- Se utiliza el término DOO para referirse a
cualquier método que encamine a una
descomposición OO. - Es la forma de modelar los problemas planteados a
través de la orientación a objetos. Obligando así
al diseñador a ver el problema desde un punto
vista mas global.
11Cómo se relacionan el AOO, DOO y POO?
Definición de clases y objetos en el dominio
del problema
AOO
DOO
Modelos OO Físico, Lógico, Estático y
Dinámico
POO
Producto final
12Historia de la POO
- Simula (1967) fue desarrollado por Ole-Johan
Dahl y Kristen Nygaard en el Norwegian Computing
Center como un lenguaje apropiado para programar
simulaciones. - Introduce el concepto de clases para la
implementación de Tipos Abstractos de Datos
(DAT). - Smalltalk (principios de 1986) forma parte del
visionario proyecto de Alan Kay en Xerox PARC
Dynabook. - Una computadora con la que cualquiera podría
interactuar, construir sus propios modelos y
simularlos. - Smalltalk evolucinó desde el primer prototipo de
1971 hasta la primera versión comercial,
Smalltalk-80 en 1983. - Se amplía el modelo de objeto y se hace mas puro.
Utiliza run-time binding.
13Historia de la POO
- C (finales de los años 80) fue diseñado en los
laboratorios Bell de ATT, por Bjarne
Stroustrup...to provide Simulas facilities for
program organization together with Cs efficiency
and flexibility for systems programming. - Es una versión orientado a objetos del lenguaje
C. - 1979-1983 desarrollo de C con clases.
- 1982-1985 evolución hasta la primera versión
comercial de C en 1985. - 1985-1988 evolución hasta C Release 2.0.
- 1988-1998 proceso de estandarización ISO.
14Historia de la POO
- Eiffel fue diseñado por Bertran Meyer en el seno
de su recién creada empresa Interactive Software
Engineering (ISE). - La primera versión apareció a finales de 1985,
- Recoge influencias de
- Orientación a Objetos de Simula 67
- Trabajos teóricos en tipos abstractos de datos
(Liskov, Guttag). - Verificación y semántica axiomática de programas
(Hoare, Dijkstra).
15Historia de la POO
- Java (1995) fue diseñado en los laboratorios de
Sun Microsystems. - Se presentó a finales de 1995, a principios de
1997 apareció Java 1.1 y en 1999 Java 1.2. - La gran idea el código fuente se compila al
código de una máquina virtual y !! los
exploradores de Internet implementan la máquina
virtual!! - Es una mezcla de C (sintaxis) y Smalltalk
(recolector de basura). Está diseñado como un
lenguaje portable, cuyo código pueda correr en
cualquier computadora vía un browser web.
16Generaciones de los lenguajes de alto nivel en
base a su aportación
- Lenguajes de primera generación (1954-1958)
- Lenguajes de segunda generación (1959-1961)
17Generaciones de los lenguajes de alto nivel en
base a su aportación
- Lenguajes de tercera generación (1962-1970)
- El hueco generacional (1970-1980)
- Se inventaron muchos lenguajes diferentes, pero
pocos perduraron. - Para este curso interesan los lenguajes que
suelen llamarse basados en objetos y orientados a
objetos. Éstos, son los que mejor soportan la
descomposición orientada a objetos.
18Evolución hacia los lenguajes orientados a objetos
Fortran
Algol
CPL
BCPL
Simula
Pascal
B
Modula-2
Ada
C
Modula-3
Ada95
Eiffel
Smalltalk
C
Java
19Tipos de paradigmas de programación
- Estilos de programación y tipos de abstracciones
que emplean
- Cada estilo requiere una actitud mental
diferente, una forma distinta de pensar en el
problema. - Para todas las cosas orientadas a objetos, el
marco de referencia conceptual es el modelo OO.
20Paradigmas de programación
- Son formas, métodos y técnicas básicas de diseño,
desarrollo e implantación de sistemas - Procedural
- Relacional
- Lógico
- Orientado a Objetos
- Orientado a Agentes
21Paradigma procedural
- Las estructuras de datos y las funciones son
entidades separadas. - Una función puede aplicarse a muchas estructuras
diferentes - Cada estructura puede tener diferentes funciones
de acceso a ellas.
22Paradigma relacional
- Emplea estructuras de datos para representar la
información y las relaciones de los elementos
dentro del dominio de las aplicaciones, cuya
representación se basa en un conjunto de
relaciones o tablas.
23Paradigma lógico
- Todos los problemas
- Se representan mediante listas (LISP)
- Son matemáticos (APL)
- Se modelan mediante cadenas de decisión (PROLOG)
24Metodologías de programación
- Programación no estructurada
- Programación procedural
- Programación modular-estructurada
- Programación Orientada a Objetos
- Programación Orientada a Agentes
25Programación no estructurada
- Desventajas
- Complejo
- Redundancia de código
26Programación procedural
27Programación modular-estructurada
28Programación Orientada a Objetos
Programa
29Programación Orientada a Agentes
Programa
30Concepto de Modelo
- Modelo Es la representación o caracterización de
un fenómeno (físico, social, químico, económico,
abstracto, etc.). - Modelo matemático Formulación que expresa las
características fundamentales de un sistema en
términos matemáticos.
31Características de un Modelo
- El modelo nos permite
- Hacer una abstracción de la realidad.
- Simplificar la realidad de acuerdo al punto de
vista de un usuario. - Resolver el problema por partes (Modularidad,
Granularidad) - Obtener resultados previsibles.
32El Modelo de Objetos
- La tecnología orientada a objetos se apoya en
sólidos fundamentos de la ingeniería, cuyos
elementos reciben el nombre global de modelo de
objetos. - El modelo de objetos abarca los principios de
- abstracción,
- encapsulación,
- modularidad,
- jerarquía,
- tipos,
- concurrencia y
- persistencia
- Ninguno de estos elementos es nuevo. Lo nuevo es
como se conjugan en el modelo OO.
33Concepto de Objeto y e Clase
- Las clases Son tipos de declaraciones
abstractas. - Son tipos especiales de datos definidos por el
usuario. - Este tipo de datos puede tener datos y funciones
o estructuras anidadas. - Las clases nos sirven para definir los objetos.
- Los objetos Son instancias de las clases.
- Son variables del tipo de la clase definida.
34Objeto y clase
- Los objetos tienen estados que indica sus
transiciones y tienen operaciones para expresar
un comportamiento deseado. - Un objeto es una caja negra la cual contiene
código (secuencia de instrucciones) y datos
(información sobre la cual actúan las
instrucciones). - El código y los datos son entidades separadas
- Un programa es un conjunto de objetos que se
comunica mediante mensajes.
35Objeto y clase
- Sumar dos números, digamos 1 y 2
- a1 b2 cab
- Solución procedural
- Tome a, cuyo valor es 1, y b, cuyo valor es 2,
y realice la suma. Tome el resultado, 3, y
colóquelo en la variable llamada c. - SoluciónPOO
- Tome el objeto a, que tiene un valor de 1, y
envíele un mensaje el cual tiene un argumento
b con un valor de 2. El objeto a, recibe el
mensaje y lleva a cabo la acción solicitada que
consiste en sumar el valor del argumento a él
mismo. Crea un nuevo objeto, dele a éste el
resultado, 3, y asigne este objeto a c.
36Objeto y clase
37Objeto y clase
- Las solicitudes que pueden hacersele a un
objeto están definidas por su interface. El tipo
del objeto determina la interface de éste.
38Abstracción
- Abstracción es...
- la amplificación de lo esencial
- y la eliminación de lo irrelevante.
- Queremos tratar con abstracciones
- lo esencial, son las partes de un problema que no
tienden a cambiar. - Los detalles de implementación cambian todo el
tiempo. - Una abstracción denota características
esenciales de un objeto que lo distinguen de
todos los demás tipos de objeto y proporciona así
fronteras conceptuales nítidamente definidas a la
perspectiva del observador.
39La abstracción depende del punto de vista del
observador y del contexto
Abstracción para ensamble automatizado
Abstracción para una simulación de tráfico
Abstracción de un avión
- Tiempo de llegada
- Tiempo de vuelo
- Nivel de combustible
- Pista de aterrizaje
40Ejemplo Utilizando el concepto de OO Modelar un
desarmador.
- Clase Desarmador
- Tipo de acceso (público, privado, protegido)
- Características (Datos).
- Mango (plastico, metal, baquelita).
- Varilla (plastico, metal, baquelita).
- Tamaño (chico lt15cm, grande gt30cm).
- Tipo de punta (cruz, plano, poligono)
- Torque que soporta (x newtons/cm)
-
41Ejemplo Utilizando el concepto de OO Modelar un
desarmador.
- Clase Desarmador
- Tipo de acceso (público, privado, protegido)
- Características (Datos).
- Funciónes, Cualidades, Propiedades (Métodos).
- Selección del desarmador (Mango,Tipo,tamaño)
- Desatornillar (Sujetar del mango, poner en el
tornillo sobre ranura del tornillo, aplicar x
torque en sentido y) - Atornillar (Sujetar del mango, poner en el
tornillo sobre ranura del tornillo,aplicar x
torque en sentido -y) - Objeto
- Desarmador Desarmador_CH, Desarmador_Chino.
42Ejercicio Utilizando el concepto de OO Modelar
los siguientes objetos
- Desarmador.
- CD.
- Licuadora.
- TV
- Aparato electrodoméstico.
- A. Figuras geométricas
- B. Matriz
- C. Aceleración de objetos.
- D. Mujer atractiva.
- E. Persona alegre.
- F. Alma.
43Ejemplo de abstracciónNúmeros Racionales (1)
- class CRacional
- int Numerador
- int Denominador
- void AsignarDatos (int num, int den)
- Numerador num
- if (den 0 ) den 1 // denominador
no puede ser 0 - Denominador den
-
- void VisualizarRacional()
- System.out.println (Numerador /
Denominador) - public static void main (String args )
- // Punto de entrada a la aplicación
- CRacional r1 new CRacional () // Crear
un objeto Cracional - r1.AsignarDatos(2,5)
- r2.VisualizarRacional( )
- // fin del método principal
- fin de la clase
441.6 Encapsulamiento
- Encapsular es agrupar en una misma entidad las
estructuras de datos y las funciones, ocultando
la implementación bajo una interface. - Implementación es la manera cómo se llevan a cabo
las operaciones, es decir que tipo de datos se
utilizan, cuanta memoria utilizan, etc. - Si todos los datos miembro de una clase
estuvieran disponibles para cualquiera, entonces
el cliente podrá hacer lo que quiera con la clase
y no habría manera de forzar un comportamiento en
especial. De ahí, la necesidad de mantener
claramente separada y protegida la interface y la
implementación.
45 Encapsulamiento
- El encapsulamiento (encapsulación) es el proceso
de almacenar es un mismo compartimento los
elementos de una abstracción que constituyen su
estructura y su comportamiento sirve para
separar el interfaz contractual de una
abstracción y su implantación.
- El encapsulamiento oculta los detalles de
implementación de un objeto.
46EncapsulamientoEjemplo
- Al cliente de la clase Point, le es irrelevante
como se almacenan las componentes (x,y) del
punto. Lo único que le interesa es como crear un
punto y que puede hacer con él.
47Modularidad
- La modularidad es la propiedad que tiene un
sistema que ha sido descompuesto en un conjunto
de módulos cohesivos y débilmente acomplados.
- La modularidad empaqueta las abstracciones en
unidades lógicas.
48Composición reuso de la implementación
- El reuso de código es una de las más grandes
ventajas que proporcionan los lengujes orientados
a objetos. - La forma más simple de reusar una clase, es usar
un objeto de esa clase. Pero podemos, además,
colocar un objeto de esa clase, dentro de otra
clase. A esto se le llama creación de un objeto
miembro. Este concepto es llamado composición. - La composición, generalmente es referenciada como
una relación has-a (tiene un), por ejemplo, un
carro tiene un motor.
49Asociación y agregación reuso de la
implementación
- La composición se puede dar de dos maneras
- Asociación
- Las partes que forman al objeto están visibles al
exterior - Ofrecen flexibilidad porque la relación con sus
componentes visibles se pueden redefinir en
tiempo de ejecución. - Agregación
- Todo el objeto en su conjunto es visible hacia el
exterior - Ofrecen seguridad porque no se pueden alterar en
tiempo de ejecución.
50Asociación y agregación reuso de la
implementación
51Herencia
- Definición (Herencia). Herencia es el mecanismo
que permite que un clase A herede propiedades de
una clase B. Decimos "A hereda de B". Objetos de
la clase A tienen así acceso a los atributos y
métodos de la clase B sin necesidad de
redefinirlos. - Definición (Superclase/Subclase) Si la clase A
hereda de la clase B, entonces B es la superclase
de A. A es subclase de B.
A
52Jerarquía
- Definición
- La jerarquís es una clasificación u ordenación
de abstracciones. - Jerarquías de un sistema complejo
- Estructura de clases (jerarquía de clases).
- Estructura de objetos (jerarquía de partes).
- Herencia
- Es la jerarquía de clases más importante.
- Define una relación entre clases, en la que una
clase comparte la estructura de comportamiento
definida en una o más clases (lo que se denomina
herencia simple o herencia múltiple).
53Ventajas de la herencia
- Utilizar el software generado.
- Las aplicaciones se hacen más rápido.
- El costo se reduce.
54Ejemplos de jerarquía herencia simple
- La herencia
- Representa una jerarquía de abstracciones, en la
que una subclase hereda de una o más superclases. - denota una relación es un.P.e. Un oso es un
tipo de mamífero, una case es un tipo de bien
inmueble, etc. - Implíca una jerarquía de generalización\especializ
ación. - La subclase especializa el comportamiento o
estructura, más general de sus superclases.
551.8 Polimorfismo
- poly muchos, varios
- morph forma o apariencia.
- En la programación orientada a objetos, morph
forma se refiere a la interface o a las
propiedades de los objetos mientras que poly
que la interface o los atributos de los objetos
son diferentes. - Las interfaces son fundamentales en los sistemas
orientados a objetos ya que es la manera de
conocerlos. - Se dice que dos o mas objetos son polimórficos si
tienen interfaces idénticas pero comportamiento
diferente desde el punto de vista del cliente
esos objetos son indistinguibles. - El polimorfismo se logra cuando una clase hereda
la interfaz de otra clase ya sea total o parcial
o bien, con tipo o sin tipo.
56Polimorfismo
- Cuando se le envía una solicitud a un objeto, la
operación que se ejecuta depende tanto del
mensaje como del objeto que lo recibe. Los
objetos que atienden mensajes idénticos pueden
tener implementaciones diferentes.
57Beneficios del modelo de objetos
- Ayuda a explotar la potencia expresiva de los
lenguajes de programación basados en objetos y
orientados a objetos. - Uso de jerarquías de clases en el proceso de
diseño. - Promueve la reutilización no sólo del software,
sino de diseños enteros, conduciendo a la
creación de marcos de desarrollo de aplicaciones
reutilizables. - Patrones de diseño, frameworks, etc.
- Produce sistemas que se constuyen sobre formas
intermedias estables, que son más flexibles al
cambio. - Se aplica en una gran diversidad de áreas Bases
de datos, aeronáutica, análisis matemático,
animación, robótica, composición de música, etc.
58Para futuras discusiones...
- Cosas que pensar...
- Qué es lo que hace que un diseño de software sea
bueno? - Usando OO automáticamente se asegura obtener un
buen diseño? - Cómo usamos los elementos del modelo orientado a
objetos (abstracción, encapsulación, etc.) de
manera conjunta, para obtener un buen diseño? - Cuáles son los principios que usaremos para
guiarnos durante el diseño?