1. Abstracción 1. Clases
2. Encapsulamiento a. Métodos
3. Herencia i. Sobre Escritura
4. Polimorfismo ii.Sobrecarga
5. Relaciones b. Atributos
a. Asociaciones c. Propiedades(Solo .Net)
i. Composición 2. Objetos
ii.Agregación a. Mensajes
b. Herencia 3. Interfaces
1. Abstracción
Ignorancia Selectiva
○ Se enfoca en lo importante
2. Encapsulamiento
Principio que establece que los atributos propios de un objeto no deben ser
visibles desde otros objetos
○ Punto de Control/Validación
3. Herencia
Es una relación entre clases en la cual una clase comparte la estructura y
comportamiento definido en otra clase (Grady Booch)
– Herencia Múltiple: una clase derivada puede heredar de una o más clases base
(C++ es un ejemplo de lenguaje que soporta este tipo de herencia).
4. Polimorfismo
Es la propiedad que tienen los objetos de permitir invocar genéricamente un
comportamiento (método) cuya implementación será delegada al objeto
correspondiente recién en tiempo de ejecución
Ahora bien, como todas heredan de la misma clase base, las clases derivadas pueden ser
tratadas genéricamente. Esto quiere decir que podríamos tener un array que almacene
objetos de tipo Transporte, y recorrerlo luego para llamar al método “Avanzar” de cada
uno. De esta forma, en tiempo de codificación es imposible saber a qué método “Avanzar”
se está llamando en realidad (al del Auto? Al del caballo? Al del transbordador?), sino que
esta decisión es tomada en tiempo de ejecución en base al tipo particular de objeto que
esté instanciado.
t.Avanzar()
t.Frenar()
Fin
5. Relaciones
Todo sistema abarca muchas clases y objetos
Los objetos contribuyen en el comportamiento de un sistema colaborando entre si
○ La colaboración se logra a través de las relaciones
Existen dos tipos principales de relaciones
○ Asociación
○ Agregación
Asociación
Una asociación es una conexión entre dos clases que representa una
comunicación
Ejemplo:
Agregación
Ejemplo:
Vehiculo Puerta
-color
+Mover()
Herencia:
Es la capacidad de los progenitores de transmitir un conjunto de características a
su descendencia. En POO brinda la capacidad de derivación de una entidad a
partir de otra que le "transmite" su comportamiento, siendo la relación jerárquica
de tipo "es un".
Por ejemplo: Un Felino "es un" Mamífero que a su vez "es un" Animal.
La Herencia, también conocida como Generalización, establece que:
• Algunas entidades son más generales.
• Algunas otras son especializaciones de las anteriores.
Por ende todos los objetos derivan de una clase superior y heredan la estructura
de datos y las operaciones que han sido definidas para dicha clase. Para ello al
diseñar las clases se clasifican de acuerdo al conjunto de características o
funciones similares entre ellas.
Esto permite crear nuevas representaciones abstractas especializadas a partir de
otra más general de la cual heredan su implementación, permitiendo reutilizar el
código y concentrarse sólo en agregar nuevas características. Del ejemplo
anterior, la representación abstracta de Animal es la más general de todas y de la
cual se especializan tanto las representaciones abstractas de Mamífero y Felino,
quienes a su vez heredan la implementación de Animal y cuyas implementaciones
sólo añaden nuevos comportamientos especializados [1].
Clases
Dado que los objetos se crean a partir de clases, son las clases las que tenemos que
diseñar y construir. Para ellos debemos recordar que las clases se componen de los
siguientes elementos o miembros:
Métodos: Representan acciones que un objeto puede realizar.
Atributos: Representan la información que contiene un objeto (estado).
Adicionalmente las clases puede definir Eventos, que son notificaciones que un objeto
recibe de, o transmite a, otros objetos, cuando se produce un acontecimiento
específico.
También existen los miembros compartidos de clase, que pueden utilizarse en
instancias de una clase y en variables de objeto declaradas como tipo de la clase. En
otras palabras, no requieren una instancia de clase en específico para realizar su
cometido.
VB5 introdujo el concepto de módulo de clase en el cual podían definirse clases
simples, una por cada múdulo. Con VB.NET se pueden crear cualquier número de
clases en un mismo archivo, no obstante es una buena práctica el definir clases en
archivos separados. Para definir una clase se emplea, como entonces, la palabra
clave Class:
Class CCliente
'TODO: Miembros de clase
End Class
Si se requiere, también se pueden crear clases anidadas, es decir, clases dentro
de otras clases. Que resulta útil cuando cierto objeto va a ser utilizado al interior de
otro y nunca fuera del mismo.
Ahora como experimento abra el entorno de Visual Studio (o bien su Visual Basic
.NET Standard ó VB2005 Express) y genere una nueva Aplicación Windows.
Despues abra el archivo de código fuente del formulario y observe que inicia con
algo como:
Public Class Form1
Lo cual implica que el formulario se construye a partir de una Clase.
Incluso ahora los Modulos de código son clases, la única diferencia es que se trata
de Clases estáticas con mienbros compartidos.
Ahora pasemos a definir los miembros de la clase: los atributos y métodos [2]
Atributos
Los atributos de clase se representan mediante Campos o Propiedades. Los
Campos se implementan mediante variables públicas que se pueden leer y
establecer directamente desde el exterior de la clase.
Public Nombre As String
Mientras que las Propiedades se recuperan y establecen como los Campos, pero
se implementan mediante procedimientos Property Get y Property Set. El acceso a
los atributos mediante procedimientos proporciona un mayor control sobre la forma
en que se establecen o se devuelven los valores de los atributos; esto ayuda a
aislar los datos y permite validar valores antes de ser asignados o recuperados.
Por ello también podriamos ver a las Propiedades como métodos de clase ya que
encajan en la definición y propósito de los mismos. De hecho en lenguajes como
Java no existen las propiedades y las operaciones de asignación (Set) y obtención
(Get) del valor de los atributos se realizan mediante métodos.
Se puede definir una propiedad de la siguiente manera:
' Ahora el atributo es Privado
Private strNombre As String
' Para ser accesible mediante la Propiedad
Property Nombre() As String
Get
Return strNombre
End Get
Set(ByVal Value As String)
strName = Value
End Set
End Property
El procedimiento Get devuelve el valor de la propiedad, mientras que el
procedimiento Set le asigna el valor a la propiedad. Observe que dado que todo en
.NET es un objeto ya no es necesario la sentencia Let, así como que ambos
procedimientos están contenidos dentro una sola sentencia Property, lo cual hace
mas fácil de manipular y mantener el código de la Propiedad.
En aplicaciones de N-capas las clases generalmente se diseñan sin estado, es
decir sin propiedades [3]
Métodos
Los métodos de una clase en VB.NET se implementan mediante procedimientos o
subrutinas (Sub) y funciones (Function) declarados dentro de una clase, de la
misma manera como se realizaba anteriormente. No obstante ahora para devolver
el valor desde una función se utiliza la palabra clave Return en lugar del nombre
de la misma, el cual además se puede utilizar en los diferentes puntos de salida de
la función:
Function Hola() As String
If Nombre <> "" Then
Return "Hola " & Nombre
Else
Return "Hola Mundo"
End If
End Function
Aún se puede seguir utilizando, por compatibilidad hacia atrás, el nombre de la
función para devolver el valor. Mas es recomendable utilizar Return dado que tiene
un comportamiento más estructurado [4]
Sobrecarga
End Sub
End Sub
Propiedades
Las propiedades permiten implementar el encapsulamiento, impidiendo el acceso
directo a los atributos de una clase y proporcionando un mecanismo para poder
obtener y asignar sus valores.
Nótese que como VB.NET no distingue entre mayúsculas y minúsculas no es
posible embargo, es importante que ambos tengan nombres significativos para la
lógica de la aplicación. No se recomienda el agregado de prefijos o sufijos a los
nombres.
Objetos y Mensajes
Hemos visto que la POO modela software utilizando objetos ligados para la
representación de sistemas. La manera en que la POO ve a un sistema es como
un conjunto de objetos que dialogan entre sí, intercambiando mensajes para
realizar las distintas tareas para las que ha sido concebido. Veamos como:
Cada objeto tiene unas características o propiedades particulares, los atributos, y
unas formas de operar sobre ellos, los métodos. Por otro lado, los objetos
interactúan recibiendo, interpretando y respondiendo a mensajes entre sí. Cada
mensaje está asociado a un método; cuando un objeto recibe un mensaje, la
respuesta es la ejecución del método asociado al mismo.
Las acciones que el objeto puede emprender se define por el comportamiento,
para definir este comportamiento hay que añadir métodos a la clase. Los métodos
son rutinas de código definidas dentro del cuerpo de la clase, que se ejecutan en
respuesta a alguna acción tomada dentro de un objeto de esa clase, o bien desde
otro objeto de la misma o de otra clase. Recuerde que los objetos se comunican
mediante mensajes. El conjunto de mensajes a los que un objeto puede responder
se corresponde con el conjunto de métodos que implementa su clase.
Los mensajes enviados entre los objetos dan lugar al procesamiento interno de
datos, siendo los atributos quienes definen el estado de un objeto al permitir
almacenar datos para el mismo. Normalmente dichos atributos se ocultan al
usuario del objeto - principio de encapsulación, manteniendo a los mensajes como
única conexión con el exterior. Los valores de los atributos, y en consecuencia el
estado del objeto, sólo pueden ser manipulados por el conjunto de métodos que se
corresponden con el conjunto de mensajes por los cuales un objeto se comunica.
Por lo que dichos métodos en conjunto reciben el nombre de interfaz: medio de
comunicación.
No obstante cuando decimos que un objeto recibe un mensaje, debemos entender
que el mensaje es un concepto que subyace en nuestra mente; la acción real es la
invocación del método que decimos responde a ese mensaje con el fin de
modificar el estado del objeto. Por esto podemos decir que los nombres de los
métodos de una clase forman el conjunto de mensajes a los que una instancia de
esa clase (el objeto) puede responder. Cualquier método de una clase puede
invocar a todos los otros miembros (atributos y métodos) de su clase. Pero un
objeto de esa clase sólo puede responder a los mensajes para los que fue
programado, es decir, sólo puede invocar a los métodos de su clase.
En primer lugar debemos tener en cuenta que todo en el .NET Framework, y por
ende en Visual Basic .NET, puede ser tratado como un objeto. Por ejemplo el tipo
Integer ahora posee propiedaes y métodos, tales como MaxValue que regresa el
valor máximo que puede contener:
Dim i as Integer
MsgBox(i.MaxValue)
Con VB.NET observamos que tipos "básicos" como Integer se tratan de objetos.
Del mismo modo, entidades tales como los formularios y controles son todos
instancias de alguna clase, es decir: objetos. Por ende una de las primeras cosas
que debemos tomar en cuenta es que el modo de tratar a éstos tipos a cambiado
con respecto a VB6 y versiones anteriores [5]
Interfaces
Recurso de diseño soportado por los lenguajes orientados a objetos que permite
definir comportamiento
Permite que clases que no están estrechamente relacionadas entre sí deban tener
el mismo comportamiento
La implementación de una interfaz es un contrato que obliga a la clase a
implementar todos los métodos definidos en la interfaz
Vehiculo
Hidroavion
Una interfaz define un contrato de comportamientos que una clase debe cumplir al
implementarla. Los comportamientos declarados en la interfaz no tienen cuerpo ni
funcionalidad, son sólo “firmas” que las clases que implementen la interfaz
deberán completar. De esta forma, si bien no podemos lograr que la clase
derivada herede todos los atributos y comportamientos de su clase base, podemos
al menos “obligar” a que implemente el conjunto de funcionalidades definidas en la
interfaz.
Una clase puede implementar tantas interfaces como desee, y una interfaz puede
ser implementada por tantas clases como se desee.
Infografía
http://dotnetjunkies.com/WebLog/vbpuntonet/articles/poo_vbnet_1.aspx
1.
http://dotnetjunkies.com/WebLog/vbpuntonet/articles/poo_vbnet_2.aspx
2.
http://dotnetjunkies.com/WebLog/vbpuntonet/articles/poo_vbnet_2.aspx
3.
http://dotnetjunkies.com/WebLog/vbpuntonet/articles/poo_vbnet_2.aspx
4.
http://dotnetjunkies.com/WebLog/vbpuntonet/articles/poo_vbnet_1.aspx
5.