UNIDAD 1
PROGRAMACIÓN
ORIENTADA A OBJETOS
Con la Programación
Orientada a Objetos (POO) tenemos que aprender a pensar las
cosas de una manera distinta para escribir nuestros programas en términos de
objetos, propiedades, métodos y otras cosas que veremos rápidamente para
aclarar conceptos y dar una pequeña base que permita soltarnos un poco con este
tipo de programación.
Durante años, los programadores se han
dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez
los mismos problemas. Para conseguir que los esfuerzos de los programadores
puedan ser utilizados por otras personas se creó la POO , que es una serie de
normas para realizar las cosas de manera que otras personas puedan utilizarlas
y adelantar su trabajo, es decir, hacer que el código sea reutilizable.
Cómo se piensa en objetos
Pensar en términos de objetos es muy
parecido a cómo lo haríamos en la vida real. Por ejemplo vamos a pensar en un
coche para tratar de modelizarlo en un esquema de POO. Diríamos que el coche es
el elemento principal que tiene una serie de características, como podrían ser
el color, el modelo o la marca. Además tiene una serie de funcionalidades
asociadas, como pueden ser ponerse en marcha, parar o estacionar.
En un esquema POO el coche sería el
objeto, las propiedades serían las características como el color o el modelo y
los métodos serían las funcionalidades asociadas como ponerse en marcha o
parar.
Por poner otro ejemplo vamos a ver cómo
modelizaríamos en un esquema POO una fracción, es decir, esa estructura
matemática que tiene un numerador y un denominador que divide al numerador, por
ejemplo 3/2.
La fracción será el objeto y tendrá dos
propiedades, el numerador y el denominador. Luego podría tener varios métodos
como simplificarse, sumarse con otra fracción o número, restarse con otra
fracción, etc.
Estos objetos se podrán utilizar en los
programas, por ejemplo en un programa de matemáticas harás uso de objetos
fracción y en un programa que gestione un taller de coches utilizarás objetos
coche. Los programas orientados a objetos utilizan muchos objetos para realizar
las acciones que se desean realizar y ellos mismos también son objetos. Es
decir, el taller de coches será un objeto que utilizará objetos coche,
herramienta, mecánico, recambios, etc.
Clases en POO
Las clases son declaraciones de objetos,
también se podrían definir como abstracciones de objetos. Esto quiere decir que
la definición de un objeto es la clase. Cuando programamos un objeto y
definimos sus características y funcionalidades en realidad lo que estamos
haciendo es programar una clase. En los ejemplos anteriores, un coche en
particular es un objeto, mientras que todos esos objetos pertenecen a la clase
coche.
Propiedades en clases
Las propiedades o atributos son las
características de los objetos. Cuando definimos una propiedad normalmente
especificamos su nombre y su tipo. Nos podemos hacer a la idea de que las
propiedades son algo así como variables donde almacenamos datos relacionados
con los objetos.
Métodos en las clases
Son las funcionalidades asociadas a los
objetos. Cuando estamos programando las clases las llamamos métodos. Los
métodos son como funciones o procedimientos que están asociadas a un objeto, es
decir, acciones que el objeto es capaz de ejecutar.
Objetos en POO
Los objetos son ejemplares de una clase
cualquiera. Cuando creamos un ejemplar tenemos que especificar la clase a
partir de la cual se creará. Esta acción de crear un objeto a partir de una
clase se llama instanciar (que viene de una mala traducción de la palabra instance
que en inglés significa ejemplar). Por ejemplo, un objeto de la clase fracción
es por ejemplo 3/5. El concepto o definición de fracción sería la clase, pero
cuando ya estamos hablando de una fracción en concreto 4/7, 8/1000 o cualquier
otra, la llamamos objeto.
Estados en objetos
Cuando tenemos un objeto sus propiedades
toman valores. Por ejemplo, cuando tenemos un coche la propiedad color tomará
un valor en concreto, como por ejemplo rojo o gris metalizado. El valor
concreto de las propiedades de un objeto se llama estado.
Para acceder a un estado de un objeto
para ver su valor o cambiarlo se utiliza el operador punto.
Supongamos que CocheDeMiVecino es un
objeto que pertenece a la clase Coche. El CocheDeMiVecino es azul, es decir, la
propiedad Color del CocheDeMiVecino es azul. Entonces decimos:
CocheDeMiVecino.Color = azul
El objeto es CocheDeMiVecino, luego
colocamos el operador punto y por último el nombre de la propiedad a la que
deseamos acceder. En este ejemplo estamos cambiando el valor del estado de la
propiedad del objeto a azul con una simple asignación.
Mensajes
en objetos
Un mensaje en un objeto es la acción de
efectuar una llamada a un método. Por ejemplo, cuando le decimos a un objeto de
la clase Coche que se ponga en marcha estamos pasándole el mensaje “Arrancar”.
Para mandar mensajes a los objetos
utilizamos el operador punto, seguido del método que deseamos invocar.
CocheDeMiVecino.Arrancar
En este ejemplo pasamos el mensaje Arrancar,
el cual va a buscar a la clase Coche para ver cómo se realiza.
2.- LOS TRES PILARES DE
Cualquier lenguaje basado en objetos debe cumplir estos tres
requisitos:
- HERENCIA:
La herencia es la cualidad de crear clases que estén basadas en otras
clases. La nueva clase heredará todas las propiedades y métodos de la
clase de la que está derivada, además de poder modificar el comportamiento
de los procedimientos que ha heredado, así como añadir otros nuevos.
Supongamos que tenemos una clase Gato que está derivada de la clase
Animal. Gato hereda de Animal todas las características comunes a esa
clase, además de añadirle algunas características particulares a su
condición felina. Podríamos tener otra clase Perro, que también heredaría
las propiedades y métodos de Animal. Aunque las clases Gato y Perro son
claramente distintas, ambas pertenecen o se derivan de la clase Animal y
en ese sentido comparten muchas características.
- ENCAPSULACIÓN:
La encapsulación es la capacidad de separar la implementación de la
interfaz del código de una clase, es decir, sabemos cuáles son las
propiedades de los objetos, cuáles son sus métodos y qué hacen, pero no
nos importa cómo lo hacen. Siguiendo el ejemplo anterior, sabemos que un
objeto de la clase Coche tiene como método Arrancar; si queremos utilizar
ese método, sólo tenemos que invocarlo para lo cual basta con conocer su
nombre pero no nos importa en qué consiste.
- POLIMORFISMO:
El polimorfismo se refiere a la posibilidad de definir múltiples clases
con funcionalidad diferente, pero con métodos o propiedades denominados de
forma idéntica que pueden utilizarse de manera intercambiable. Por
ejemplo, Arrancar puede ser un método de la clase Coche, pero también un
método de la clase Moto, y si tenemos dos objetos EsteCoche y EstaMoto, es
posible que nos dé lo mismo utilizar el método EsteCoche.Arrancar que
EstaMoto.Arrancar
Es bueno tener en cuenta que cuando definimos una clase estamos
definiendo dos cosas diferentes: los datos que dicha clase puede manipular o
contener (las propiedades) y la forma de acceder a esos datos y trabajar con
ellos (los métodos). En cambio, cuando definimos un objeto (sería más exacto
hablar de crear un objeto) estamos creando un objeto en particular que
pertenece a esa clase. En otras palabras, un objeto es un caso real y concreto
de una clase, que sólo describe en forma abstracta un conjunto de objetos.
Para definir una clase, se utiliza la
palabra Class y basta con darle un nombre a la clase. Cuando termino de definir
todo lo que involucra a la clase, cierro la definición con la palabra End.
Class
Coche
End
Class
Es decir, todo lo que esté entre Class
Coche y End Class, será la definición de la clase Coche. Allí determinaremos
sus propiedades (valores que puede tomar) y sus métodos (acciones que puede
ejecutar)
Veamos cómo podemos definir algunas
propiedades y métodos de la clase Coche:
Class
Coche
Public Marca as string
Public Color as string
Public CantidadDePuertas
as integer
Public Sub Arrancar ()
<aquí se
introducen todos los pasos que hacen que un auto
pueda
arrancar>
End Sub
End
Class
Nótese que las propiedades Marca, Color
y CantidadDePuertas y el método Arrancar se definen utilizando la palabra
Public, de modo que puedan ser accedidos desde otros códigos.
Vamos ahora a crear un objeto
perteneciente a esa clase: primero lo definimos diciendo qué tipo de variable
es; Dim en Visual equivale a Var en Pascal, y As vendría a ser los :.
Dim
CocheDeMiVecino As Coche
Y después lo creamos
CocheDeMiVecino
= New Coche()
Si queremos definir una clase que va a
pertenecer a otra (como el caso de Gato que pertenece a la clase Animal)
podemos hacer que herede todas sus propiedades y métodos. Esto lo hacemos
utilizando la palabra Inherits
Class
Gato
Inherits
Animal
<aquí van todas las
definiciones propias de la clase Gato que otros
elementos de la
clase Animal no tienen>
End
Class
Finalmente vamos a decir que un módulo
es un archivo en el que se almacenan los códigos correspondientes a las clases
que va a utilizar el sistema. Un sistema podría estar conformado por varios
módulos, los que a su vez podrían estar conformados por varias clases.
4.- PARÁMETROS DE UN MÉTODO
Los métodos de una clase pueden ser de
dos tipos: procedimientos o funciones. Un procedimiento es un conjunto de
instrucciones que realizan una acción. Se declara de la siguiente manera
Sub
< nombre del procedimiento> (<lista de parámetros>)
<aquí
van las instrucciones que realizan la acción>
End
Sub
Una función, además de hacer lo mismo
que un procedimiento, puede devolver un valor y termina siendo usada como una
variable. Se declara:
Function
<Nombre de la función> (<lista de parámetros>) As <tipo de
dato>
<aquí
van las instrucciones que realizan la acción>
End
Function
Supongamos que tengo un procedimiento
que se llama Suma y que recibe dos valores, los cuales suma y devuelve el
resultado en un tercer valor. Quedaría como sigue:
Sub
Suma (ByVal Valor1 As Integer, ByVal Valor2 As Integer, ByRef Resultado As
Integer)
Resultado
= Valor1 + Valor2
End
Sub
Valor1 y Valor2 son las variables donde
el procedimiento va a guardar los dos números que tiene que sumar. Resultado es
la variable donde el procedimiento va a guardar la suma. Valor1 y Valor2 se
denominan los parámetros de entrada del procedimiento (para indicarlo se coloca
ByVal); mientras que Resultado es el parámetro de salida (por eso está
precedido por la expresión ByRef). Así, el procedimiento recibe como entrada
dos números que suma y los coloca en una variable que devuelve.
Si esto mismo lo hiciera una función en
lugar de un procedimiento, la suma puede devolverse en la misma función
Function
Suma (ByVal Valor1 As Integer, ByVal Valor2 As Integer) As Integer
Suma
= Valor1 + Valor2
End
Function
Como vemos, en este caso los dos valores
se suman y se guardan en la misma función. Desaparece el parámetro de salida y
se declara a la misma función Suma como una variable de tipo Integer capaz de
devolver el resultado de la suma.
Los parámetros de entrada son variables
capaces de guardar valores que reciben para poder procesarlos. Por eso se dice
que son parámetros pasados por valor, y todo cambio que se produzca en ellos
dentro del procedimiento, no va a salir de ahí. En cambio, los parámetros de
salida son variables que después van a seguir siendo usadas por otras porciones
de código; por lo tanto es necesario que el parámetro pase la variable entera:
su dirección de memoria y su contenido. A este tipo de parámetros se los
denomina pasados por referencia.
Dicho de otra manera: los parámetros
indicados con ByVal se pasan por valor, es decir, se hace una copia del
contenido de la variable o constante y es esa copia la que se pasa al procedimiento.
Por otro lado, los parámetros indicados con ByRef se pasan por referencia, es
decir se pasa al procedimiento una referencia a la posición de memoria en la
que está el contenido de la variable en cuestión, por tano cualquier cambio
efectuado a la variable dentro del procedimiento afectará a la variable
indicada al llamar al procedimiento. Demás está decir que esta cuestión de los
parámetros vale tanto para funciones como para procedimientos.
El ámbito de una variable se refiere a la porción de código para la
cual esa variable puede ser utilizada.
Diferenciamos tres ámbitos distintos:
- Global:
la variable puede ser utilizada por cualquier otra clase de cualquier otro
lugar del sistema. Estas son las variables que normalmente llamamos
propiedades de las clases. Se declaran utilizando la palabra Public
inmediatamente después de denominar a la clase
Class <Nombre de la Clase >
Public <Variable Global> As <Tipo>
<aquí va el resto del código correspondiente a la definición de
la clase>
End Class
- Privada:
la variable puede ser utilizada sólo por la clase donde está declarada. Se
declaran con la palabra Private inmediatamente después de denominar a la
clase
Class <Nombre de la Clase >
Private <Variable Privada> As <Tipo>
<aquí va el resto del código correspondiente a la definición de
la clase>
End Class
- Local: la
variable puede ser utilizada sólo en el método en el cual se define. Se
utiliza la palabra Dim dentro del método
Class <Nombre de la Clase >
Sub <Nombre del método>
Dim <Variable Local>
<aquí va el resto del código correspondiente a la
definición del
método>
End
Sub
End Class
Salvo las propiedades que obviamente deben ser variables globales, en
la medida de lo posible hay que declarar a todas las variables lo más
localmente posibles. Es decir, si se puede se declara local; si es necesario,
puede declararse privada; y en última instancia, sólo si es imprescindible, se
declara global.
PRÁCTICA 1
1.
¿Qué ventajas presenta la técnica de POO con respecto a la
programación estructurada?
2.
¿Por qué la técnica de POO recibe ese nombre?
3.
¿Qué es una clase? ¿Qué es un objeto? ¿Cuál es la diferencia
entre ambos?
4.
¿Qué son las
propiedades de un objeto? ¿A qué equivalen en la tecnología de programación
estructurada?
5.
¿Cómo me
refiero a la propiedad de un objeto?
6.
¿Dónde se
declaran? ¿De qué manera? ¿Por qué?
7.
¿A qué se
denomina estado de un objeto?
8.
¿Qué es un
mensaje para un objeto?
9.
¿Qué es un método?
10.
¿Qué es definir una clase? ¿Qué diferencias presenta con crear
un objeto?
11.
¿Qué es la encapsulación y cuál es su función?
12.
¿Qué es la herencia? ¿Qué ventajas presenta?
13.
¿A qué llamamos polimorfismo?
14.
Definir, según la sintaxis del Visual
2010, una clase Colegio que tiene cinco propiedades: Nombre, Especialidad,
CantidadDeAlumnos, ValorDeLaCuota, RequiereUniforme (sí o no); y tres métodos:
Inicializar (se encarga de establecer valores iniciales en “Colegio”, “Título”,
0, 0, “No”, respectivamente para cada propiedad), IngresosMensuales (calcula la
cantidad de dinero que debe ingresar a la escuela por mes) y
IngresoRealPorcentual (dada la cantidad de alumnos morosos, devuelve el
porcentaje de dinero real que ingresa al nivel con respecto al total que
debería percibir si todos abonaran) ¿Qué tipo de método convendría en cada
caso? ¿Por qué?
15.
Definir una clase Nivel que hereda
todas las propiedades y métodos de la clase Colegio y agrega dos nuevas
propiedades Tipo (Jardín, Primaria, Secundaria) y CantidadDeDivisiones; y un
nuevo método PromedioDeAprobados (dada la cantidad total de alumnos aprobados,
devuelve el promedio de aprobados por división)
16.
En un formulario FormColegios crear dos
objetos distintos que pertenezcan a la clase Colegio: CualquierColegio tendrá
los valores iniciales de la clase, y MiColegio, los valores de tu escuela.
Mostrar un cartel que diga “Situación de riesgo” en el caso en que el
porcentaje de ingresos reales sea inferior al 70%.
17.
En el mismo formulario anterior, crear
dos objetos distintos que pertenezcan a esa clase: NivelPrimario para la Primaria y NivelSecundario
para la
Secundaria. Inicializar las propiedades según los datos de tu
colegio. Mostrar en un mensaje cuál es el promedio de alumnos aprobados según
el nivel.
18.
Para estos cuatro últimos ejercicios,
realizar un diccionario de variables: un listado, objeto por objeto, de todas
las variables involucradas, especificando tipo y ámbito.
No hay comentarios.:
Publicar un comentario