Professional Documents
Culture Documents
Alicia A
Introducción a la Orientación
a Objetos
1. Paradigmas de Programación
2. Paradigma Orientado a Objetos
Clases y Objetos
UML – Diagrama de Clases
Principios de la Orientación a Objetos: Ocultamiento,
Abstracción, Relaciones, Herencia, Encapsulamiento
Interfaces, Polimorfismo
Paradigmas de
Programación
¿Cuales son los paradigmas
de programación ?
Paradigmas de Programación
¿Origen, principales
características, ejemplos?
Paradigmas y Lenguajes
A lo largo de la historia se han ido desarrollando distintos lenguajes de
programación basados en distintos paradigmas o formas de estructurar y
pensar el desarrollo de software.
Lenguajes Imperativos: son aquellos basados en sentencias, ya sean
procedurales, orientados a objetos puros, o mixtos
Pascal, C, C++, Java, Fortran, Perl
Lenguajes Funcionales: basados en funciones matemáticas
Haskell, Lisp, Scheme
Lenguajes Lógicos: MathLab
Lenguajes Procedurales: son lenguajes imperativos basados en
procedimientos y funciones
C, Fortran , Pascal, y Basic
Introducción a la Orientación
a Objetos
1. Paradigmas de Programación
2. Paradigma Orientado a Objetos
Historia
Ventajas
Desventajas
POO-Reseña Histórica
➢ La programación orientada a objetos nació en los años
60 en Noruega, con el lenguaje conocido como Simula
✓ Manejaba clases, herencia, y encapsulamiento
➢ A principios de la década de 1980 comenzó a surgir el
llamado paradigma de “Orientación a Objetos”, que
proponía una forma novedosa de comprender y modelar
el mundo que nos rodea.
✓ En la década de los 80: Smalltalk, C++
✓ A mediados de los 90: Java
✓ En el 2002 apareció .Net
✓ Actualmente los mas usados: Java, Python, Rugby,
C#, F#
Ventajas
➢ La POO beneficia a los desarrolladores debido a que:
✓ Los programas son más fáciles de diseñar, ya que los
objetos reflejan elementos del mundo real
✓ Los objetos son unidades autocontenidas
✓ La productividad se incrementa debido a que puede
reutilizar el código
✓ Es más fácil crear nuevos tipos de objetos a partir de
los ya existentes
✓ Simplifica los datos complejos
✓ Reduce la complejidad de la transacción
✓ Confiabilidad
✓ Robustez
Desventajas
➢ Surgen dificultades en la implementación de los Sistemas OO:
✓ Curvas de aprendizaje largas
o Al hacer la transición a un sistema orientado a objetos
la mayoría de los programadores deben capacitarse
✓ Dependencia del lenguaje
o Ejemplo: C++ soporta el concepto de herencia multiple
mientras que SmallTalk no lo soporta
✓ Determinación de las Clases
o Suelen decir que la definición de las clases es más un
arte que una ciencia
✓ Rendimiento, en un sistema donde todo es un objeto y toda
interacción es a través de mensajes, el tráfico de mensajes
afecta el rendimiento
¿Por qué Orientación a
Objetos (OO)?
Se parece más al mundo real
Permite representar modelos
complejos
Muy apropiada para aplicaciones de
negocios
Las empresas ahora sí aceptan la OO
Las nuevas plataformas de
desarrollo la han adoptado (Java /
.NET)
Conceptos Básicos
1. Objetos
2. Clases
3. Principios de la Orientación a Objetos
➢Abstracción
➢Encapsulamiento
➢Herencia
➢Polimorfismo
1. Objetos
Todo el mundo está compuesto de entidades que se
relacionan e interactúan entre si
Objeto = estado + comportamiento
“Un objeto tiene estado, comportamiento, e identidad; la estructura y el
comportamiento de objetos similares son definidos a través de sus clases
comunes” (Booch Object Solutions page 305)
Los Objetos:
Tienen identidad
Son una instancia de una única clase
Tiene valores en sus atributos que son únicos para ese objeto
Tiene métodos que son comunes a la clase
1. Objetos
La clave es entender qué es un objeto:
Un Objeto del mundo real es cualquier cosa que vemos a nuestro alrededor
Ejemplo: un computador, un teléfono, un árbol, un automóvil
o Internamente compuestos por componentes, cuyo trabajo en
conjunto hacen operativo al objeto
o Cada componente es una unidad autónoma, cuya estructura
puede ser compleja
o Lo que necesitamos saber es cómo interactúan entre sí
Todo objeto del mundo real tiene dos componentes: características y
comportamiento
Ejemplo: los automóviles tienen
o Características: marca, modelo, color, velocidad máxima,
etc.
o Comportamiento: acelerar, frenar, retroceder, embragar,
etc.
1. Objetos
Objetos
:Empleado
- nombre : String = "Peter"
- apellido : String = "Parker"
- salario : int = 2500
+ aumentarSalario (int monto) : int
+ diseñarSoftware () : int
Stack
m
a usuario
i
n departamento
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
Un objeto posee Comportamiento
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 posee Identidad
Encapsulamiento
Herencia
Polimorfismo
2 Clases
Una clase es “Un conjunto de objetos que
comparten una estructura y un
comportamiento común” (Booch Object
Solutions page 303)
Clases Objetos
Empleado : 1
- nombre : String
- apellido : String
- salario : int :Empleado
+ getNombre () : String - nombre : String = "Peter"
+ getApellido () : String - apellido : String = "Parker"
+ setNombre (String pNombre) : void - salario : int = 2500
+ aumentarSalario (int pValor) : void
+ analizarReq () : void
+ diseñarSoftware () : void
+ implementarCodigo () : void
Stack
m
a usuario
i
n departamento
2 Clases
En el mundo real tenemos muchos objetos del mismo tipo
Ejemplo: automóviles, teléfonos celulares, etc.
o El objeto celular A es una instancia de una clase conocida como
“celular”
o Los celulares tienen características
• Marca
• Modelo
• Sistema operativo
• Pantalla
• Teclado
o Los celulares tienen comportamiento
• Hacer y recibir llamadas
• Enviar mensajes
• Transmisión de datos
2 Clases
Los fabricantes aprovechan el hecho de que los
celulares comparten características comunes y
construyen modelos o plantillas comunes
A partir de estas plantillas se pueden crear muchos
equipos celulares del mismo modelo
A este modelo o plantilla se la conoce como CLASE
A los equipos que salen a partir de ella se llaman
OBJETOS
Encapsulamiento
Herencia
Polimorfismo
3. Principios de la
Orientación a Objetos
Abstracción Encapsulamiento
Herencia Polimorfismo
3.1 Abstracción
La abstracción es “algo que resume o
concentra lo esencial de una cosa extensa”
(Webster New Collegiate Dictionary)
Consiste en captar las características y
comportamiento esenciales de un objeto, sin
preocuparse de las restantes características
(no esenciales)
El concepto de abstracción permite crear una
interface simplificada de algún servicio que
oculta los detalles de la implementación al
cliente de ese servicio
3.1 Abstracción
Ignorancia Selectiva
La abstracción nos ayuda a trabajar
con cosas complejas
Se enfoca en lo importante
Ignora lo que no es importante
(simplifica)
Una clase es una abstracción en la que:
Se enfatizan las características
relevantes
Se suprimen otras características
Una clase debe capturar una y solo una
abstracción clave
3.1 Abstracción
EmpIeado Empleado
- nombre : String - nombre : String
- apellido : String - apellido : String
- salario : int - salario : int
+ aumentarSalario (int pValor) : void + getNombre () : String
+ diseñarSoftware () : void + getApellido () : String
+ implementarCodigo () : void + setNombre (String pNombre) : void
+ aumentarSalario (int pValor) : void
+ analizarReq () : void
+ diseñarSoftware () : void
+ implementarCodigo () : void
3.1 Abstracción
El principio relacionado con la abstracción es la
Dependencia Mínima:
Las mejores abstracciones hacen que las cosas
complejas sean simples
Logran ésto al ocultar los aspectos no
esenciales de una clase
o El cambio es normal en el desarrollo de
software
o Lo mejor: minimizar el impacto de un
cambio
o Y, cuando menos depende de algo, menos
se verá afectado cuando cambie
3.2 Encapsulamiento
➢ Consiste en unir en la Clase las características y
comportamientos, esto es, los atributos y los
métodos
➢ Tener todo esto en una sola entidad
➢ Es evidente que el encapsulamiento se logra a
través de la abstracción y el ocultamiento
➢ Su utilidad se debe ala facilidad para manejar la
complejidad
✓ Tendremos a las clases como cajas negras,
donde solo se conoce el comportamiento, no
los detalles internos
✓ Conveniente por que nos interesará saber qué
hace la clase, pero no cómo lo hace
Ocultamiento
Es la capacidad de ocultar los detalles internos del
comportamiento de una clase y exponer sólo los
detalles que sean necesarios para el resto del
sistema
A través del ocultamiento se consigue:
Restringir el uso de la clase
Habrá cierto comportamiento privado de la
Clase que no podrá ser accedido por otras
clases
Controlar el uso de una clase
Se dará mecanismos para modificar el estado
de la clase
En Java a través de: public, private, protected
Modificadores de Acceso
Permiten definir el nivel de acceso (visibilidad)
de los miembros (atributos o métodos) de una
clase
Publico: Cualquier clase puede “ver” los miembros
públicos de otra clase
Privado: Sólo la clase puede ver sus propios miembros
privados
Protegido: Solo la clase y subclases pueden ver sus
miembros
Existen otros dos modificadores para propósitos
específicos (Paquete)
3.2 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 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
3.3 Herencia
Clase Padre
Es una relación entre clases en
la cual una clase comparte la
estructura y comportamiento Transporte
definido en otra clase (Grady -pasajeros
Booch) +Avanzar()
+Detenerse()
La clase A es la superclase de B
La clase B es la subclase de A
La clase B es la superclase de C, D, y
E
Las clases C, D, y E son subclases de
B
3.3 Herencia
Hay dos tipos de herencias:
- Herencia Simple: una clase hija puede
heredar sólo de una clase padre
Vehiculo
«interface» «interface»
Acuatico Aereo
+Navegar() +Volar()
Hidroavion
3.4 Polimorfismo
Es la posibilidad de construir varios métodos con
el mismo nombre, pero con relación a la clase a
la que pertenece cada uno, con
comportamientos diferentes
Esto conlleva la habilidad de enviar un mismo
mensaje a objetos de clases diferentes
Estos objetos recibirían el mismo mensaje
global pero responderían a él de formas
diferentes
Por ejemplo, un mensaje "+" a un objeto
ENTERO significaría suma, mientras que para
un objeto STRING significaría concatenación
3.4 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í
Polimorfismo - Ejemplo
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
Transporte
Avanzar
Frenar
Transporte
Avanz Transporte
ar Avanzar
Frenar
Frenar
Transporte
3.4 Polimorfismo
El polimorfismo provee la habilidad para invocar
métodos de objetos específicos a través de
referencias genéricas
Es una característica de POO que permite enviar el
mismo mensaje a objetos de diferentes clases
Sobrecarga
Se refiere al uso del mismo identificador o operador
en distintos contextos y con distintos significados
Paradigma Orientado a Objetos
Introducción
PROGRAMACION II
CAPITULO 1 INTRODUCCION A LA
ORIENTACION A OBJETOS
Alica A
Relaciones
Vehiculo Puerta
-color
+Mover()
1.4 Envío de Mensajes