Documentos de Académico
Documentos de Profesional
Documentos de Cultura
A3F
Temario
Implementacin de clases
Atributos
Mtodos y propiedades Constructores Excepciones
A3F
Dijimos
POO parte de las entidades del dominio del problema Que son objetos con comportamiento Cmo? => Implementando clases
2c2009
A3F
A3F
2c2009
A3F
2c2009
A3F
2c2009
A3F
Invariantes de la clase
Restricciones que siempre cumplen todas las instancias
2c2009
A3F
Mtodos (y propiedades):
cuenta depositar: monto
cuenta getTitular
cuenta getNumero
A3F
Ojo que en Smalltalk no se define el tipo antes de usarlos Podra haber ms, que descubramos ms 2c2009 10 adelante
A3F
cuenta depositar: monto Precondicin 1: cuenta no debe valer nil (debe referenciar un objeto) Precondicin 2: monto > 0
11
A3F
2c2009
12
A3F
13
A3F
2c2009
14
A3F
15
A3F
depositar: monto
( monto < 0 ) ifTrue: [ Error new signal. ] .
16
A3F
CuentaBancaria inicializarNumero: n titular: t (numero <= 0 | titular = nil | titular = ) ifTrue: [Error new signal ] . | cuentaNueva | cuentaNueva := CuentaBancaria new. cuentaNueva numero := n.
cuentaNueva titular := t. cuentaNueva saldo := 0;
^ cuentaNueva.
!!
2c2009
17
A3F
Referencia self
Objeto self
depositar: monto ( monto < 0 ) ifTrue: [ Error new signal. ] . self saldo := self saldo + monto !
18
A3F
Postcondiciones
Si no se cumplen, podramos lanzar una excepcin Pero la prueba unitaria es un mejor camino
Veremos ms adelante
Invariantes
2c2009
A3F
Excepciones: lanzamiento
Las excepciones son objetos
20
A3F
Corolarios:
Deben manejar su propio comportamiento No debemos manipular sus detalles desde afuera
En vez de:
cuenta setSaldo: [ cuenta getSaldo + monto ].
Hacemos:
cuenta depositar: monto.
2c2009
21
A3F
Encapsulamiento
Alan Kay, creador de Smalltalk, y del trmino Programacin Orientada a Objetos se bas en sus conocimientos de bacterias La membrana de una bacteria nos asla de la complejidad interna La bacteria interacta con el mundo a travs de su interfaz
Respondiendo a estmulos Realizando acciones
2c2009
22
A3F
Constructores o inicializadores
No existen en Smalltalk: slo est el mtodo de clase new
Debera dejar al objeto en un estado vlido
=> debe cumplir con los invariantes El new no es seguro
Se invoca
cuenta := CuentaBancaria new inicializarNumero: 1234 titular:Juan
2c2009
23
A3F
Visibilidad
Importante para garantizar ocultamiento de implementacin
definidos
Smalltalk
Todos los mtodos son pblicos Todos los atributos son protegidos (semi-privados)
2c2009
Veremos luego
24
A3F
Automatizacin:
Las pruebas deben expresarse como cdigo, que pueda indicar si todo sale bien de manera simple y directa El conjunto de pruebas debe poder ir creciendo Las pruebas deben correrse por cada cambio
A3F
En Java existe JUnit En .NET , NUnit Muy importantes en refactorizacin Los van a ver en la prctica
2c2009
26
A3F
27
A3F
Procedimient o
2c2009
28
A3F
29
A3F
Atributos de clase
Supongamos que necesitamos que el nmero de cuenta fuera incremental Solucin:
Agregar un atributo numeroAcumulado que mantenga un nico valor para la clase
2c2009
30
A3F
31
A3F
Claves
Clases se implementan en base a un modelo cliente-proveedor Las clases son tipos definidos por el programador
Que representan entidades del dominio del problema
32
A3F
Lecturas opcionales
Object-Oriented Software Construction, Bertrand Meyer
Est en la biblioteca
Especialmente captulos 7, 8, 11 y 12
Orientacin a objetos, diseo y programacin, Carlos Fontela 2008, captulo 4 Construccin de clases
2c2009
33
A3F
Qu sigue
Delegacin, herencia
2c2009
34
A3F