PDF de programación - Smalltalk - Objetos (uso)

Imágen de pdf Smalltalk - Objetos (uso)

Smalltalk - Objetos (uso)gráfica de visualizaciones

Publicado el 15 de Noviembre del 2019
80 visualizaciones desde el 15 de Noviembre del 2019
1,8 MB
31 paginas
Creado hace 9a (11/03/2010)
Objetos

(uso)

Carlos Fontela

cfontela@fi.uba.ar

A3F

Temario

Objetos y mensajes

Objetos y clases

Estado, comportamiento, identidad

Historia hacia la POO

POO vs. procedural

2c2009

2

A3F

Operando sobre objetos

(Smalltalk)

lista := OrderedCollection new.
lista add: -7.
x := lista size.
Transcript show: x printString.
Transcript show: lista get:1 printString.
Transcript show: 4 factorial squared printString.
Transcript show: [ (8 < 9) ifTrue: [„verdad‟] ifFalse:

[„mentira‟] ].

count := 0. total := 1.
[count > 10] whileFalse:
[count := count + 2.
total := total * count].
Transcript show: total printString.

2c2009

3

A3F

Operando sobre objetos (Java)

Date fecha1 = new Date (1983, 12, 10);

Date fecha2 = new Date (2009, 8, 1);

Date fecha3 = new Date (2002, 6, 10);

String nombre = new String ("Carlos Fontela");

ArrayList lista = new ArrayList ( );

lista.add (fecha1); lista.add (fecha2); lista.add

(fecha3);

Collections.sort(lista);

lista.add (nombre);

for (int i = 0; i < lista.size(); i++)

System.out.println(lista.get(i).toString());

2c2009

4

A3F

Objetos y responsabilidades

Los objetos tienen responsabilidades

Actuar ante la llegada de un mensaje =>

“comportamiento”

Guardar datos internos => “estado”

Objetos = entidades con comportamiento

En principio, guardamos sólo el conocimiento que

nos permite realizar el comportamiento

Aunque en algunos casos hay objetos que nos

interesan sólo por su estado

En POO, deberían ser muy pocos

2c2009

5

A3F

Objetos y mensajes

Comportamiento => todo programa trabaja con

objetos que reciben mensajes y actúan
Dándonos información sobre su estado

x := lista size.
int x = lista.size();

Alterando su estado:

lista add: 44.
lista.add (fecha2);

Enviando mensajes a otros objetos:

Transcript show: 4 factorial squared printString.
System.out.println ( lista.get(i).toString( ) );

Los mensajes están implementados como

“métodos”

2c2009

6

A3F

Objetos y clases

Los objetos son de determinados tipos

Idea de concepto e individuo

Los tipos se llaman clases

Pueden ser definidos por el programador

Próximo capítulo

2c2009

7

A3F

Clases y objetos

Clase

Define estructura y comportamiento de los

objetos

Los datos internos de un objeto

Los mensajes que un objeto entiende

Molde de objetos

Objeto

Una instancia de la clase

2c2009

Tiene existencia en tiempo de ejecución

8

A3F

Creación de objetos (Smalltalk)

Declaración:

x := OrderedCollection new.

Significado

OrderedCollection es la clase de x
El objeto se crea recién cuando invoco el

mensaje “new”

En x queda una referencia a un objeto

de tipo OrderedCollection

Smalltalk es un lenguaje de tipos

dinámicos
Luego:
x := Dictionary new.

2c2009

9

A3F

Creación de objetos (Java y C#)

Declaración:
ArrayList x;

Definición:

x = new ArrayList( );

Significado

ArrayList es la clase de x
ArrayList( ) es el “constructor” de la clase ArrayList
El objeto se crea recién cuando llamo al

constructor con el operador “new”

En x queda una referencia a un objeto de tipo

ArrayList

2c2009

10

A3F

Referencias (Smalltalk)

Las variables son referencias a objetos:

lista1 := OrderedCollection new.
lista1 add: -7.
lista2 := lista1.

“lista1” y “lista2” referencian al mismo objeto

(hay una sola llamada a “new”)

Si hago:

lista2 := SortedCollection new.
Ahora “lista2” referencia a otro objeto

Una variable que no referencia un objeto tiene el

valor “nil”
Puedo hacer: lista := nil.

2c2009

11

A3F

Referencias (Java y C#)

Las variables son referencias a objetos:

Date x, y;
x = new Date (2009, 7, 25);
y = x;

“x” e “y” referencian al mismo objeto

(hay una sola llamada a constructor)

Si hago:

y = new Date (1950, 8, 17);
Ahora “y” referencia a otro objeto

Una variable que no referencia un objeto tiene el

valor “null”

Puedo hacer: Date x = null;

2c2009

12

A3F

Recolección de basura

Si hago:

lista1 := OrderedCollection new.
lista1 := Point new.

El objeto inicial quedó como

basura

Java, C# y Smalltalk tienen
recolección automática de
basura

2c2009

13

A3F

Errores y excepciones

Cuando un objeto no puede responder a un

mensaje, reacciona enviándonos una
excepción

Una excepción es

Un objeto lanzado desde un método

Que puede ser capturado

Por ejemplo, si hago:

x := 1 / n.

Voy a obtener un error en tiempo de ejecución

2c2009

14

A3F

Excepciones capturadas

Pero también puedo capturar la excepción:

[ 1 / n. ] on: Exception

do: [:e |

n := n + 1.

Transcript show: e messageText.

e retry.

]

En este caso no se interrumpe el programa

2c2009

15

A3F

Excepciones como objetos

Las excepciones son objetos

Se acceden mediante variables que los

referencian

Tienen estado, comportamiento e identidad

Por ejemplo:

Transcript show: e messageText.

e retry.

retry y messageText son mensajes enviados al

objeto referenciado por e

Hay muchos tipos de excepciones

Lo veremos luego

2c2009

16

A3F

Programa OO

Conjunto de objetos enviando mensajes a otros

objetos

Los objetos receptores reciben los mensajes y

reaccionan

Haciendo algo (comportamiento)

Devolviendo un valor (que depende de su estado)

Los mensajes pueden implicar la creación de nuevos

objetos

El comportamiento puede delegarse a su vez en otro

Los objetos entienden los mensajes
para los cuales están preparados =>
Modelo esencialmente concurrente
objeto

2c2009

17

A3F

Concepto de Objeto

Definiciones

Una instancia de una clase

Cualquier cosa, real o abstracta, de la cual

almacenamos datos y la forma de manipular
esos datos

Características

Estado (visible e interno)

Comportamiento

Identidad

2c2009

18

A3F

Características (1)

Estado visible

Se accede mediante propiedades (C#, Object

Pascal)

O métodos de consulta y asignación ( “getters” y

“setters”)

Propios de la clase a la que pertenece

Comportamiento

Se obtiene mediante métodos

2c2009

Propios de la clase a la que pertenece

19

A3F

Características (2)

Estado interno

Almacenado en atributos, no accesible de afuera

Definidos en la clase del objeto

Identidad

Única para cada objeto

La mantiene el sistema (referencia), no accesible

directamente en Java, C# y Smalltalk

2c2009

20

A3F

Importancia del comportamiento

Diferencia más importante con programación

estructurada

No estamos solamente usando variables y tipos simples

Tampoco datos estructurados

Son “objetos” que saben cómo comportarse

Corolarios:

Los objetos deben manejar su propio comportamiento

No deberíamos manipular su estado desde afuera

En vez de:

punto setX: [ punto getX + 1 ] .

Deberíamos hacer:

punto moverEnX: 1.

2c2009

21

A3F

Mensajes enviados a la clase

¿Qué hicimos cuando escribimos … ?

lista := OrderedCollection new.

No hay ningún objeto para el que estemos llamando

el método

En realidad sí: en Smalltalk las clases son también objetos

“new” es un método de clase de la clase

“SortedCollection”

Lo mismo ocurrió con el código Java:

Collections.sort(lista);

“sort” es un método de clase de la clase “Collections”

2c2009

22

A3F

POO

Influencias previas

Programación estructurada
Programación modular
Abstracción
Tipos definidos por el programador
Ocultamiento de implementación

Más otras cuestiones

Énfasis en encapsulamiento
Herencia
Polimorfismo, con o sin herencia

2c2009

23

A3F

OO: objetivo principal

Manejo de la complejidad

Abstracción: construir en base a

componentes

Lo hacen todas las industrias

Economía
División del trabajo
Ya probado y optimizado
Se adquiere y se ensambla
Hay que definir interfaces: contrato
No fue cierto hasta fines de los 90

2c2009

24

A3F

Mini-Historia de paradigmas (1)

Paradigma “lineal” o “espagueti”

Código dirigido por orden de ejecución, con

saltos y sin modularidad

Todas las cuestiones mezcladas

Lenguajes: Fortran IV, Cobol

Paradigma “estructurado” o “procedural”

Centrado en lo que “hace” el software

Separación de funcionalidades en módulos

Sin separación de entidades, tipos o clases

Lenguajes: Fortran 77, C, Pascal, ¿Ada?

2c2009

25

A3F

Mini-Historia de paradigmas (2)

Paradigma orientado a objetos

Centrado en las entidades del dominio

Las entidades son clases

Y sus instancias, objetos

Lenguajes: Smalltalk, Eiffel, Ada95,

C++, ObjectPascal, Java, C#,
Python, Ruby

Paradigma(?) de aspectos

Modulariza cuestiones no funcionales

Lenguajes: AspectJ, Spring, JBoss, …

Otros paradigmas

Relacional, funcional, lógico, …

2c2009

26

A3F

POO vs Programación Procedural

Ambas modularizan, separan en partes
Procedural modulariza por funciones

(lo que hace el sistema = dominio de la solución)
¿verbos?

POO modulariza por entidades

(sobre qué trabaja el sistema = dominio del

problema)

¿sustantivos?

En POO también hay funciones

Son los métodos dentro de las clases
Pero especifican más bien “comportamiento” de

entidades

2c2009

27

A3F

POO: cómo lograrla

Entidades se convierten en clases

= tipos con comportamiento

Próximo capítulo

2c2009

28

A3F

Claves

Se trabaja con objetos y mensajes

Las clases son tipos y los objetos sus instancias

Las clases son conjuntos de objetos

Los paquetes agrupan clases

Java / C# / Smalltalk:

Objetos se crean en tiempo de ejecución

Las variables son referencias a objetos

A los objetos sin uso los elimina el sistema

POO modulariza en base a las entidades del dominio

del problema

2c2009

29

A3F

Lecturas opcionales

Object-oriented analysis and design : with applications, Grady

Booch

Capítulo 4: “Classification”

Análisis y diseño orientado a objetos, James Martin y James

Odell

Capítulo 15: “Conceptos y objetos”

Capítulo 17: “Concepto vs. Tipo de objeto”

Ambos libros están en biblioteca

El de Booch tiene una versión en castellano, agotada

Son libros antiguos

Más de 15 años

No existía Java ni C#, sí Smalltalk

Orientación a objetos, diseño y programación, Carlos Fontela

2c2009

2008, capítulo 3 “Programación basada en objetos”

30

A3F

Qué sigue

Cla
  • Links de descarga
http://lwp-l.com/pdf16916

Comentarios de: Smalltalk - Objetos (uso) (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad