You are on page 1of 29

Programacin Orientada a

Objetos

Paradigma Orientado a Objetos

Necesidades
Abordar problemas ms complejos
Reducir la complejidad de mantenimiento

Anlisis
Modelo conceptual
Requerimientos
q
del

Diseo
Diseo
Diseo

sistema

del sistema (lgico)


detallado (fsico)

Aplicacin
Codificacin
Prueba

(lenguajes O.O.)

UTN - FRM: Paradigmas de Programacin - Programacin O.O

Paradigma Orientado a Objetos

Creacin de paradigma nuevo

Simulacin del mundo real


Manejo de la complejidad

Clases y objetos
Mtodos y mensajes
Herencia
Polimorfismo

Evolucin de paradigma existente

Aumento tamao de programas => aumenta complejidad


La complejidad = interconexin de partes
Manejo de la complejidad

Procedimientos
Mdulos
Tipos de datos abstractos
Programacin orientada a objetos

UTN - FRM: Paradigmas de Programacin - Programacin O.O

Programacin Orientada a Objetos

Abstraccin
Modularidad
Encapsulamiento
Independencia funcional
Reusabilidad
eusab dad
la

funcionalidad interna de un objeto pueden ser redefinida


sin cambiar otras partes del sistema
refinamiento por herencia
delegacin de responsabilidades

Naturalidad
pasaje

del modelo real al modelo computacional

UTN - FRM: Paradigmas de Programacin - Programacin O.O

Clases y Objetos

Clases
Tipos abstractos de datos (TAD)
Representacin de la informacin
Operaciones asociadas
Plantillas

a partir de la cual crear objetos

Objetos
Instancias

de clases
Encapsulamiento
Ocupan espacio en memoria

Reusabilidad
de

un TAD => frecuentemente se tiene que modificar


de Objetos (clases + herencia) => agregar sin modificar
UTN - FRM: Paradigmas de Programacin - Programacin O.O

Lenguajes Orientados a Objetos

Orientados a objetos
Basados en objetos
Hbridos
Smalltalk (100% puro)
Xerox PARC 1970
Smalltalk-80
ANSI standard en 1998

Java
Sun 1991
versin 1.0a2
J2EE

(1995) => 1.5

Genealoga de lenguajes

UTN - FRM: Paradigmas de Programacin - Programacin O.O

Java

No puro
Tipos de aplicaciones
Consola
Basada en
Applets

cdigo fuente

GUI

compilador

S d
Seudocompilador
il d
VM
bytecode
ventajas
multiplataforma
desventajas
descompilado

UTN - FRM: Paradigmas de Programacin - Programacin O.O

cdigo byte

input

VM

output

Programacin O.O
Conceptos

class Complejo {
private float pr;
private float pi;
public void asignar(float r, float i) {
pr = r;
pi = i;
}
public void sumar(Complejo obj) {
pr += obj.pr;
pi += obj.pi;
}
}

clases y objetos
encapsulamiento
instancias de objetos
identidad de objetos
variables de instancia
mtodos de instancia
calificadores de acceso
mensajes
estado de un objeto
j

3.4, 2.3

asignar()
sumar()

Complejo n = new Complejo();


Complejo p = new Complejo();
n.asignar(3.4, 2.3);
p. asignar(0.4, 2.7);
p.sumar(n);
UTN - FRM: Paradigmas de Programacin - Programacin O.O

0.4, 2.7
referencia: n

asignar()
sumar()

pr: 3.4
pi: 2.3

pr: 3.8
0.4
pi: 5.0
2.7

Reutilizacin de cdigo

Herencia

En general es una relacin esttica


Subclases

Construccin de objetos
Pueden

Envo de mensajes y despachador de mtodos

agregar nuevas variables o mtodos


redefinir
d fi i o anular
l un mtodo
t d
refinar un mtodo

Polimorfismo

Herencia vs. delegacin


Especializacin vs. generalizacin

Composicin

En general es una relacin dinmica

UTN - FRM: Paradigmas de Programacin - Programacin O.O

Implementacin: Figuras
Conceptos

Elemento
simbolo : char
longitud : int

constructores

herencia
delegacin
atributos constantes
clases abstractas
mtodos abstractos
redefinicin de mtodos

dibujar(t : Telon) : void


mover(p : Punto, t : Telon) : void
borrar(t : Telon) : void
1..1
Barra
ancho : int

Linea

orientacion : char

#en
dib...

Discontinua
puntos : boolean

de copia

Punto
x : int
y : int

polimorfismo

relacin

de asociacin

cardinalidad

relacin

de dependencia

Continua
1..1
Telon
region[][] : char
dibujarLinea(pi : Punto, pf : Punto, c : char) : void
mostrar() : void

UTN - FRM: Paradigmas de Programacin - Programacin O.O

10

Caso de estudio: Inmuebles


Lote

Registro
provincia : String
m unicipio : String
tasa : float

idPadron : int
ubicacion : String
avaluoxmt : f loat
superficie : int

+inscripto
+inm ueble
1

valuar(id : int) : float


registrar(e : Escritura) : void
em itirBoletos() : void

n
valuar() : float
edificar (e : Edif icio) : void
tipoEdif icio() : Edificio
dem oler() : void

Conceptos

estereotipos
relacin de agregacin
mtodos set/get
mtodos inline

variables

-construccion

Edificio

Escritura

Departam ento

avaluoxm t : float

num ero : int


superficie : int
ubicacion : String

piso : byte
dpto : char
superficie : int

valuar() : float

+unidad

guardar() : boolean
recuperar (n : int) : Escritura

de clase

inicializador static

mtodos de clase
clases asociativas
objetos persistentes
calificador transient
relacin composicin
destructores

1..n

Casa

PH

plantaAlta : boolean
superficie : int

cantPisos : byte

UTN - FRM: Paradigmas de Programacin - Programacin O.O

calificador final

11

Packages
Conceptos

classpath
parte pblica
parte privada
exportacin
importacin
calificadores

Main

de acceso

public
private
protected
R

UTN - FRM: Paradigmas de Programacin - Programacin O.O

12

Caso de estudio: Expendedora

Conceptos
packages
contenedores
arreglos
reutilizacin
referencias a clases
clases Object y Class
mtodos privados
sobrecarga

UTN - FRM: Paradigmas de Programacin - Programacin O.O

13

Caso de estudio: Expendedora


Conceptos
herencia

Vector
#$tiposMonedas

(from util)

Moneda

mltiple

justificacin
desventajas

clases final
interfaces

(from monedas)

getValor() : int
getMonedas() : Object[]
clone()
() : Object
j
ctasDeVuelto(v : int) : int

MedioDePago
(f
(from
monedas)
d )

unidad : String = "centavos"


getValor() : int

M10

M25

M50

(from monedas)

(from monedas)

(from monedas)

getValor() : int

getValor() : int

UTN - FRM: Paradigmas de Programacin - Programacin O.O

getValor() : int

Ficha
(from monedas)

valor : int
Ficha(v : int)
getValor() : int

14

Excepciones

Qu son?
Mecanismo

de control de errores en tiempo de ejecucin

Ejemplos
no se puede abrir un archivo
un socket se cierra inesperadamente
divisin p
por cero

Para qu sirven?
Detectar

situaciones inusuales durante la ejecucin


Controlar todos los posibles errores directamente, hace
ilegible al cdigo
Separar el cdigo de un mtodo, del cdigo que gestiona
los errores

UTN - FRM: Paradigmas de Programacin - Programacin O.O

15

Excepciones
try {
...
}
catch (clase1 x){
...
}
catch (clase2 y){
...
}
catch (clase3 z){
...
}
finally {
...
}

UTN - FRM: Paradigmas de Programacin - Programacin O.O

Bloque try
Bloque catch1
Bloque
oque catc
catch2
Bloque catchn
Bloque finally

16

Excepciones
class EE extends Exception{
...
}
Throwable

Error

Exception

VirtualMachineError

...
IOException

EE

...
UTN - FRM: Paradigmas de Programacin - Programacin O.O

RuntimeException

void mtodoC()throws EE{


...
if (?)throw new EE();
...
}
void mtodoB()throws
mtodoB(){
EE{
...
try
mtodoC();
{ mtodoC();}
...
catch (EE x){ ... }
}
...
}
void mtodoA(){
...
try { mtodoB();}
catch (EE x){ ... }
...
}

...
17

Programacin concurrente
aficionados

programadores

expertos

Programacin Visual Basic


Conceptos
paralelismo y
dependencias

Programacin C
concurrencia

Programacin C++

funcionales
de datos
de tiempo

Programacin Concurrente

deadlock

Fuente: John Ousterhout - Sun Microsystems Laboratories

UTN - FRM: Paradigmas de Programacin - Programacin O.O

18

Programacin concurrente
Taxonoma de Flynn

ejecucin

Arquitecturas

bloqueado

listo

SISD

Conceptos
p

V N
Von
Newman

procesos

pre-emptive
non pre-emptive
semforos
monitores
regiones crticas
mensajes

procesos

MIMD

Paralelos

Memoria
compartida

Memoria
distribuida

de tareas

sincronizacin

Vectoriales

contexto

planificador

SIMD

vs. threads

subprocesos

UTN - FRM: Paradigmas de Programacin - Programacin O.O

Arquitectura de memoria
CPU

CPU

memoria
CPU

CPU

CPU memoria

CPU memoria

interconexin
CPU memoria

CPU memoria

19

Programacin concurrente
Conceptos

Creado
start

Dormido

Esperando

desalojjado

notify

despacchado

listo

expir intervalo

wait
sleep

Ejecucin

complet
I/O
interrupted

Interrumpido
interrupt

Bloqueado

clase Thread
interface Runnable
estados de un thread
prioridades
mtodos syncronized

Proceso A

Proceso B

Hilo

Hilo

solicitud
I/O

Memoria

Memoria

Proceso C

Hilo1
Hilon
Muerto
Memoria

UTN - FRM: Paradigmas de Programacin - Programacin O.O

20

Caso de estudio: Control

calificador syncronized
calificador native
clases anidadas
clases annimas
threads
excepciones

Acondicionador

ErrorHardware
lecturaNula() : String

Conceptos

(from sistcontrol)

consumo : double = 0
regular(nivel : double) : void
getConsumo() : double

lanza

0..n

+equipoAA

UnidadDeControl
(from sistcontrol)

Censor

temperatura : double
humedad : double
resultados : String

(from sistcontrol)

tempActual
p
: double
hdadActual : double

calcAjuste(t : double, h : double, v : double) : double


run() : void
estado() : String
setParametros(t : double, h : double) : void
crearLocal(vol : double) : void

inputTemperatura() : double
inputHumedad() : double
run() : void
getMedicion(c : char) : double
0..n

+censor
+ambientes 0..n
Local
(from sistcontrol)

volumen : double

Contenedor
(from sistcontrol)

listIterator() : ListIterator
UTN - FRM: Paradigmas de Programacin - Programacin O.O

21

Programacin orientada a eventos

Event-Driven

Implica escribir el cdigo para atender el evento


No secuencial

Evento

Dependiente de sucesos externos al programa


Cola de eventos

Seal de que algo ocurri enviada al programa


Una alarma, paro de un motor, un click,

Manejo de eventos

Handlers

uno por evento


implementan el comportamiento

Fuentes

Fuentes de eventos

Censores, teclado, mouse, el S.O

UTN - FRM: Paradigmas de Programacin - Programacin O.O

22

Programacin orientada a eventos

GUIs

Input controller

Listeners

(Java)
Message handlers (MFC)
Objeto evento

EventObject

Gestores: GUI, Eventos

Contiene informacin del evento

AWTEvent

ActionEvent

ContainerEvent

AdjustmentEvent

FocusEvent

ComponentEvent

InputEvent

ItemEvent

PaintEvent

TextEvent

WindowEvent

cola

cola

Apl1

Apl2

cola

Apln

MouseEvent

KeyEvent

ListSelectionEvent

UTN - FRM: Paradigmas de Programacin - Programacin O.O

23

Programacin orientada a eventos


xxListener
Usuario
handler(event : xxEvent)
disparo
unaClase

registro

JButton obj = new JButton("OK");

xxListener listener = new Listener();

obj.addXXListener(listener);

Listerner

addXXListener(listener : xxListener)

Accin

Fuente

Tipo de evento generado

Click en un botn
Click en un checkbox
Click en un radio button
Presionar return en un textfield
Seleccionar un item
Abrir, cerrar, etc. una ventana
Mouse pressed, released, etc.
Key released, pressed, etc.

JButton
JCheckBox
JRadioButton
JTextField
JComboBox
Window
Component
Component

ActionEvent
ItemEvent, ActionEvent
ItemEvent, ActionEvent
ActionEvent
ItemEvent, ActionEvent
WindowEvent
MouseEvent
KeyEvent

UTN - FRM: Paradigmas de Programacin - Programacin O.O

24

Caso de estudio: Interface visual


Acondicionador

ErrorHardware

(from sistcontrol)

consumo : double = 0
lecturaNula() : String
Consola

regular(nivel : double) : void


getConsumo() : double
lanza

0..n

+equipoAA

UnidadDeControl
(from sis tcontr ol)

Censor

te mperatura : double
humedad : double
resultados : String

(from sistcontrol)

te mpActual : double
hdadActual : double

calcAjuste (t : double, h : double, v : double) : double


run()
() : void
estado() : String
setParametros(t : double, h : double) : void
crearLocal(vol : double) : void

inputT
p
empe
p ratura()
() : double
inputHumedad() : double
run() : void
getMedicion(c : char) : double
0..n

temp : JTextField
hdad : JTextField
parametros : JButton
crear : JButton
volum : JTextFie ld
visor : JList
mostrar : JButton

+censor
Local

+ambientes 0..n

(from sist contr ol)

volumen : double
Contenedor
(from s is tcontr ol)

listIterator() : ListIterator

UTN - FRM: Paradigmas de Programacin - Programacin O.O

25

Smalltalk
Java

Smalltalk

Referencias
null

nil

this

self

super

super

this.getClass()

self class

Variables de instancia
x

this.x

anObject.x
Clases e interfaces
class Foo {

Object subclass: #Foo

class Bar extends Foo {

Foo subclass: #Bar

interface Foo {
class Bar implements Foo {
UTN - FRM: Paradigmas de Programacin - Programacin O.O

26

Smalltalk
Conversiones de tipos
x instanceof Bar

x isKindOf: Bar

(Bar) x

x respondsTo: #messageForABar

Envo de mensajes
3 + 4 * 2 //da 11
3 + (4 * 2) //da 11

3 + 4 * 2 da 14
3 + (4 * 2) da 11

anObject.foo()

anObject foo

foo()

self foo

anObject.foo(a,b)

anObject foo: a with: b

anObject.firstMessage().
secondMessage().lastMessage();

anObject firstMessage;
secondMessage; lastMessage.

Tipos y variables
int a, b;
a = b = 3 + 4;

| a b |
a := b := 3 + 4.

Object anObject;

| anObject |

int anInt;
Object foo()
UTN - FRM: Paradigmas de Programacin - Programacin O.O

foo
27

Smalltalk
Enunciados de control
if (isTrue) {}

(isTrue) ifTrue: []

if (...) {} else {}

(...) ifTrue: [] ifFalse:[]

switch (...)
while (...)

(...) whileTrue: []

do {} while ()
for (...;...;...)

aCollection do:,collect:,etc.
anInterval do: (number) timesRepeat:[]

try {} catch(Exception e){}

Exception handle: [:e|...] do: [...]

Control de acceso
public int foo()

foo

protected foo()
public x
protected x

private x

UTN - FRM: Paradigmas de Programacin - Programacin O.O

28

Smalltalk
SmallTalk
BankAccount subclass: #SavingsAccount
instanceVariableNames: 'balance name'
initializeBalance: anInteger name: aString
balance := aninteger.
name := aString.
^self
balance
^balance
SavingsAccount new initializeBalance: 100 name: 'Dave'.
Java
class SavingsAccount extends BankAccoun {
private int balance;
private String name;
public Object initializeBalance(int anInteger, String aString) {
balance = aninteger;
name = aString;
return this;
}
public int balance() { return balance ; }
}
new SavingsAccount().initializeBalance(100, Dave);
UTN - FRM: Paradigmas de Programacin - Programacin O.O

29

You might also like