programacion orientada a objetos

Preview:

Citation preview

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.