Hola a todos. Bienvenidos a la secuencia 1
de la semana 4. En esta semana cubriremos los conceptos básicos
de la herencia en Pharo, el mecanismo de LookUp (búsqueda)
y el desarrollo Web.
En la primera secuencia, introduciremos los
conceptos básicos de la herencia.
Estos conceptos son bastante similares.
a la herencia en otros idiomas con clases, por ejemplo Java.
Le aconsejo de seguirlo, incluso
si está familiarizado con estos conceptos básicos, puesto que.
introduciremos un poco de vocabulario, así como una representación gráfica
que volvera a utilizarse muy pronto
durante el resto del curso.
Esta secuencia enseñará que es la herencia,
y cómo utilizarla.
A su derecha puede ver una representación de dos clases:
la clase Rectangle, con su nombre, en primer lugar,
sus variables de instancia, y sus métodos.
Debajo, lo mismo. El nombre de la clase,
ColorRectangle, sus variables de instancia y sus métodos.
La flecha vertical aquí, podemos ver que un triangulo vacío
como cabeza de la flecha, nos indica una relación de herencia.
La subclase ColorRectangle hereda de la clase Rectangle.
Generalmente, subclases como ColoredRectangle
reafinan el comportamiento y el estado de su superclase.
Una subclase como ColorRectangle puede agregar
estado y comportamiento a su superclase
Aquí, la clase ColoredRectangle agrega estado
en la forma de dos variables de instancia, color
y borderedColor, también agrega el método color.
Podríamos decir que en un momento u otro todas las clases
heredan de la clase Object.
De hecho eso no es del todo cierto.
Es Seguro que todas las clases heredan de la clase ProtoObject.
La superclase ProtoObject
se usa para casos muy especiales.
A los fines de este curso, diremos que todas
las clases heredan de Object. Eso será suficiente para
comprender el conjunto de mecanismos de Pharo.
La clase ProtoObject está reservada para casos
muy específicos. No es probable que lo necesite
para aprender los conceptos básicos de Pharo.
La herencia se comporta de manera diferente,
dependiendo de si hereda el estado o el comportamiento.
La herencia del estado es estática.
Esto significa que cuando crea la subclase,
conoce exactamente al conjunto
de todas las variables de instancia.
Por el contrario para el comportamiento, lo haremos
dinamicamente, és decir que durante la ejecución
del programa miraremos cuales son los métodos
definidos en las subclases y en las superclases.
En cuanto a las variables de instancia, la herencia de las variables de instancia
se produce en el momento de la creación de la subclase.
Así en la creación de la subclase, tomaremos
las variables de instancia definidas en la subclase, en este caso
color y borderColor, y haremos la
unión con todas las variables de instancia definidas en
la super clase, y en la super classe de la super clase
y así hasta llegar a la clase Object.
Aquí las variables de instancia de ColoredRectangle
serán width height color y borderColor
Para el comportamiento el mecanismo es completamente
diferente, y las secuencias que siguen presentaran
exactamente el funcionamiento global,
la herencia del comportamiento se realiza durante la ejecución.
En otras palabras, al enviar un mensaje a un objeto,
el método correspondiente se buscara en la jerarquía de clases.
Aquí, si envió un mensaje a ColoredRectangle, el
mensaje Area por ejemplo, lo buscaremos
en su clase, buscaremos el método correspondiente
en la clase de A color rectangle.
No encontramos el método Area asi que remontamos
en la super clase, buscamos el método Area,
lo hemos encontramos, es este el que sera seleccionado y ejecutado.
Resumiendo.
La herencia, esta noción de subclase y de superclase
permite a una subclase de reafinar el
comportamiento de su superclase y extenderlo.
La subclase puede también puede extender, es decir agregar
estado a su superclase.
Pharo tiene un modelo de herencia simple, es de decir que
una clase tiene solo una y única superclase.
Es posible hacer algo parecido a la herencia múltiple
con la noción de trait, que no abordaremos aquí.
En la cabeza de la jerarquía encontramos Object y también la
clase ProtoObject, de la que no entraremos en detalles.
La herencia del estado es estática, es decir que se
realiza en el momento de la definición de la subclase, mientras que la herencia
del comportamiento se realiza durante la ejecución.
del programa cada vez que enviamos un mensaje a un objeto.