You are on page 1of 26

Introduccin a la Programacin Orientada a Objetos

a.k.a La Clase de OOP ms corta de la historia

Objetos
Qu es un objeto?
Una entidad run-time Una unidad de ecapsulamiento
Estado <- Encapsulamiento de datos va variables internas Comportamiento < Encapsulamiento de procedimientos va cdigo interno

Ej. Una objeto de tipo pila


Almacena elementos de una pila
Vector? Lista encadenada?

Sabe apilar y desapilar


Que pasa si hago apilo, desapilo? desapilo? Hay un lmite de tamao? Que pasa si lo supero? lmite

Objetos: Terminologa
Los objetos encapsulan atributos/campos permitiendo acceso a ellas nicamente a travs de los mtodos
Nombre de la Clase ------------------------------ Atributo1 Atributo2 ------------------------------ Metodo1 Metodo2 Metodo3

Se puede permitir o restringir su acceso desde afuera Pueden ser Pblicos o Privados

Atributos Privados: dato auxiliar a la implementacin ej. int: PosicinDeUltimoElementoEnVector Atributos Pblico: Dato relevante al problema que el objeto resuelve Pblico: ej. int: NumeroDeElementos. NumeroDeElementos. (en la prctica, se utilizan mtodos observadores) Mtodo Privado: Comportamiento auxiliar. Privado: ej. hayEspacio(): bool Mtodo Pblico: Comportamiento relevante al problema. Pblico: ej. apilar(nat): bool
3

Trabajando con objetos: Invocacin de mtodos


Un objeto es como una TV moderna
Sin el control remoto no se puede hacer nada!

Necesitamos una referencia para interactuar


Si o es una variable que referencia a un objeto de pila
o.apila(5); o.apila(7); print(o.desapila()); print(o.desapila());

Cmo sera el mismo cdigo en un lenguaje procedural?


Si o es una variable que referencia a una estructura <arreglo, int>
apila(o, 7); print(o, 5); print(o, print(desapila(o)); print( desapila(o));

Qu ventajas nos est dando la encapsulacin provista por el objeto?


4

Clases
Una clase es una entidad design-time (*) Representa una clasificacin de objetos Define el comportamiento y atributos de un grupo de objetos con estructura y comportamientos similar

Un objeto es una instancia de una clase

(*) No es estrctamente verdad, depende el lenguaje. Pero sirve como aproximacin incial estrctamente

Diagrama de Clases de UML


Cada clase se representa en un rectngulo con tres compartimientos:
Nombre de la clase Atributos de la clase Operaciones de la clase

Ejemplo de Definicin de Clase en Java


.. class Dice { int top; top; Random gen; // Number on top side of dice //For rolling dice dice

Dice +top: int - gen: Random +getTop():void +getBottom():void +roll():void

Dice() { generator = new Random(); Random(); roll(); roll(); } void roll() { //Rolls dice by random choice from 1-6 roll() top = generator.nextInt(6)+1; generator. nextInt(6)+1; } int getTop() { getTop() return top; top; } //Returns number on top side of dice

int getBottom() { //Returns number on bottom of dice getBottom() return 7-getTop(); 7-getTop(); } }
7

Instanciacin
El proceso de creacin de un objeto a partir de la definicin de una clase Se realiza mediante el llamado a un constructor que tiene cmo parmetros todos los datos necesarios para construir el objeto
Car colour:String model:String fuelCapacity:int start():void stop():void move(direction:String):void Car(colour: String, model: String, fuelCapacity:int)
8

Pila apilar(int):void desapilar():void Pila(tamaoMax:int)

Instanciacin de Objetos en Java


int a = 4; Crea variable de tipo referencia a Car en Call Stack Car myCar; myCar = new Car(Naranja", Fiat 600", 25); Car Crea objeto en memoria y ejecuta constructor Assigns a reference of the object to the variable.

myCar a 4 Stack

colour = Naranja model = Fiat 600 fuelCapacity = 45 start():void stop():void move(direction:String):void

Heap

Diagrama de Clases y Objetos


Definiciones de atributos Valores de atributos

Car colour:String model:String fuelCapacity:int start():void stop():void move(direction:String):void Car(colour: String, model: String, fuelCapacity:int) <<instanceOf>>

myCar:Car colour= naranja model= Fiat 600 fuelCapacity=45 start():void stop():void move(direction:String):void

10

Ejemplo de Uso de Objetos y Clases


... Dice d1 = new Dice(); Dice d2 = new Dice(); print(Enter your guess...); print( guess... int guess = getGuess(); getGuess(); print("Rolling..."); print( "Rolling..."); d1.roll(); d2.roll(); d1.roll(); d2.roll(); System.out.println("Its + d1.getTop() + " and + d2.getTop()); System.out.println( d1.getTop() d2.getTop()); if (d1.getTop() + d2.getTop() != guess) (d1.getTop() d2.getTop() guess) print("Tough luck!"); print( luck!"); else print("You win"); print( win"); }
11

Herencia
Permite definir a partir de una clase, otras clases relacionadas que supongan una:
Especializacin de la clase dada. (Ej. la clase Automvil es una especializacin de la clase Vehculo) Generalizacin de la clase dada. (La clase vehculo es una generalizacin de la clase Automvil)

Si definimos la clase automvil a partir de la clase vehculo se dice: dice: automvil" hereda las variables y mtodos de "vehculo" automvil" extiende de "vehculo" automvil" es subclase de "vehculo" "vehculo" es superclase de automvil"

12

Herencia: Ejemplo (1)


Una lmpara puede ser prendida o apagada y consultada por su estado
Lamp #onOff:boolean +Lamp(status:boolean) +pressSwitch():void +print():void

Una lmpara ajustable extiende una lmpara con la posibilidad de bajar la intensidad de luz.

AdjLamp -brightness:double +AdjLamp(onOrOff:boolean) +dim():void +print():void

13

Herencia: Ejemplo (2)


class Lamp { protected boolean on; on; public Lamp(boolean initOn) { Lamp( initOn) on = initOn; initOn; } public void pressSwitch() { pressSwitch() on = ! on; on; } public void print() { print() System.out.println("Lamp( + on +")"); System.out.println( "Lamp( } }; class AdjLamp extends Lamp { private double brightness; brightness; public AdjLamp(boolean on) { AdjLamp( on) super(on); super( on) brightness = 1.0; } public void dim() { dim() if (brightness > 0.1) brightness -= 0.1; else brightness = 1.0; } public void print() { print() System.out.println("AdjLamp(+on System.out.println( "AdjLamp( +","+brightness+")"); +","+brightness+")"); } };

Notar: Overriding
14

Polimorfismo
Polimorfismo: Muchas Formas La posibilidad de utilizar una misma definicin con mltiples tipos distintos de datos En programacin orientada a objetos, el polimorfismo permite trabajar con colecciones de objetos que son de distinto tipo de manera uniforme.

Veamos unos ejemplos concretos....

15

Polymorphism
public class Room { private Lamp miLampara; public Room(Lamp l) { miLampara = l; } public void strobe(int pulses) { for (int i=0; i<= pulses; i++) { miLampara.print(); miLampara.pressSwitch(); miLampara.print(); miLampara.pressSwitch(); } } }

Room

Lamp +pressSwitch():void +print(): void

AdjLamp +dim(): void +print():void

public void discoteque() { Room r = new Room(new AdjLamp(false)); r.strobe(40); Que mtodo print() } se ejecuta?

16

Clases para administrar documentos

Document

+print():void

MSWordDocument

PSDocument

PDFDocument

17

Clase Abstractas
abstract public class Document { protected String _name; public String getName() { return _name; } abstract public void print(); }

Las clases abstractas no pueden utilizarse para instanciar objetos Sirven para
Introducir tipos (ya veremos para que) Reutilizar cdigo Forzar subclases a proveer implementaciones

18

Printing Queue Document Subclasses


public class MSWordDocument extends Document { ... public void print() {....} ... } public class PDFDocument extends Document { ... public void print() {....} ... } public class PSDocument extends Document { ... public void print() {....} ... }
19

Printing Queue
public class PrintQueue { private LinkedList _docList = new LinkedList(); public void add(Document d) { docList.add(d); } public void print() { while (!_docList.isEmpty()) { Document d = (Document) _docList.removeFirst(); d.print(); } } PrintQueue p = new PrintQueue(); p.add(new MSWordDocument(...); p.add(new PDFDocument(...)); p.add(new PSDocument(...)); p.print();
20

Interfaces
Una interfaz es una coleccin de operaciones que representan servicios ofrecidos por una clase o componente. Por definicin, todas estas operaciones tendrn una visibilidad pblica. La interfaz especifica algo similar a un contrato que la clase se compromete a respetar. La clase realiza (o suministra una realizacin de) una o varias interfaces.

21

Porqu usar interfases?


Para separar (desacoplar) la especificacin de la implementacin
Puedo utilizar cualquier clase que realice la interfaz va polimorfismo

uses user

interface { }

realised (implemented)

class

class

22

Diagrama de Clases: Interfaces


Representacin de clases que realizan o requiren una interfaz.

23

Ejemplo de una Interfaz


interface Collection { boolean add(Object o) ; boolean remove(Object o); boolean contains(Object o); boolean isEmpty(); Iterator iterator(); int size(); // y muchos ms... }

24

Ejemplo de uso de una interfaz


public Collection intersect(Collection A, Collection B) { Collection result = new HashSet(); Iterator itA = A.iterator(); while (itA.hasNext()) { Object o = itA.next(); if (B.contains(o)) result.add(o); } return result; }

25

Interfases, Clases y Clases Abstractas

26

You might also like