Subido por Patricio Vasquez Martinez

V1 Contenidos Unidad 1 Semana 1

Anuncio
Taller de Programación Java
Programación orientada a objeto
TECNOLOGÍAS DE LA INFORMACIÓN Y COMUNICACIÓN
Director de Escuela/ Marcelo Lucero Yáñez
ELABORACIÓN
Experto disciplinar / Edgard Cárcamo
Diseñador instruccional / Evelyn Aguilera
VALIDACIÓN
Experto disciplinar / Sergio Rivera
Jefa de diseño instruccional y multimedia / Alejandra San Juan Reyes
DISEÑO DOCUMENTO
Didactic
Taller de Programación Java / Programación orientada a objeto
2
Contenido
Criterio de evaluación: .......................................................................................................... 4
1.
CONCEPTO DE CLASE Y OBJETO ............................................................................ 4
1.1.
CLASE ......................................................................................................................... 5
1.1.1.
CARACTERÍSTICAS DE UNA CLASE. ......................................................................... 6
1.1.2.
CARACTERÍSTICAS DE UN OBJETO. ......................................................................... 7
1.1.2.1. ATRIBUTOS: TIPOS DE DATOS Y VALORES POR DEFECTO ..................................... 8
1.1.2.2. OPERACIONES: OPERADORES Y EXPRESIONES. .................................................. 11
EJEMPLIFICACIÓN ................................................................................................................. 14
2.
PRINCIPIOS DE LA PROGRAMACIÓN ORIENTADA A OBJETOS. ........................ 15
2.1.
ABSTRACCIÓN......................................................................................................... 15
2.2.
POLIMORFISMO ....................................................................................................... 15
2.3.
ENCAPSULAMIENTO................................................................................................ 16
2.4.
HERENCIA ................................................................................................................ 17
EJEMPLIFICACIÓN ................................................................................................................. 18
Taller de Programación Java / Programación orientada a objeto
3
Criterio de evaluación:
•
Construyen clases de objetos a aplicando principios fundamentales de la
programación orientada a objetos, de acuerdo a necesidades utilizando
UML
1. CONCEPTO DE CLASE Y OBJETO
Para comenzar nos remontaremos un poco atrás en el tiempo, en los primeros
modelos de programación estos se desarrollaban de manera estructurada, esto
quiere decir que el código de las aplicaciones se escribía de manera lineal y
secuencial, sin embargo era un tanto complejo adaptarse a este tipo de
programación ya que no se asemejaba mucho a la realidad, es por esto que nace
la programación orientada a objetos, como una necesidad de acercar la
programación al mundo real.
Ahora bien, para explicar paradigma de la programación orientada a objetos
diremos que nuestro mundo, o todo lo que conocemos, está compuesto de
entidades u objetos, como pueden ser: el automóvil, la lavadora, el televisor o el
teléfono, entre muchos otros. El paradigma de programación orientado a objetos
(POO) provee las abstracciones necesarias para poder construir sistemas de
información o Software de una forma más cercana a esta percepción del mundo
real.
Figura 1 Programación Orientada a Objetos
Taller de Programación Java / Programación orientada a objeto
4
Cuando desarrollamos una aplicación en base a la programación orientada a
objetos esta nos permite analizar la aplicación o problema descomponiéndola en
unidades individuales las cuales son los objetos, sin embargo para poder crear
objetos estos requieren primero ser definidos indicando cuáles serán sus
características y que es lo que podrán realizar.
1.1. CLASE
La definición de los objetos es conocida como clase, podemos pensar en los
objetos como casas, las cuales tienen ciertas medidas, formas, colores, ventanas,
puertas, etc. sin embargo, no podemos construir una casa sin primero definir cómo
será la casa, cuáles serán sus medidas y todas las características que esta poseerá,
para esto se define el plano de la casa, lo que equivale a la clase del objeto y al
igual que un plano de una casa en donde desde un plano se pueden construir
muchas casas, desde una clase se pueden construir muchos objetos que
mantengan las características que se definieron en la clase.
Por ejemplo, piense que está intentando construir una aplicación para dibujar
figuras geométricas. El programa debe ser capaz de dibujar y pintar triángulos con
diferentes formas, tamaños y colores, para esto lo primero que debemos realizar es
construir la clase triangulo, la que definirá cuáles serán las características que
compartirán los triángulos y que acciones podrán realizar estos, en este caso la
clase triangulo debiese tener las siguientes características: - lado A, lado B y lado C,
mientras que lo que podría hacer es pintar el triángulo de algún color especifico.
Teniendo nuestra clase definida podemos crear tantos objetos como queramos,
por ejemplo crearemos dos triángulos, uno será un triángulo equilátero al cual le
daremos 3cm en cada uno de sus lados y lo pintaremos de rojo, mientras que al
otro triangulo le daremos 5cm en el lado A y B, mientras que en lado C le daremos
8cm y lo pintaremos verde, esto nos dará como resultado dos objetos a partir de la
clase triángulo, esto quiere decir que tendremos dos Triángulos que comparten las
mismas características pero que sus valores son distintos entre sí.
Figura 2 Representación gráfica de los objetos.
Fuente: Edgard Cárcamo, 2019, para módulo Taller de Programación Java
Taller de Programación Java / Programación orientada a objeto
5
Para resumir, una clase puede definirse como un tipo de datos, cuyas variables son
objetos o instancias de una clase. También, puede decirse que el concepto de
clase es estático y el concepto de objeto es dinámico; ya que, sólo este (el objeto)
sólo existe en tiempo de ejecución. Cada objeto de una clase comparte con el
resto las operaciones, y a la vez, posee sus propios valores para los atributos que
posee: su estado. Las operaciones, también llamados métodos, se usarán tanto
para cambiar el estado de un objeto, como para comunicar objetos entre sí
mediante el paso de mensajes.
1.1.1. CARACTERÍSTICAS DE UNA CLASE.
Como se mencionó anteriormente, las clases son las plantillas para hacer objetos.
Por lo tanto, una clase servirá para definir una serie de objetos con propiedades
(atributos), comportamientos (operaciones o métodos) y semántica común.
Entonces, se debe pensar en una clase como un molde. A través de las clases se
obtienen los objetos.
Es decir, antes de poder utilizar un objeto se debe definir la clase a la que
pertenece, es por esto que a continuación veremos de que se componen las
clases y como las podemos representar. Las clases se componen de:
•
Atributos: son las características que poseerán los objetos, por ejemplo si
estuviésemos definiendo un automóvil sus características serían: color, peso,
largo, ancho, etc. debemos tener en cuenta que cuando definimos las
clases solo se indican las características sin asignar aun valores a estas, en
otras palabras en la clase se define por ejemplo la característica color pero
no se indica cual es el color en específico ya que esto se define al crea al
objeto.
•
Métodos: las funciones miembro de la clase. Son las acciones (u
operaciones) que puede realizar la clase.
El diseño de clases se realiza a través de un Diagrama de Clases con notación UML.
Figura 3 Clase en notación UML
Fuente: Edgard Cárcamo, 2019, para módulo Taller de Programación Java
Taller de Programación Java / Programación orientada a objeto
6
Ahora bien, la representación de la clase Triángulo que se utilizó como ejemplo con
la abstracción expuesta sobre sus atributos y métodos en notación UML sería:
Figura 4 Clase Triángulo en notación UML.
Fuente: Edgard Cárcamo, 2019, para módulo Taller de Programación Java
De acuerdo con la figura 3, el nombre de la clase sería Triángulo, sus atributos:
ladoA, ladoB, ladoC, color y sus métodos: dibujar() y pintar().
Cabe indicar que los atributos que contendrá la clase deben poseer algún tipo de
dato que indique qué valores aceptará y qué operaciones se podrá realizar sobre
él. En este caso los lados serían tipo numérico, por lo que solo aceptarían números y
operaciones matemáticas con ellos, mientras que el color sería texto, por lo que
aceptará caracteres sin posibilidad de aplicar operaciones matemáticas sobre él.
También diremos que los métodos son las operaciones o acciones que puede
realizar la clase por medio de algún algoritmo de programación, el cual podría
necesitar valores de entrada (como argumentos) y devolver – o no -- un valor de
salida. En este caso los métodos serian pintar y dibujar.
1.1.2. CARACTERÍSTICAS DE UN OBJETO.
Un objeto es cualquier entidad representable en un programa. Un objeto en un
sistema posee: una identidad, un estado y un comportamiento.
El estado marca las condiciones de existencia del objeto dentro del programa.
Lógicamente este estado puede cambiar. Un automóvil puede estar detenido, en
marcha, en desperfecto, funcionando, sin gasolina, entre otros.
El comportamiento determina como responde el objeto ante peticiones de otros
objetos. Por ejemplo, un objeto conductor puede lanzar el mensaje arrancar a un
automóvil. El comportamiento determina qué es lo que hará el objeto.
La identidad determina que cada objeto es único aunque tengan el mismo valor.
No existen dos objetos iguales. Lo que sí existe es dos referencias al mismo objeto.
Los objetos se manejan por referencias, existiendo una referencia a un objeto, de
modo que esa referencia permitirá cambiar los atributos del objeto. Incluso puede
Taller de Programación Java / Programación orientada a objeto
7
haber varias referencias al mismo objeto, de modo que si una referencia cambia el
estado del objeto, el resto (lógicamente) mostrarán esos cambios.
Los objetos por valor son los que no usan referencias, y por el contrario, usan copias
de valores concretos. En Java estos objetos son los tipos de datos primitivos: int,
char, byte, short, long, float, double y boolean. El resto son todos objetos (incluidos
los arrays y Strings).
Ahora hablaremos de la visibilidad de los atributos y métodos de un objeto. Tanto
los atributos como los métodos de un objeto pueden tener dos tipos de visibilidad:
público o privado. Esto indica si los atributos y métodos serán solo accesibles dentro
del mismo objeto o si serán accesibles desde otros objetos. Un objeto se podría
representar como dos circunferencias, una interna que permanece oculta al
mundo exterior y que contendría todos los detalles de la implementación del
objeto, y otra circunferencia concéntrica externa, que representa lo que el objeto
muestra al mundo exterior y le permite utilizar para interactuar con él.
Figura 5 Representación de un objeto.
Fuente: Edgard Cárcamo, 2019, para módulo Taller de Programación Java
1.1.2.1.
ATRIBUTOS: TIPOS DE DATOS Y VALORES POR DEFECTO
Ahora que ya sabemos lo que es una clase, un objeto y de que se componen
entonces veremos cómo se definen estas partes de la clase. Un atributo es una
propiedad o característica de una clase que almacena datos de una clase u
objeto dependiendo del momento en que se les utilice.
Entonces, se puede decir también que las variables son los contenedores de los
datos que utiliza un programa. Cada variable ocupa un espacio en la memoria
RAM del computador para almacenar un dato determinado.
En el lenguaje de programación Java, las variables tienen un nombre o
identificador que sólo puede contener letras, números y el carácter de subrayado.
El nombre puede contener cualquier carácter Unicode, sin embargo no pueden
contener espacios ni comenzar por un número.
Taller de Programación Java / Programación orientada a objeto
8
El programador tiene libertad para elegir el nombre de los atributos, los métodos y
de otros elementos de un programa. Existen reglas muy estrictas sobre los nombres
que se utilizan como identificadores de clases, atributos o de métodos.
Todo identificador debe empezar con una letra que puede estar seguida de más
letras o dígitos. Una letra es cualquier símbolo del alfabeto y el carácter ‘_’ (guión
bajo). Un dígito es cualquier carácter entre ‘0’ y ‘9’.
Los identificadores Triángulo, color, ladoA, ladoB, sumaLados son válidos. El
identificador 1lado no sería válido porque empieza con un dígito y no con una
letra.
Cualquier identificador que empiece por una letra seguida de más letras o dígitos
es válido siempre y cuando no forme parte de las palabras reservadas del lenguaje
de programación Java. Java distingue entre letras mayúsculas y minúsculas, esto
significa que los identificadores sumaLados y sumalados son distintos.
Existen unas normas básicas para los identificadores en Java que se deben
respetar:
•
Los nombres de atributos o variables y métodos empiezan siempre con
minúsculas. Si se trata de un nombre compuesto la primera palabra debe
comenzar por minúscula y las siguientes deben comenzar con mayúscula
ejemplo: apellidoPaterno, apellidoMaterno
•
Los nombres de clases empiezan siempre con mayúsculas. En los nombres
compuestos, cada palabra comienza con mayúscula y no se debe utilizar el
guión bajo para separar las palabras. Por ejemplo, Triangulo, Isósceles, o
TriánguloRectángulo son nombres válidos.
•
Los nombres de constantes en Java se escriben mayúsculas. Para nombres
compuestos se utiliza el guión bajo para separar las palabras. Por ejemplo, PI,
LADO, IVA, TOTAL_LADOS son nombres válidos.
Java es un lenguaje de programación fuertemente tipado porque cada tipo de
datos (como entero, carácter, hexadecimal, decimal, entre otros) está predefinido
como parte del lenguaje y todas las constantes o variables definidas para un
programa debe describirse con uno de los tipos de datos.
En Java existen dos categorías de tipos de datos:
1. Primitivos. (int, char, boolean, entre otros)
2. Objeto (tipos creados por el programador)
Los tipos de datos primitivos en Java son valores únicos ya que ellos no tienen
capacidades (tamaños) especiales. Java soporta 8 tipos de datos primitivos:
Taller de Programación Java / Programación orientada a objeto
9
Figura 6 Tipos de datos primitivos en Java.
Fuente: Edgard Cárcamo, 2019, para módulo Taller de Programación Java
Los tipos de datos primitivos se pueden organizar en 4 grupos:
1. Numéricos enteros: byte, short, int y long. Los 4 representan números enteros
con signo.
2. Carácter: char representa un carácter codificado en el sistema Unicode. Los
valores de este tipo de datos siempre deben estar rodeados por comillas
simples.
3. Numérico decimal: float y double representan números decimales en coma
flotante.
4. Lógicos: boolean es el tipo de dato lógico; los dos únicos valores posibles
que puede representar un dato lógico son true y false. true y false son
palabras reservadas de Java.
Por otro lado, están los tipos de datos objeto u Object que son los creados por el
programador
En esta categoría se integra el tipo String que posee propiedades y métodos,
donde el lenguaje de programación Java permite definir un nuevo objeto con el
delimitador de comilla doble (“), por lo que se puede concatenar (unir) texto
utilizando el operador (+) con los nombres de los objetos de tipo String y las
porciones de texto delimitados con (“).
Las palabras reservadas o claves del lenguaje de programación Java (Java
Language Keywords) se muestran en la siguiente figura (para la versión del JDK 8):
Taller de Programación Java / Programación orientada a objeto
10
Figura 7 Palabras clave del lenguaje de programación Java.
Fuente: The Java™ Tutorials (https://docs.oracle.com)
1.1.2.2.
OPERACIONES: OPERADORES Y EXPRESIONES.
Los programas de computador realizan numerosas operaciones aritméticas y
matemáticas de diferente complejidad; en esta sección se mostrará la forma en la
que el lenguaje de programación Java usa operadores y expresiones para resolver
dichas operaciones.
Los operadores fundamentales que utiliza son:
•
Aritméticos, lógicos y relacionales.
•
De manipulación de bits.
•
Condicionales.
•
Especiales.
Java también analiza las conversiones de tipos de datos (cast) y las reglas que
seguirá el compilador cuando diferentes tipos de operadores concurren en una
misma expresión; tales reglas se conocen como prioridad y asociatividad.
Los programas en Java constan de datos, sentencias de programas y expresiones,
estas últimas normalmente representan una ecuación o fórmula matemática; por
ejemplo: 2*ladoIgual+lado; en la que los símbolos más y producto (+, *) son los
operadores de suma y producto; el número 2 y las variables ladoIgual y lado son los
operandos; en síntesis, una expresión es una secuencia de operaciones y
operandos que especifica un cálculo.
Taller de Programación Java / Programación orientada a objeto
11
Cuando se utiliza el operador + entre números o variables se le llama operador
binario debido a que suma dos números. Otro tipo de operador en Java es el
unitario o unario, que actúa sobre un único valor; si la variable x vale 5, -x
equivaldrá -5; el signo negativo (-) indica la resta del operador unitario. Java
soporta un amplio conjunto de operadores unitarios, binarios y de otros tipos.
El operador = asigna el valor de la expresión que se encuentra en la parte derecha
a la variable de la izquierda; por ejemplo:
lado = 8;
celsius = 28;
coordX = 525;
coordY = 725;
La tabla 1 contiene los cinco operadores de asignación adicionales (signo igual
“=”) y que Java proporciona; éstos actúan como una notación abreviada para
expresiones que se utilizan con frecuencia; por ejemplo: si se desea multiplicar 2 por
i, se puede escribir: i = i * 2;
Java proporciona un operador abreviado de asignación (*=) que realiza una
asignación equivalente: i *= 2; equivale a i = i * 2;
Figura 8 Tabla 1 Tipos de operadores de asignación adicionales en Java.
Fuente: Edgard Cárcamo, 2019, para módulo Taller de Programación Java
Los operadores aritméticos en Java sirven para realizar procedimientos
matemáticos básicos y siguen las reglas algebraicas típicas de jerarquía o prioridad
que especifican la precedencia de dichas operaciones.
Por ejemplo, al considerar la siguiente expresión: x + t * 2
De acuerdo con las reglas citadas, la multiplicación se realiza antes que la suma;
por consiguiente, la expresión anterior equivale a: x + (t * 2)
Taller de Programación Java / Programación orientada a objeto
12
En Java, como en la mayoría de los lenguajes, las expresiones dentro del paréntesis
se evalúan primero; después se realizan los operadores unitarios, seguidos por los
operadores de multiplicación, división, resto, suma y resta.
Se puede observar que cuando + y - se utilizan delante de otro operador, actúan
como unitarios más y menos.
+27 //27 significa que es positivo
-9 //9 significa que es negativo
En las siguientes tablas: 2 y 3, se muestran los “operadores aritméticos” y la
“precedencia de operadores matemáticos básicos”:
Figura 9 Tabla 2 Operadores aritméticos en Java.
Fuente: Edgard Cárcamo, 2019, para módulo Taller de Programación Java
Figura 10 Tabla 3 Precedencia de operadores matemáticos básicos en Java.
Fuente: Edgard Cárcamo, 2019, para módulo Taller de Programación Java
Nota: En el siguiente enlace de The Java™ Tutorials puede revisar en detalle todos
los operadores admitidos en Java versión JDK 8:
Taller de Programación Java / Programación orientada a objeto
13
EJEMPLIFICACIÓN
A continuación, te invitamos a revisar el siguiente caso en donde se explican las
clases y sus componentes:
Un restaurant de comida típica chilena desea automatizar la manera de ingresar la
reserva de mesas, permitiendo con esto que los clientes puedan realizar reservas
online por medio de su sitio web. Para poder dar solución a este desafío lo primero
que se pide es determinar que clases son las que participaran de este proceso, al
llevar a cabo un análisis de lo requerido se obtienen las siguientes clases:
Figura 11 Clases
Fuente: Edgard Cárcamo, 2019, para módulo Taller de Programación Java
Al analizar las clases obtenidas podemos determinar la siguiente información:
-
Existen 3 clases distintas las cuales son: Mesa, Reserva y Cliente.
-
La clase Mesa posee los atributos: número el cual recibe valores numéricos,
capacidad que también recibe valores numéricos, piso que es del mismo
tipo de datos que los anteriores y estado (del tipo boolean por lo que su
valor puede ser true o false).
-
La clase mesa posee los métodos realizarMantencion() y habilitar()
-
La clase Cliente posee los atributos correo, nombre y apellido, los cuales son
del tipo carácter, mientras que el teléfono es numérico sin decimales.
-
La clase Cliente posee los métodos realizarReserva() y anularReserva()
-
La clase Reserva posee como atributos un número que identifica cada
reserva como única, la fecha y la hora de la reserva. Además, si nos
detenemos un poco en la mesa y el cliente, podemos ver que estos atributos
no son de tipo primitivo, sino del tipo de datos de las otras clases que se
obtuvieron.
-
Los métodos de la clase Reserva son ingresarReserva y anularReserva
-
También podemos darnos cuenta que todos los atributos de las tres clases
poseen un signo negativo antes de su nombre lo que indica que su
Taller de Programación Java / Programación orientada a objeto
14
visibilidad es privada, mientras que los métodos de las tres clases poseen un
signo + antes de su nombre, lo que indica que son públicos.
2. PRINCIPIOS DE LA PROGRAMACIÓN ORIENTADA A
OBJETOS.
2.1. ABSTRACCIÓN
Es una característica de los seres humanos o la propiedad que considera los
aspectos más significativos o esenciales de un problema y define una solución en
esos mismos términos. Es la etapa crucial de representación de la información en
relación con la interfaz y el usuario; se representa con un tipo definido por el
usuario, con el diseño de una clase que implementa la interfaz correspondiente.
Por lo tanto, una clase en Java u otros lenguajes es un elemento que traduce una
abstracción a un tipo definido por el usuario y combina representaciones de datos
y métodos para manipular esa información en un paquete o librería.
La abstracción posee diversos grados denominados niveles; éstos ayudan a
estructurar la complejidad intrínseca que poseen los sistemas del mundo real; en el
análisis de un sistema hay que concentrarse en qué hace y no en cómo lo hace.
El principio de la abstracción es más fácil de entender con una analogía del
mundo real; por ejemplo: supongamos que necesitamos comprar un computador,
si vamos nosotros a buscar el computador nos fijaremos en características como el
procesador, la memoria ram, la tarjeta gráfica y el almacenamiento, sin embargo,
si enviamos a nuestra madre a comprar el computador, aunque se encuentre
frente a los mismos computadores ella se enfocara en otras características como el
precio, el color y si trae alguna impresora de regalo, esto es la abstracción poder
enfocarse en atributos específicos de un objeto para representarlo según el
contexto en el cual se vaya a utilizar.
2.2. POLIMORFISMO
Es la propiedad que le permite a una operación o función tener el mismo nombre
en diferentes clases y actuar de modo distinto en cada una de ellas; por ejemplo:
se puede abrir una puerta, una ventana, un libro o un cuaderno; en cada caso se
realiza una acción diferente. Entonces, cada clase conoce cómo realizar esa
operación.
En POO, el concepto de polimorfismo implica la capacidad de una operación de
ser interpretada sólo por el propio objeto que lo invoca; desde un punto de vista
Taller de Programación Java / Programación orientada a objeto
15
práctico de ejecución del programa, el polimorfismo se realiza en tiempo de
ejecución, ya que durante la compilación no se conoce qué tipo de objeto, y por
consiguiente, cuál operación fue invocada.
Ahora bien, en la vida real hay numerosos ejemplos de polimorfismo: piense que en
una serviteca o taller mecánico de automóviles existen diferentes marcas, modelos,
cilindrada, tipo de combustible, entre otros, que constituyen una clase. Entonces,
se necesita realizar una operación típica como cambiar el aceite; ésta es la misma,
los principios de trabajo son iguales, sin embargo, dependiendo del auto en
particular, la operación cambiará e incluirá diferentes acciones.
En el lenguaje de programación Java, esta característica facilita la
implementación de varias formas de un mismo método, con los cual se puede
acceder a varios métodos distintos que tienen el mismo nombre.
Existen dos tipos principales de polimorfismo, que son:
1. Por reemplazo: es cuando existen en dos o más clases diferentes métodos
con el mismo nombre, pero haciéndolo de forma diferente.
2. Por sobrecarga: es el mismo nombre de método utilizado varias veces,
ejecutándolo de diferente forma y diferenciándose por el argumento o
parámetro en tipo y en cantidad.
2.3. ENCAPSULAMIENTO
En POO, el encapsulamiento o encapsulación significa reunir en cierta estructura
todos los elementos que en determinado nivel de abstracción, se pueden
considerar de una misma entidad, y considera el proceso de agrupamiento de
datos y operaciones relacionadas bajo una misma unidad de programación, lo
que aumenta la cohesión de los componentes del Software.
En este caso, los objetos que poseen las mismas características y comportamiento
se agrupan en clases que son unidades de programación que encapsulan datos y
operaciones; esto quiere decir que la encapsulación oculta lo que hace un objeto
de lo que hacen otros objetos del mundo exterior, por lo que se denomina también
ocultación de datos.
Un objeto tiene que presentar una “cara” al mundo exterior, de modo que pueda
iniciar operaciones; el televisor tiene un conjunto de botones, que pueden estar en
el mismo aparato o incorporados en un control remoto. Una lavadora de ropa
tiene un conjunto de mandos e indicadores que establecen la temperatura y el
nivel del agua. Los botones del televisor y los mandos de la lavadora constituyen la
comunicación con el mundo exterior, que se denominan interfaces.
Taller de Programación Java / Programación orientada a objeto
16
En esencia, la interfaz de una clase representa un contrato de prestación de
servicios entre ella y los demás componentes del sistema; de este modo, los clientes
de un componente sólo necesitan conocer los servicios que éste ofrece y no cómo
están implementados internamente. Por consiguiente, se puede modificar la
implementación de una clase sin afectar a las restantes relacionadas con ella.
Existe una separación entre la interfaz y la implementación: la primera establece
qué se puede hacer con el objeto; de hecho, la clase actúa como una caja
negra; es estable, la implementación se puede modificar.
Otro ejemplo, se puede encontrar en los automóviles: no se necesita conocer el
funcionamiento de la caja de cambios, el sistema de frenos o la climatización para
que el conductor utilice todos estos dispositivos.
2.4. HERENCIA
En la vida diaria se utiliza el concepto de clases divididas en subclases, que
conduce al de herencia; por ejemplo: la clase animal se divide en mamíferos,
anfibios, insectos, aves, entre otros; la clase vehículo se divide en automóviles,
camiones, autobuses, motocicletas, entre otros.
A su vez, la clase electrodoméstico se divide en lavadora, refrigerador, tostadora,
microondas, y así sucesivamente.
La idea principal de estas divisiones reside en el hecho de que cada subclase
comparte características con la clase de la cual se deriva. Los automóviles,
camiones, autobuses y motocicletas tienen motor, ruedas y frenos; pero, además
de estas características compartidas, cada subclase tiene las propias; los
automóviles, por ejemplo, pueden tener maletero, cinco asientos; los camiones,
cabina y caja para transportar carga, entre otras.
La clase principal de la que derivan las restantes se denomina base, padre o
superclase; las subclases también se denominan derivadas o hijas.
Las clases reflejan que el mundo real contiene objetos con propiedades o atributos
y comportamiento; la herencia manifiesta que dichos objetos tienden a organizarse
en jerarquías; esta jerarquía, desde el punto de vista del modelado, se denomina
relación de generalización o “es-un”. En POO, la relación de generalización se
denomina herencia; cada clase derivada hereda las características de la cual es
base y además añade sus propias características, atributos y métodos
(operaciones). Las clases bases también pueden ser subclases o derivarse de otras
superclases.
Con esto, el programador puede definir una clase Animal que encapsule todas las
propiedades o atributos (altura, peso, número de patas, entre otras) y las
Taller de Programación Java / Programación orientada a objeto
17
operaciones o métodos (comer, dormir, andar, entre otros) que pertenecen a
cada uno. Los animales específicos como mono, perro, gato o loro tienen a su vez
características propias.
Como las técnicas de herencia se representan con la citada relación “es-un”, se
puede decir que Perro es-un Animal con características propias: ladrar, entre otras;
además, comparte con Gato y Loro las características propias de cualquier animal,
como saltar, comer, beber, correr, dormir, entre muchas otras.
Otro ejemplo basado en la industria del automóvil es el siguiente: la clase caja de
cambios hace unos años tenía cuatro marchas adelante y una atrás;
posteriormente se incorporó una delantera y en los últimos años ya se
comercializan automóviles con seis; también se pueden considerar las cajas
automáticas como otra extensión de la clase base.
EJEMPLIFICACIÓN
A continuación, te invitamos a revisar el siguiente caso en donde se explican los
conceptos asociados a los principios de la Programación Orientada a Objetos:
Una empresa de rent a car requiere un sistema para automatizar el proceso de
arriendo de vehículos, la empresa presta el servicio de arriendo de diferentes tipos
de vehículos dentro de los cuales todos comparten las siguientes características,
una placa patente, una marca, modelo, color y kilometraje. Además comparten
ciertas acciones como es arrendar y devolver. Sin embargo algunos tipos de
vehículos poseen ciertas características especiales, como por ejemplo las
camionetas poseen la capacidad del pickup, los automóviles poseen el
rendimiento en km/lts y los furgones poseen la capacidad de pasajeros.
En base a esta información se obtienen las siguientes clases:
Taller de Programación Java / Programación orientada a objeto
18
Figura 12 Empresa de rent a car
Fuente: Edgard Cárcamo, 2019, para módulo Taller de Programación Java
A partir de estas clases las cuales se conectan mediante herencia podemos
determinar la siguiente información:
-
Como camioneta, automóvil y furgón poseían características en común se
creó una súper clase llamada vehículo, la cual contiene todos los atributos y
métodos en común de las otras clases.
-
Camioneta, automóvil y furgón heredan de la clase vehículo por lo que las 3
clases poseen los mismos atributos y métodos que la clase vehículo
-
Cada una de las clases camioneta, automóvil y furgón definen sus propios
atributos que los diferencian de las otras clases.
-
Las tres clases vuelven a definir los métodos arrendar y devolver, esto sucede
debido a que el valor de arriendo y las condiciones del arriendo de cada
una es distinto, es por esto que las clases deben sobrescribir los métodos de
la clase padre, esta sobre escritura es lo que se conoce como polimorfismo
-
Podemos ver que todos los atributos son privados, esto es para mantener la
encapsulación de la clase.
Taller de Programación Java / Programación orientada a objeto
19
Descargar