Tema 2. Programación Orientada A Objetos
Tema 2. Programación Orientada A Objetos
La programación orientada a objetos (POO) ofrece elementos que facilitan como modularización,
reutilización de piezas de código (no copy/paste) y encapsulamiento (ocultar el estado de los objetos)
Objetos: se puede decir que un objeto es todo aquello que pueda ser identificable dentro de una
especificación de requerimientos o problema y tenga las siguientes características:
Una característica propia de los objetos, es la transparencia entre la implementación a nivel de código y
la funcionalidad que provee un método (no me interesa cómo lo haga, sólo que lo haga).
Clases: las clases son plantillas que agrupan comportamiento (métodos) y estados (atributos) de los
futuros objetos.
Los objetos son instancias de una clase. Usando el símil “variable – tipo” de la programación
estructurada, se entiendo que un objeto es una variable que tiene el comportamiento y estados del tipo
(objeto).
→ Partiendo desde la concepción más simple de un programa en Java, éste se puede escribir a
partir de una sola clase y conforme la complejidad de la aplicación vaya en aumento, muy
probablemente (de hecho lo es) el número de clases va incrementara, se podría entender como
una correlación directa. Por definición cada clase necesita un punto de entrada por donde
comenzará la ejecución del programa, y la clase escrita debe contenerlo como el programa,
rutina o método principal: main() y dentro de este método contiene las llamadas a todas las
subrutinas o demás partes de la clase o incluso de la aplicación en general.
Al hacer la implementación del ejemplo anterior a algo un poco más real y palpable se sugiere como
primer acercamiento un programa sencillo escrito en lenguaje Java que muestre en pantalla un mensaje
de bienvenida a la programación en Java.
/**
* La clase bienvenida construye un programa que
* muestra un mensaje en pantalla
*/ public class
bienvenida {
public static void main(String[] args) {
System.out.println("Hola, ");
System.out.println("bienvenido (a)");
System.out.println("a la programación en Java");}}
La bienvenida es el nombre de la clase principal y por tanto, del archivo que contiene el código fuente
(por convención de Java, el archivo donde se guarda el código fuente deberá tener el mismo nombre de
la clase principal).
Todos los programas en Java tienen un método principal de entrada conocido como main que a su vez
contiene un conjunto de sentencias que significan las instrucciones que deberá ejecutar el programa,
este conjunto de instrucciones o bloque de instrucciones en Java se indican con la utilización de llaves { }.
En el programa contenido en la clase bienvenida el bloque se compone sólo de tres instrucciones de
impresión de pantalla.
Utilización de comentarios
Desde el surgimiento de los lenguajes de programación, junto con ellos, de igual manera nació la
necesidad de hacer anotaciones sobre lo que hace tal instrucción, un método completo o inclusive el
programa entero. Esta necesidad se resolvió con la introducción del soporte de comentarios (notas)
dentro del mismo código fuente que se pueden emplear de distintas formas, por ejemplo recordar para
qué se usó una variable específica, para documentar los valores de retorno de un método, entre muchos
otros.
Los comentarios que se utilizan en Java son del mismo estilo a los empleados en C/C++, así el compilador
al comenzar a hacer su trabajo ignora por completo lo que esté entre estos comentarios ya que no
forman parte del código del programa, sólo son líneas de carácter informativo para el programador
humano.
// Este es un comentario escrito en una sola línea para hacer comentarios breves y concisos. Como se
puede observar el comentario comienza con un par de caracteres del tipo /, no se deja espacio alguna
entre ellos, después de esto se puede comenzar a escribir el cuerpo del comentario de una sola línea.
Cuando hay la necesidad de hacer observaciones muy amplias y que una línea no nos dé el espacio
suficiente se sugiere utilizar comentarios de varias líneas, por ejemplo;
/* Este es un comentario muy amplio y se puede hacer con la utilización de varias líneas sin perder la
continuidad de la idea e indicándole al compilador que ignore por completo todas las líneas que lo
comprenden.
*/ De igual forma que en los comentarios de una sola línea, los comentarios multilínea comienzan con el
par de caracteres /* y terminan con el par de caracteres */.
Además en Java existe un tercer tipo de comentario que se le conoce como “comentario de
documentación”, la función que tienes es que le indica al programa generador de documentación que lo
incluya a él e ignore los demás, por ejemplo:
Como sugerencia sobre los comentarios se debe hacer notar que, la necesidad de escribir comentarios es
para la aclaración de ciertas partes del código que no estén muy claras, por tanto si se exagera en el
número de comentarios se entenderá que el código no es claro y se deberá considerar la necesidad de
reescribirlo para hacerlo comprensible. (ESAD. (s/f))
Identificadores
El identificador es aquella palabra o nombre que el programador le asigna a sus propias variables,
métodos e inclusive nombres de clases, tiene un ámbito de aplicación e injerencia sólo dentro del código
fuente, escrito por el programador humano porque una vez que pasa por el proceso de compilación, el
compilador genera sus propios identificadores más acorde y más óptimos para su propia interpretación
dentro del bytecode.
Como regla general del lenguaje Java se debe definir un identificador antes de ser utilizado, siguiendo las
reglas que Java establece para la creación de identificadores se deberá apegar a lo siguiente:
Se pueden utilizar números (0 al 9). Pero no dejar espacios en blanco, signo de interrogación (?)
o símbolo de porcentaje (%). Un identificador puede contener la longitud que el programador
asigne arbitrariamente o considere necesario para dejar perfectamente claro el propósito del
identificador y qué tipo de dato alojará.
En Java, al ser sensible al contexto, se distinguen los caracteres en mayúscula y minúscula. Así
promedio, Promedio y PROMEDIO serán locaciones de memoria completamente diferentes.
No se puede repetir el mismo identificador para dos variables o cualquier otra parte del código
(nombres de métodos o clases por ejemplo) ya que como se ha mencionado, los identificadores
hacen precisamente eso, identifican de manera única a cada parte del código.
Identificadores autoexplicativos
Son para guiar al usuario (de cualquier tipo) a entender la utilización de dicho identificador sin la
necesidad de utilizar comentarios. Por ejemplo para alojar el resultado del promedio de n números
enteros se sugiere utilizar el identificador resultadoPromedio o resAvg.
Si el identificador está compuesto por dos o más palabras, éstas se agrupan, la primera de ellas se
escribe totalmente en minúscula y la primera letra de las subsecuentes se escribe con mayúscula, por
ejemplo: resultadoPromedioCalificaciones o longitudMedida.
Como se mencionó se puede utilizar el símbolo de guión bajo (_) pero por convención sólo se emplea al
nombrar constantes, ya que estas (igual por convención) deberán escribirse en letra mayúscula y
dificulta la lectura y separación de la misma, por ejemplo: VALOR_GENERAL_ANUAL.
Para poder declarar clases es necesario que la declaración de una clase defina la estructura de la misma.
Debemos crear una clase antes de poder crear objetos (instancias) de esa clase para que se declaren en
la sección TIPO, en la programación orientada a objetos se basa en la programación de clases; a
diferencia de la programación estructurada, que está centrada en las funciones.
Al crear un objeto de una clase, se dice que se crea una instancia de la clase o un objeto propiamente
dicho.
La clase define los atributos y métodos comunes a los objetos de ese tipo, pero luego, cada objeto tendrá
sus propios valores y compartirán las mismas funciones, es decir, la declaración de una clase informa de
los elementos que la conforman.
Posteriormente a ser declarada, una clase debe ser implementada convenientemente, es decir, se debe
escribir el código correspondiente a los procedimientos y funciones que determinan el funcionamiento
de esa clase.
Objetivos
a) Profundizar en el concepto de atributo de una clase e indicar los tipos de atributos en Java.
b) Interpretar el código fuente de una aplicación Java donde aparecen distintos tipos de atributos.
c) Construir una aplicación Java sencilla, convenientemente especificada, que emplee clases con
diferentes tipos de atributos.
Los atributos, también llamados datos o variables miembro son porciones de información que un objeto
posee o conoce de sí mismo. Una clase puede tener cualquier número de atributos o no tener ninguno.
Los tipos simples de Java describían el tamaño y los valores de las variables. Cada vez que se crea una
clase se añade otro tipo de dato que se puede utilizar igual que uno de los tipos simples. Por ello al
declarar una nueva variable, se puede utilizar un nombre de clase como tipo. A estas variables se
conocen como referencias a objeto.
MiPunto p; Esta es una declaración de una variable p que es una referencia a un objeto de la clase
MiPunto, de momento con un valor por defecto de null. La referencia null es una referencia a un objeto
de la clase Object, y se podrá convertir a una referencia a cualquier otro objeto porque todos los objetos
son hijos de la clase Object. (Programación Java, (s/f))
Métodos
Java como todo lenguaje de programación orientado a objetos utiliza los llamados métodos.
Se podría decir que existen 2 grandes tipos de métodos, el primer tipo de método son métodos que
realizan procesos, puedes realizar cualquier operación con ellos, sin embargo el propósito es manipular
variables existentes. El segundo tipo de métodos son los que realizan un proceso o cálculo, y calculan
una variable específica, un ejemplo podría ser un método para obtener el valor de una multiplicación.
Los métodos en java pueden tener parámetros, es decir, que un método puede utilizar variables
predefinidas para ser utilizadas en sus procesos.
Encapsulamiento
Los métodos rodean y esconden el núcleo del objeto de otros objetos en el programa. Al
empaquetamiento de las variables de un objeto con la protección de sus métodos se le llama
encapsulamiento. Típicamente, el encapsulamiento es utilizado para esconder detalles de la puesta en
práctica no importantes de otros objetos. Entonces, los detalles de la puesta en práctica pueden cambiar
en cualquier tiempo sin afectar otras partes del programa.
Modularidad
Es ocultamiento de la información, es decir, un objeto tiene una "interfaz publica" que otros objetos
pueden utilizar para comunicarse con él. Pero el objeto puede mantener información y métodos
privados que pueden ser cambiados en cualquier tiempo sin afectar a los otros objetos que dependan de
ello.
El elemento básico de la programación orientada a objetos en Java es la clase. Una clase define la forma
y comportamiento de un objeto, para crear una clase sólo se necesita un archivo fuente que contenga la
palabra clave reservada class seguida de un identificador legal y un bloque delimitado por dos llaves para
el cuerpo de la clase.
Un archivo de Java debe tener el mismo nombre que la clase que contiene, y se les suele asignar la
extensión ".java". Por ejemplo la clase MiPunto se guardaría en un fichero que se llamase MiPunto.java.
Hay que tener presente que en Java se diferencia entre mayúsculas y minúsculas; el nombre de la clase y
el de archivo fuente han de ser exactamente iguales.
Aunque la clase MiPunto es sintácticamente correcta, es lo que se denomina clase vacía, es decir, una
clase que no hace nada. Las clases típicas de Java incluirán variables y métodos de instancia.
Los programas en Java completos constarán por lo general de varias clases de Java en distintos archivos
fuente.
Una clase es una plantilla para un objeto. Por lo tanto define la estructura de un objeto y su interfaz
funcional, en forma de métodos. Cuando se ejecuta un programa en Java, el sistema utiliza definiciones
de clase para crear instancias de las clases, que son los objetos reales. Los términos instancia y objeto se
utilizan de manera indistinta. La forma general de una definición de clase es:
}
// . . .
}
Los tipos tipo de variable y tipo devuelto, han de ser tipos simples Java o nombres de otras clases ya
definidas. Tanto Nombre de clase, como los nombres de atributo y nombre de método, han de ser
identificadores Java válidos.
Los atributos
Los datos se encapsulan dentro de una clase declarando variables dentro de las llaves de apertura y
cierre de la declaración de la clase, variables que se conocen como atributos. Se declaran igual que las
variables locales de un método en concreto. Por ejemplo, este es un programa que declara una clase
MiPunto, con dos atributos enteros llamados x e y.
class MiPunto {
int x, y;
Los atributos se pueden declarar con dos clases de tipos: un tipo simple Java (ya descritos), y el nombre
de una clase (será una referencia a objeto, véase el punto C.a de este mismo apartado).
Cuando se realiza una instancia de una clase (creación de un objeto) se reservará en la memoria un
espacio para un conjunto de datos como el que definen los atributos de una clase. A este conjunto de
variables se le denomina variables de instancia.
Los métodos: son subrutinas que definen la interfaz de una clase, sus capacidades y comportamiento, un
método ha de tener por nombre cualquier identificador legal distinto de los ya utilizados por los
nombres de la clase en que está definido. Los métodos se declaran al mismo nivel que las variables de
instancia dentro de una definición de clase.
cuerpo_del_método;
}
Por ejemplo el siguiente método devuelve la suma de dos enteros:
En el caso de que no se desee devolver ningún valor se deberá indicar como tipo la palabra reservada
void. Así mismo, si no se desean parámetros, la declaración del método debería incluir un par de
paréntesis vacíos (sin void):
void metodoVacio( ) { };
Los métodos son llamados indicando una instancia individual de la clase, que tendrá su propio conjunto
único de variables de instancia, por lo que los métodos se pueden referir directamente a ellas, el método
inicia para establecer valores a las dos variables de instancia sería el siguiente:
2.6. Sobrecarga
Una de las novedades que uno se encuentra al comenzar a programar en Java (y tambien en otros
lenguajes de la POO) son las ventajas de la sobrecarga y el polimorfismo.
Antes, para quienes veníamos de un lenguaje muy estructurado como Pascal, estos dos conceptos
resultan un poco difusos. Vamos a repasarlos un poco.
Sobrecarga
Imaginemos una clase “Monedero” que modele un monedero que contiene un saldo. Cuando creamos
un monedero, puede que se cree vacío o con una cantidad determinada que nosotros le pasemos:
Cuando invoquemos al constructor de monedero tendremos dos posibilidades, invocarlo con o sin
parámetro, y automáticamente el lenguaje se encargará de utilizar un método u otro según corresponda.
En definitiva:
Creará un segundo objeto, tuMonedero, y este utilizará el valor por defecto, que por defecto es
0 (que es como se inicializó el atributo saldo de la clase).
La conclusión es que, la sobrecarga permite dar nombres iguales a métodos que reciben distintos
parámetros y que, aplicados a un mismo objeto, producirían efectos diferentes. El método a usar se
decide automáticamente según el número de parámetros con el que se invoque.
Programación Java. s/f La instanciación de las clases, los objetos en Java. Consultado el 22 de
julio de 2014 en http://javeritos.blogspot.mx/2013/12/la-instanciacion-de-las-clases-los.html