You are on page 1of 44

Tema 2

Programacin Orientada
a Objetos

Contenidos
1. Objetivos
2. Evolucin del Software
a)
b)
c)

Programacin No Estructurada
Programacin Estructurada
Programacin Orientada a Objetos

3. Modularidad
4. Problemas de la Programacin Estructurada
5. La POO como solucin
6. Modularidad en Java

Referencias

[Meyer, 99] Tema 2, 8, 14

http://www.javaworld.com

http://java.sun.com

http://www.gamelan.com
http://www.mindview.net/Books/TIJ/index_html
http://ootips.org
http://www.objectmentor.com/resources/publishe
dArticles.html

Objetivos
Se presentar el concepto de Modularidad,
imprescindible para desarrollar proyectos grandes.
Se expondr la evolucin de los paradigmas de
programacin, desde la Programacin No Estructurada
hasta la Programacin Orientada a Objetos.
Se realizar una comparativa entre los distintos
paradigmas, destacando las mejoras introducidas por
la POO.
A modo de ejemplo revisaremos los recursos que
proporciona el lenguaje de programacin Java para
cumplir con los principios de diseo.

Evolucin del Software

Programacin
NO estructurada

Programacin
estructurada
(o Procedimental)

Programacin
Orientada a Objetos

MODULARIDAD

Evolucin del software

Programacin No Estructurada

Programacin Estructurada (Procedimental)

Programacin Orientada a Objetos (POO)

Programacin no Estructurada

Un solo bloque principal

Tpica de los lenguajes de bajo nivel

Variables globales a todo el programa

Problemas:

Suelen contener secuencias de cdigo repetidas

Cualquier modificacin en el programa revisar todo


el software
PROGRAMA

Programa Principal
datos

Programacin no estructurada
Funcin noEstructurada1
escribir(Teclea dos nmeros: );
leer(a, b);
si (b = 0) entonces saltarA(eti3)
c2 1
da
eti2: si (c2 < b) entonces c1 0
sino saltarA(eti4)
fd
d0
eti1: d d + f
c1 c1 + 1
si (c1 < a) entonces saltarA(eti1)
c2 c2 + 1
saltarA(eti2)
eti3: d 1
eti4: escribir(d)

Alguna duda sobre por


qu se le llama
spaghetti code?

Programacin no estructurada
Funcin noEstructurada2
escribir(Teclea dos nmeros: );
leer(base, exp);
si (exp = 0) entonces saltarA(eti3)
cont2 1
resul base
eti2: si (cont2 < exp) entonces cont1 0
sino saltarA(eti4)
factor resul
resul 0
eti1: resul resul + factor
cont1 cont1 + 1
si (cont1 < base) entonces saltarA(eti1)
cont2 cont2 + 1
saltarA(eti2)
eti3: resul 1
eti4: escribir(resul)

Evolucin de los lenguajes de programacin


Funcin factorial
escribir(Teclea dos nmeros: ); leer(base, exp);
si (exp = 0) entonces
resul1;
sino
principio
resulbase; cont21;
mientras (cont2 < exp) hacer
principio
factorresul; resul0; cont10;
mientras (cont1 < base) hacer
principio
resulresul + factor;
cont1cont1 + 1;
fin
cont2cont2 + 1;
fin
escribir(resul);
fin

Hay indentacin y se
evitan las etiquetas,
pero me sigue
pareciendo poco legible

Programacin Estructurada

Tambin llamada procedimental

Variables globales, variables locales y parmetros


PROGRAMA

Programa
Principal

Programa Principal
datos

Procedimiento1

Procedimiento1

Procedimiento2

Procedimiento3

Procedimiento2
Procedimiento3

Programacin Estructurada
Parte

del diseo top-down: descomponer los


requerimientos del programa paso a paso, hasta llegar aun
nivel que permite expresarlos mediante procedimientos y
funciones.

M2

M5

M3

M6

TOP-DOWN

abstraccin

M1

M4

M7

M8

M9

Lo principal es identificar la funcionalidad que se desea


programar y los datos necesarios para conseguirla

Programacin estructurada
Programa principal
entero a, b, d;
pedir_numero(a);
pedir_numero(b);
d=potencia(a, b);
escribir(d);

tipo parmetro
tipo resultado
tipo variable
local

Funcin potencia (a: entero, b: entero): entero


c: entero;
Se entiende !
c1
mientras(b>0) hacer
principio
cmultiplicar(a, c);
bb-1;
fin
devolver(c);

Programacin estructurada
Funcin pedir_numero(): entero
escribir(Teclea un nmero: );
leer(a);
devolver(a);
Funcin multiplicar(a: entero, b: entero): entero
c: entero;
c0
mientras(b>0) hacer
principio
cc + a;
bb-1;
fin
devolver(c);

Modularidad

Agrupar en mdulos los procedimientos con una


funcionalidad comn

Cada mdulo puede contener sus propios datos

mbito de las variables


PROGRAMA

Programa Principal
datos
Mdulo1
Datos + Datos1
Proced1

Mdulo2
Datos + Datos2
Proced2

Proced3

Modularidad
Modulo: unidad elemental para desarrollar
aplicaciones

Funcionales: subprogramas
Declarativos (datos + funcionalidad): TAD

Modularidad: caracterstica del Sw

Una aplicacin grande se compone de varios


mdulos
Los mdulos deben ser independientes
En las aplicaciones se integrarn distintos mdulos
que se comunican entre s
Buen diseo Separacin de mdulos

Por qu modular las aplicaciones?


Descomponer el problema en
partes ms simples
Descomposicin Modular
Facilitar la comprensin
del sistema y de cada
una de sus partes
Inteligibilidad

El sistema est compuesto


de una serie de mdulos
independientes
comunicados entre s
Composicin Modular
Las modificaciones debidas a
cambios en la especificacin afectan
a un nmero reducido de mdulos
Continuidad Modular

Si se produce un error
en un mdulo, ste slo
afecta a dicho mdulo
Proteccin Modular

Programacin Orientada a Objetos

El trmino de Programacin Orientada a Objetos indica


ms una forma de diseo y una metodologa de
desarrollo de software que un lenguaje de
programacin, ya que en realidad se puede aplicar el
Diseo Orientado a Objetos a cualquier tipo de
lenguaje de programacin.

Toma en cuenta la programacin estructurada, a la que


engloba, dotando al programador de nuevos elementos
para el anlisis y desarrollo de Software.

Programacin Orientada a Objetos


Paradigma de programacin que define los programas en
trminos de objetos.
Objeto

Entidad que combina:


Estado: datos
Comportamiento: mtodos (procedimientos y funciones)
Identidad: propiedad que diferencia a cada objeto del resto

Clase
Generalizacin de un objeto particular. Una clase representa
una familia de objetos concretos.

Programa
Conjunto de objetos que colaboran entre ellos para realizar
tareas

Programacin Orientada a Objetos


Ejemplo:

OBJETOS

objeto2
color azul
tipo policiaco
matricula 0000 PM
velocidadMax 250
objeto1
color rojo
tipo deportivo
matricula 1234 ABC
velocidadMax 300

objeto4
color rojo
tipo utilitario
matricula 9235 FCB
velocidadMax 200

objeto3
color amarillo
tipo elegante
matricula 9876 DEF
velocidadMax 150

Programacin Orientada a Objetos


CLASE Coche

CLASE

Agrupacin de las caractersticas (atributos) y


funcionalidad (mtodos) de todos los coches
color String
tipo String
matricula String
velocidadMax real
arrancar()
parar()
real acelerar()

Tipo de retorno
real frenar()
adelantar(pOtro Coche)

Programacin Orientada a Objetos

Encapsula en objetos

el Qu Datos

el Cmo Mtodos (funciones)

Los objetos interactan envindose mensajes


PROGRAMA

Objeto1
Datos1

Objeto4
Datos4

Objeto3
Datos3
Objeto2
Datos2

Caractersticas de los Objetos


Identidad del Objeto
Aunque dos objetos sean exactamente iguales en sus
atributos, son distintos entre si.
Clasificacin
Abstraccin del concepto de objeto llamada clase
Mantenibilidad
Un programa o sistema debe ser fcilmente
modificable
Reusabilidad
Los objetos definidos en un programa pueden ser
extrados e implantados en otro sin tener que realizar
modificaciones importantes en su cdigo

Caractersticas de los Objetos


Encapsulacin y ocultacin de datos
La informacin dentro de un objeto puede ser:
privada: informacin que necesita el objeto para
operar. Es innecesaria para el resto de objetos
pblica: la necesitan el resto de objetos para
interactuar con l
La encapsulacin es la capacidad de los objetos de
construir una capsula a su alrededor ocultando la
informacin que contienen, necesaria para su
funcionamiento interno pero innecesaria para los
dems objetos.
Entrada

OBJETO

Salida

Caractersticas de los Objetos


Polimorfismo
Posibilidad de definir varias operaciones con el
mismo nombre, diferencindolas en el nmero o tipo
de los parmetros.
Los lenguajes Orientados a Objetos permiten definir
operadores con los mismos nombres en clases
distintas; el programa reconoce a qu clase se aplica
durante la ejecucin.
Herencia
Propagacin de los atributos y operaciones a travs de
distintas sub-clases definidas a partir de una clase
comn.
Esta caracterstica se estudia en profundidad en un captulo
posterior.

Construccin de Clases
Una clase describe un grupo de objetos con similares:
Propiedades (atributos)
Comportamientos (operaciones o mtodos)
Relaciones con otros objetos
Cada objeto conoce cul es su clase.
La mayora de los lenguajes Orientados a Objetos pueden
determinar a qu clase pertenece un objeto durante la
ejecucin del programa

Construccin de Clases
Pasos para definir una clase:
1. Identificar los objetos

Los objetos deben imitar el mundo real


Cualquier propiedad de un objeto se identifica a
travs de atributos
Adems de objetos fsicos pueden ser entidades que
se utilizan dentro de la construccin de un programa

2. Definir los atributos

Un atributo recoge un valor que se almacenar en los


objetos de la clase

3. Definir las operaciones.

Examinar las distintas operaciones asociadas a un


conjunto de datos
Aadir la operacin de construccin de objetos de la
clase

Construccin de Clases (ejemplo)


Ejemplo:
Describir las clases de objetos necesarias para operar
con fracciones
CLASE Fraccion
Atributos
numerador: entero
entero denominador: entero
Mtodos
-constructorescribir()
multiplicarPorEntero(pNum: entero): Fraccion
sumar(pFracc: Fraccion): Fraccion

Comparacin de la versin estructurada


con la Orientada a Objetos para resolver un
problema
1. Utilizando una Programacin Estructurada
2. Utilizando una Programacin Orientada a Objetos

Programacin Estructurada vs. Orientada a


Objetos
Especificaci
n formas en una ventana
Tendremos varias
grfica: un cuadrado, un crculo y un
tringulo. Cuando el usuario pinche en
una de las formas, sta rotar 360 en el
sentido de las agujas del reloj (es decir,
har una rotacin completa) y tocar
un sonido en formato AIF, especfico para
esa forma.

Programacin Estructurada vs. Orientada a


Objetos
Aitor
Jon
rotar (numForma) {
// rotar la forma 360
}
tocarSonido(numForma) {
// usar numForma para
// buscar el fichero AIF
// a tocar y hacerlo sonar
}

Cuadrado
Crculo
rotar(){
Tringulo
// cdigo para rotar C
rotar(){
}
// cdigo para rotar C
rotar(){
}
tocarSonido(){
// cdigo para
// cdigo para tocar
tocarSonido(){// rotar el tringulo
// sonido del Cuadr
} tocar
// cdigo para
}
// sonido del Circulo
tocarSonido(){
}
// cdigo para tocar
// sonido del Tring
}

Programacin Estructurada vs. Orientada a


Objetos
Aadido a la
especificaci
n original
Habr una nueva forma en pantalla, junto
a las dems: una amoeba. Cuando el
usuario pulse sobre la amoeba, sta
rotar como las otras, pero tocar un
archivo .hif

Programacin Estructurada vs. Orientada a


Objetos
Jon
rotar (numForma) {
// rotar la forma 360
}
tocarSonido(numForma) {
// si la forma no es amoeba
// usar numForma para
// buscar el fichero AIF
// a tocar y hacerlo sonar
// si no
//
tocar .hif de la amoeba
}

Aitor
Amoeba
rotar(){
//cdigopara
//rotaramoeba
}
tocarSonido(){
//cdigopara
//tocarsonido
//.hifenamoeba
}

Programacin Estructurada vs. Orientada a


Objetos
Punto de rotacin de la amoeba
en las versiones de Jon y Aitor:

Punto de rotacin correcto para la


amoeba

lo que al
cliente
se
le olvid
citar...

Programacin Estructurada vs. Orientada a


Objetos
Jon
rotar (numForma, xPt, yPt) {
// si la forma no es una amoeba
// calcular punto de gravedad
// rotar la forma 360
// si no
// usar xPt,yPt como el punto
// base de rotacin
}
tocarSonido(numForma) {
// si la forma no es amoeba
// usar numForma para
// buscar el fichero AIF
// a tocar y hacerlo sonar
// si no
//
tocar .hif de la amoeba
}

Aitor
Amoeba
intpuntoX
intpuntoY
rotar(){
//cdigopararotaramoeba
//usandopuntoX,puntoY

}
tocarSonido(){
//cdigoparatocar
//sonido.hifenamoeba

Cmo disea Aitor...

qu
tienen las
4 clases
en
comn?

1
Cuadrado
rotar()

Crculo

Tringulo

rotar()

tocarSonido() tocarSonido()

Amoeba

rotar()

rotar()

tocarSonido()

tocarSonido()

Forma
rotar()
tocarSonido()

abstraccin y
generalizaci
n

Cmo disea Aitor...


superclase

Forma
rotar()
tocarSonido()

Unimos las 4
clases a la nueva
clase Forma,
formando una
relacin de
HERENCIA

subclases
Cuadrado

Crculo

Tringulo

rotar()

rotar()

rotar()

tocarSonido()

tocarSonido() tocarSonido()

Amoeba
rotar()
tocarSonido()

Conclusiones
Programacin estructurada:
Los datos y los procedimientos estn separados y sin
relacin.
Presta atencin al conjunto de acciones que
manipulan el flujo de datos desde la situacin inicial
a la final.
Anima al programador a pensar sobre todo en
trminos de procedimientos y funciones, y en
segundo lugar en las estructuras de datos que esos
procedimientos manejan.
Programacin Orientada a Objetos
Presta atencin a la interrelacin que existe entre los
datos y las acciones a realizar con ellos.

Problemas de la Programacin Estructurada


Modelo mental anmalo. Nuestra imagen del mundo se apoya
en los seres, a los que designamos con nombres sustantivos,
mientras que la programacin clsica se basa en el
comportamiento, representado usualmente por verbos.
Resulta difcil modificar y extender los programas, puesto que
suele haber datos compartidos por varios subprogramas
Los programas son difciles de mantener. Suelen tener errores
ocultos que no surgen hasta despus de muchas horas de
funcionamiento
Es difcil reutilizar programas. Es prcticamente imposible
aprovechar en una aplicacin nueva las subrutinas que se
disearon para otra
La coordinacin y organizacin entre programadores para la
creacin de aplicaciones de envergadura es compleja

La POO como solucin


La Programacin Orientada a Objetos constituye un nuevo
paradigma de programacin que trata de encontrar solucin a
los problemas mencionados.
Representacin mucho ms cercana a la realidad
Sistemas de software muy complejos se vuelven mucho ms
simples de comprender
En un sistema correctamente diseado con OO es posible
realizar cambios al nivel de la clases, sin tener que realizar
cambios en ningn otro punto del sistema Reduce el costo
total de mantenimiento
El polimorfismo y la herencia Favorecen la reutilizacin de
componentes individuales
Muchos problemas pueden ser detectados y corregidos en
la fase de diseo Reduccin del trabajo de revisin y
mantenimiento del sistema

Aplicacin OO: Gestin de un restaurante


Buenas noches!
Una mesa por
favor

entero consultarOcupacin
CLIENTE
Iaki

entero asignarMesa()

Bautista

(1)

Tomar crema de
verduras y besugo
anotarPedido(listaPlatos)

Una crema de
verduras y besugo

(3)

CAMARERO

RECEPCIONISTA

(2)

atenderCliente(Iaki)

cocinarPedido(listaPlatos)

Antonio, acompaa
al caballero a la
mesa 2

cocinar (plato)
COCINERO

(4)

Antonio

servir(unPlato)

Arzak

(5)

Marchando una
crema de verduras

Tipos de Mdulos
a) Mdulos de definicin
b) Mdulos de servicio
c) Tipos Abstractos de Datos
d) Mquinas Abstractas de Estado

Tipos de Mdulos
a) Mdulos de Definicin

Declaracin de constantes y variables


Se declaran sobre clases abstractas
Se declaran como estticas
Definiciones de constantes

b) Mdulos de Servicio

Ofrecen un servicio
Agrupan un conjunto de operaciones
Las operaciones de la interfaz se declaran
sobre clases no instanciables
Las operaciones son declaradas estticas

Tipos de Mdulos
c) Mdulos de Abstraccin de Datos

Representan TADs
Se definen el tipo de datos y sus
operaciones
La implementacin se realiza como una
clase

d) Mquinas Abstractas de Estado (MAEs)

A diferencia de los TADs, las operaciones


de una MAE se efectan sobre un nico
objeto (la clase), no se pueden generar
diferentes objetos del mismo tipo

You might also like