programacion orientada a objetos
Transcript of programacion orientada a objetos
Programacion Orientado a Objetos
Programacion Procedimiental
Programa: – Secuencia de instrucciones que describen
la solucion– Conjunto de llamadas a funciones
Codigo y datos: separados, sin ninguna conección formal– Codigo --> funciones– Datos --> estructuras
Programacion Orientada a Objetos
Todo es un objeto, descrito por caracteristicas y acciones.– Caracteristicas --> datos– Acciones --> funciones que operan sobre los
datosPrograma:
– Conjunto de objetos que se relacionan entre si,
– “Comunicandose" a traves de mensajes.
Quebrado a, b, c;a = Quebrado_Pedir();b = Quebrado_Pedir();c = Quebrado_Sumar(a,b);
Quebrado a, b, c;a = new Quebrado();b = new Quebrado();a.Pedir();b.Pedir();c = a.Sumar(b);
Lenguajes Orientados a Objetos
Simula Smalltalk C++ Object Pascal JavaC#
Conceptos de Orientación a Objetos
AbstracciónVisión simplificada de una realidad
– Enfocarse en lo esencial.
POO intenta abstraer lo mas importante de un objeto:Estado del objeto (Atributos).
Comportamiento del objeto (Métodos).
Comportamientos comunes entre objetos relacionados.
Abstracción
Qué es un objeto?
Un objeto es una abstracción de un conjunto de cosas del mundo real de tal forma que: Todos los elementos del conjunto (las instancias)
tienen las mismas características. Todas las instancias están sujetas a y conforman
las mismas reglas.
Mundo Real Software
Abstracción
Características de los objetos: Clasificación Identidad Relacion entre ellos
• Tiene un• Conoce un• Es un
Polimorfismo
Estas características pueden ser usadas en forma independiente, pero juntas se complementan.
Objetos: Caracteristicas
Identidad
Variable DirecciónunCredito 10001324unDebito 54647875unaCuenta 87896545unaCuentadeAhorros 87020486
Una tabla de símbolos
caballoDoris
Residencia de Doris
Mi Computadora
Una bicicleta roja
cuenta bancaria
antena parabólica
Clasificación
Vehículo
Punto
Figura
Animal
(1,3)
(2,2)
(2,1)
(5,2.5)
Clases y Objetos
Class Template
Objetos
ClaseEs la plantillas que describe a un conjunto de
objeto, con los mismos – atributos (variables)– metodos (funciones)– relaciones
Un objeto es una instancia de una clase.Los objetos creados a partir de una clase,
– Tienen una estructura idéntica, – Pero identidad propia
Clase
Clase --> TDA– Tipo de Dato Abstracto
Es la definicion de un nuevo tipo de datoUn objeto es la variable de dicho tipoEjemplo:
– Clase: Perro– Objetos: Balto, Firulais, etc
Ejemplo de Clase
Objetos bicicletas
Abstraídos en
Clase Bicicleta
Atributos
Tamaño de frameTamaño de llantaMaterial ...
Métodos
CambioMoverFrenar...
Ejemplo de Clase
public class Quebrado { private int numerador; private int denominador;
public Quebrado(int n, int d) {} public void setNumerador(int n) {} public int getNumerador() {}}
UML
Java
Quebrado
-numerador:: int -denominador : int
+Quebrado (int, int)+setNumerador (n:int):void+getNumeradore() :int
Estructura de una Clase
Instancia
Una instancia es un objeto creado a partir de una clase.
La clase describe la estructura de la instancia (información y comportamiento), mientras que el estado actual de la instancia es definido por las operaciones ejecutadas.
Instancia
Quebrado b = new Quebrado (3, 19);
q1: Quebrado
numerador = 9denominador 7
Creación de instancias u objetos a partir de la clase Alumno:
Quebrado q1 = new Quebrado (9,7);
Quebrado a = new Quebrado (1,2);
Quebrado
-numerador:: int -denominador : int
+Quebrado (int, int)+setNumerador (n:int):void+getNumeradore() :int
b: Quebrado
numerador = 1denominador 2
b: Quebrado
numerador = 3denominador = 19
Constructor
Método especial
– Con el mismo nombre de la clase. Es llamado automáticamente
– Cuando un objeto de una clase es creado.Inicializa las variables del objeto.Puede tomar argumentos
– Pero no pueden retornar un valor.Una clase puede tener mas de 1 constructor
Creando objetos: new y constructor
new: operador para crear objetos de una clase– Utiliza o llama al constructor de la clase
Si no se define un constructor, – La clase ofrece uno por defecto– El cual no recibe parametros y no hace nada
Si se define– El constructor por defecto se pierde
Ejemplo de Constructorpublic class Quebrado
{
private int numerador;
private int denominador;
public Quebrado(int n, int d)
{ numerador = n;
denominador = d;
}
public Quebrado()
{ numerador = 1;
denominador = 0;
}
//...
};
Encapsulamiento Consiste en separar
– Los aspectos externos de un objeto – De los detalles internos de implementación del
mismo. Se protegen los datos(caracteristicas) de un objeto Se exhibe solo el comportamiento del mismo
– Haciendo enfasis en lo que se puede hacer– No como se puede hacerlo
EJEMPLO
Encapsulamiento: ¿Como implementarlo?
En JAVA se usan modificadores de acceso
– Palabras claves antes de cada miembro de la clase
– Private: Solo los miembros de la clase los pueden ver
– Public: Todos los objetos los pueden ver
– Protected: solo los objetos de las subclases los pueden ver
Para acceder a los datos privados fuera de la clase
– Debe hacerse a través de métodos
– Get y Set
Ejemplo de Encapsulamientopublic class Quebrado
{
private int numerador, denominador;
public Quebrado(int n, int d)
{ numerador = n;
denominador = d;
}
public int getNumerador(){
return numerador;
}
public void setNumerador(int n){
numerador = n;
}
};
Overloading o Sobrecarga
Permite definir varios métodos con el mismo nombre,
– Pero con diferentes parámetros (cantidad y/o tipo).
Ejmplo: public void setFecha(int anio, int dia, int mes );
public void setFecha(String strFecha);
public void setFecha(float segundos);
Relaciones entre objetos• Tiene: a un objeto “pertenecen” objetos de
otras clases– Ejemplo: Un computador tiene un teclado
• Conoce: un objeto conoce datos sobre objetos de otra clase– Ejemplo: un estudiante conoce en que curso
se registro
• Es un: un objeto comparte caracteristicas con otra clase– Ejemplo: un estudiante es una persona
ES UN: Herencia
Es un mecanismo para compartir atributos y métodos entre clases.
Por la herencia se forman jerarquías de clases (superclases y subclases).
Las subclases heredan los atributos y métodos de las superclases.
Permite la reutilización de código.
Superclase
Subclase
Ejemplo
Herencia: Reusando el código
AutomaxFuelmaxNroDePasajerosmodelovelocidad
acelerar()desacelerar()doblarAIzq()doblarADcha()
Avion
maxAltitudmaxFuelmaxNroDePasajerosvelocidadnroDeMotores
acelerar()desacelerar()descender()ascender()
ANTES DESPUES
VehiculomaxFuelmaxNroDePasajerosvelocidad
acelerar()desacelerar()
Avion
maxAltitudnroDeMotores
descender()ascender()
Auto
modelo
doblarAIzq()doblarADcha()
superclase
subclases
Herencia: Creando Subclases
Vehiculo
Auto Avion
public class Vehiculo { }
public class Auto extends Vehiculo{
}
public class Avion extends Vehiculo{
}
JavaUML
Tipos de Herencia
Simple: – Clase A herada de otra Clase B
Múltiple: – Clase A hereda de varias otras clases C, D,
etc
Herencia Multiple
Herencia Múltiple
Problema de ambigüedad: unVehiculoAnfibio.Desplazarse();
Los lenguajes ofrecen mecanismos para deshacer la ambigüedad (en C++ => unVehiculoAnfibio.VehiculoTerrestre::Desplazarse()).
Tipos de Clases Clases abstractas
– Representan conceptos muy generales,
– Describen la interfaz comun para el resto de subclaes
– No pueden ser instanciadas
– Pueden tener operaciones abstractas Clases concretas o comunes
– Representan conceptos especificos
– Pueden ser instanciadas
– Suelen implementar operaciones abstractas heredadas
Clases finales
– Clases especiales que no pueden tener descendencia.
– Permiten instanciar objetos.
TIPOS DE CLASES: EJEMPLOS
Ejemplo de Clase Abstracta
Clases abstractas
Figura {Abstracto}
Circulo Rectangulo
public abstract class Figura { ...}
public class Circulo extends Figura{ ...}
public class Rectangulo extends Figura{ ...}
Figura f = new Figura();
Polimorfismo
El polimorfismo está muy ligado a la herencia. Una misma operación
– Puede ser ejecutada en forma diferente – Por objetos de distintas clases
Ejemplo: – A una figura se le puede calcular el area– Un circulo es una figura– Un rectangulo es una figura– A ambos se les puede calcular el area pero
• Cada uno tiene una forma distinta de calcularlo
Ejemplo de Polimorfismo
Figura Geométrica
Atributo:
area
Método:
obtenerArea
Atributos:
longitud
ancho
Métodos:
Rectangulo
obtenerArea
Atributo:
radio
Métodos:
Circulo
obtenerArea
Rectangulo Circulo
Ejemplo de Polimorfismo
método concreto
Figura f = new Rectangulo();int s = f.obtenerArea();
método abstracto
Rectangulo
+obtenerArea()
Figura {abstracto}
+obtenerArea()
Circulo
+obtenerArea()
Método abstracto
Redefinicion/Overriding
En ocasiones, una clase hija necesita redefinir las implementaciones heredadas
Esto es debido a que
– La implementación de un método heredado
• No se aplica a la subclase
• Ejemplo: Todos los items de una biblioteca se ingresan de una forma dada, menos las tesis
– O el método heredado
• No tiene aún implementacion
• Ejemplo:
– calcArea de una Figura no se puede implementar
– calcArea de un Cuadrado si
Mensajes
a:Articuloi:Itemf:Factura
obtenerPrecio()
calcularPrecio()
obtenerCosto()
public class Factura { ... i.obtenerPrecio(); ...}
public class Item { public obtenerPrecio(){ a.obtenerCosto(); this.calcularPrecio(); } private calcularPrecio(){ ... }}
Identificando objetos: JavaZoo
Los animales de un zoologico se encuentran ubicados en jaulas. Los animales pertenecen a una especie dada, tienen color, tamaño y nombres.
Las jaulas tienen diferentes tamaños, dependiendo de los animales que alberguen. Pueden tener una proteccion para la lluvia. Las jaulas a veces están sucias.
El celador cuida de los animales, los alimenta y limpia sus jaulas.
Ejercicios:
1. Implemente la clase Punto
2. Implemente las clases Figura, Rectangulo y Circulo
Ventajas de la Programación Orientada a Objetos
La reutilización de código: Esta ahorra tiempo en el desarrollo de
programas. Se utiliza software que ya ha sido probado.
Fácil mantenimiento y depuración de programas.Extensibilidad: posibilidad de ampliar la
funcionalidad de la aplicación de manera sencilla.
Modularidad y encapsulación: el sistema se descompone en objetos con unas responsabilidades claramente especificadas.