Está en la página 1de 20

Paradigmas de programacin PARADIGMAS DE PROGRAMACION UNIDAD N 1

Notas de clase

CLASE TEORICA ANALISIS Y PROGRAMACION ORIENTADA A OBJETOS (REPASO DE AED)


INTRODUCCIN A LA PROGRAMACIN CENTRADA EN EL CONCEPTO (ORIENTADA A OBJETOS)
La orientacin a objetos es una forma natural de pensar en relacin con el mundo y de escribir programas de computacin. Mire a su alrededor. Por todas partes: objetos! Personas, animales, plantas, automviles, aviones, edificios, cortadoras de pastos, computadoras y dems. Cada una de ellas tiene ciertas caractersticas y se comporta de una manera determinada. Si las conocemos, es porque tenemos el concepto de lo que son. Conceptos persona, objetos persona. Los seres humanos pensamos en trminos de objetos. Tenemos la capacidad maravillosa de la abstraccin, que nos permite ver una imagen en pantalla como personas, aviones, rboles y montaas, en vez de puntos individuales de color. Todos estos objetos tienen algunas cosas en comn. Todos tienen atributos, como tamao, forma, color, peso y dems. Todos ellos exhiben algn comportamiento. Un automvil acelera, frena, gira, etctera. El objeto persona habla, re, estudia, baila, canta ... Los seres humanos aprenden lo relacionado con los objetos estudiando sus atributos y observando su comportamiento. Objetos diferentes pueden tener muchos atributos iguales y mostrar comportamientos similares. Se pueden hacer comparaciones, por ejemplo, entre bebes y adultos, entre personas y chimpancs. Automviles, camiones, pequeos carros rojos y patines tienen mucho en comn. La programacin orientada a objetos (POO) hace modelos de los objetos del mundo real mediante sus contrapartes en software. Aprovecha las relaciones de clase, donde objetos de una cierta clase, como la clase de vehculos, tienen las mismas caractersticas. Aprovecha las relaciones de herencia, donde clases recin creadas de objetos se derivan heredando caractersticas de clases existentes, pero tambin poseyendo caractersticas propias de ellos mismos. Los bebes tienen muchas caractersticas de sus padres, pero ocasionalmente padres de baja estatura tienen hijos altos. La programacin orientada a objetos nos proporciona una forma ms natural e intuitiva de observar el proceso de programacin, es decir haciendo modelos de objetos del mundo real, de sus atributos y de sus comportamientos. POO tambin hace modelos de la comunicacin entre los objetos. De la misma forma que las personas se envan mensajes uno al otro los objetos tambin se comunican mediante mensajes. La POO encapsula datos (atributos) y funciones (comportamiento) en paquetes llamados objetos; los datos y las funciones de un objeto estn muy unidos. Los objetos tienen la propiedad de ocultar la informacin. Esto significa que aunque los objetos puedan saber cmo comunicarse unos con otros mediante interfaces bien definidas, a los objetos por lo regular no se les est permitido saber cmo funcionan otros objetos. Los detalles de puesta en prctica quedan ocultos dentro de los objetos mismos. (Casi estamos diciendo que existe entre ellos el respeto a la intimidad ...) A esto se le llama Encapsulamiento.

QUE ES LA PROGRAMACION ORIENTADA A OBJETOS


Es una tcnica o estilo de programacin que: Utiliza objetos como bloque esencial de construccin. Los programas se organizan como colecciones de objetos que colaboran entre s envindose mensajes. Solo se dispone de objetos que colaboran entre s. Por lo tanto un programa orientado a objetos viene definido por la ecuacin: Objetos + Mensajes = Programa Facilita la creacin de software de calidad debido a que potencia el mantenimiento, la extensibilidad y la reutilizacin del software generado bajo este paradigma. Trata de amoldarse al modo de pensar del hombre y no al de la mquina.

Paradigmas de programacin

Notas de clase

Objetos
Es el elemento fundamental de la programacin orientada a objetos. Es una entidad que posee atributos y mtodos. Los atributos definen el estado de mismo y pueden ser datos simples u otros objetos. Los mtodos definen su comportamiento y son funciones o procedimientos estndar de programacin, especifican la forma en que se controlan los datos de un objeto. Cada objeto forma parte de una organizacin, no es un ente aislado, sino que forma parte de una organizacin jerrquica o de otro tipo. Qu son objetos en POO? La respuesta es cualquier entidad del mundo real que se pueda imaginar: Objetos fsicos Automviles en una simulacin de trfico. Aviones en un sistema de control de trfico areo. Componentes electrnicos en un programa de diseo de circuitos. Animales mamferos. Elementos de interfaces grficos de usuarios Ventanas. Objetos grficos (lneas, rectngulos, crculos). Mens. Estructuras de datos Vectores. Listas. Arboles binarios. Tipos de datos definidos por el usuario Nmeros complejos. Hora del da. Puntos de un plano. Como ejemplo de objeto, podemos decir que una ventana es un objeto que puede tener como atributos: nombre, alto, ancho, etc. y como mtodos: crear la ventana, abrir la ventana, cerrar la ventana, mover la ventana, etc.

nombre alto 2 cm. ancho 4 cm. 8cm. Objeto 1 Objeto 2 10 cm. Objeto 3

VentanaA 8 cm.

VentanaB 9 cm.

VentanaC

Mensajes
Un objeto solo no es muy til. Un objeto aparece por lo general como un componente de un programa donde aparecen muchos objetos. Mediante la interaccin de estos objetos los programadores consiguen funcionalidades complejas. Los objetos se comunican los unos con los otros mediante el paso de mensajes. Un mensaje es simplemente una peticin de un objeto a otro para que ste se comporte de una determinada manera, ejecutando uno de sus mtodos. Un mensaje consta de 3 partes: El objeto que recibe el mensaje (receptor), El nombre del mtodo a realizar (selector) . Debe ser un mtodo del receptor. 0 o ms argumentos necesitados por el mtodo. La figura 1. Representa un objeto A (emisor) que enva un mensaje Test al objeto B (receptor). 2

Paradigmas de programacin

Notas de clase

Mensaje Test Objeto A (objeto emisor) Objeto B (objeto receptor) Resultados (de la ejecucin del mtodo Test) Figura 1. Paso de mensajes entre objetos.
Usando el ejemplo anterior de ventana, podramos decir que algn objeto de Windows encargado de ejecutar aplicaciones, por ejemplo, enva un mensaje a nuestra ventana para que se abra. En este ejemplo el objeto emisor es un objeto de Windows y el objeto receptor es nuestra ventana, el mensaje es la peticin de abrir la ventana y la respuesta es la ejecucin del mtodo abrir ventana.

Clases
Una clase es simplemente un modelo que se utiliza para describir uno o ms objetos el mismo tipo. Cada vez que se construye un objeto de una clase, se crea una instancia de esa clase. Por consiguiente, los objetos son instancias de clases. En general, los trminos objetos e instancias de una clase se pueden utilizar indistintamente. Una clase puede tener muchas instancias y cada una es un objeto independiente. Siguiendo con el ejemplo de ventana, el modelo o clase para todas las ventanas sera: Clase ventana Caractersticas: nombre, alto, ancho. Responsabilidades: crear, abrir, cerrar, cambiar tamao. Objetos de tipo ventana

nombre alto 2 cm. ancho 4 cm. 8cm. Objeto 1 Objeto 2 10 cm. Objeto 3

VentanaA 8 cm.

VentanaB 9 cm.

VentanaC

CARACTERISTICAS
Abstraccin
La abstraccin se define como la extraccin de las propiedades esenciales de un concepto. Permite no preocuparse de los detalles no esenciales. Implica la identificacin de los atributos y mtodos de un objeto. Es la capacidad para encapsular y aislar la informacin de diseo y ejecucin. Con la abstraccin logramos identificar los componentes bsicos del objeto. Por ejemplo: si se solicita calcular y mostrar la superficie de una ventana, podramos decir que como atributos esenciales tendra alto y ancho, con estos datos podemos calcular la superficie, pero para este ejercicio no nos interesara ni el color ni la textura de la misma, si bien estos ltimos son tambin atributos de la ventana no son esenciales para el problema que estoy considerando.

Encapsulamiento
Es el mecanismo por el cual los objetos protegen sus variables bajo la custodia de sus mtodos. De esta manera el usuario puede ver los objetos como cajas negras que proporcionan servicios.

Paradigmas de programacin

Notas de clase

Toda la informacin relacionada con un objeto determinado est agrupada de alguna manera, pero el objeto en s es como una caja negra cuya estructura interna permanece oculta, tanto para el usuario como para otros objetos diferentes, aunque formen parte de la misma jerarqua. La informacin contenida en el objeto ser accesible slo a travs de la ejecucin de los mtodos adecuados. Este es el segundo paso que tenemos que hacer para definir la estructura del objeto. Una vez que con la abstraccin identificamos atributos y mtodos tenemos que definir la accesibilidad de los mismos, por ejemplo: los atributos siempre deberamos resguardarlos hacindolos privados a otros objetos, al igual que los mtodos de proceso interno que requiera el objeto, pero todos los mtodos que sirven de comunicacin con otros, por ejemplo los que devuelven el estado del objeto deberan ser pblicos, es decir accesibles por otros objetos.

Herencia
Nosotros vemos de manera natural nuestro mundo como objetos que se relacionan entre s de una manera jerrquica. Por ejemplo, un perro es un mamfero, y los mamferos son animales, y los animales seres vivos... La herencia es la propiedad que permite a los objetos construirse a partir de otros objetos. El concepto de herencia est presente en nuestras vidas diarias donde las clases se dividen en subclases. As por ejemplo, las clases de animales se dividen en mamferos, anfibios, insectos, pjaros, etc. La clase de vehculos se divide en automviles, autobuses, camiones, motocicletas, etc. El principio de este tipo de divisin es que cada subclase comparte caractersticas comunes con la clase de la que se deriva. Los automviles, camiones autobuses y motocicletas -que pertenecen a la clase vehculo- tienen ruedas y un motor; son las caractersticas de vehculos. Adems de las caractersticas compartidas con otros miembros de la clase, cada subclase tiene sus propias caractersticas particulares: autobuses, por ejemplo, tienen un gran nmero de asientos, un aparato de televisin para los viajeros, mientras que las motocicletas tienen dos ruedas, un manillar y un asiento doble. Del mismo modo, las distintas clases de un programa se organizan mediante la jerarqua de clases. La representacin de dicha organizacin da lugar a los denominados rboles de herencia:

Mediante la herencia una clase hija puede tomar determinadas propiedades de una clase padre. As se simplifican los diseos y se evita la duplicacin de cdigo al no tener que volver a codificar mtodos ya implementados. Al acto de tomar propiedades de una clase padre se denomina heredar. La idea de herencia se muestra en la figura 2. Observen en la figura que las caractersticas A y B que pertenecen a la clase base, tambin son comunes a todas las clases derivadas, y a su vez estas clases derivadas tienen sus propias caractersticas. La herencia impone una relacin jerrquica entre clases en la cual una clase hija hereda de su clase padre. Si una clase slo puede recibir caractersticas de otra clase base, la herencia se denomina herencia simple. Si una clase recibe propiedades de ms de una clase base, la herencia se denomina herencia mltiple.

Paradigmas de programacin Clase Base

Notas de clase

Figura 2. Herencia

Caractersticas

A B

A B C

A B D E Clases Derivadas

A B F

Como ejemplo, supongamos que tenemos que registrar los datos de alumnos y profesores, para ello vamos a analizar el problema y refinar la solucin en varios pasos: Primer paso: Identificamos las caractersticas esenciales para cada entidad. Alumno Profesor Nombre Nombre Domicilio Domicilio Telefono Telefono Legajo Legajo Carrera Titulos Materias Cursos Segundo paso: Si observamos, los dos tienen caractersticas en comn: Nombre, Domicilio y Telefono que se corresponden con los datos personales de cualquier persona, y datos particulares para el alumno y el docente. Entonces podramos escribir los atributos de la siguiente forma: Alumno Profesor Datos personales Datos personales Datos del alumno Datos del profesor Tercer paso: Si agrupamos los datos personales en una clase llamada Persona con los datos comunes a las dos entidades, formaremos lo siguiente:

Persona
Datos Personales Alumno Es una persona (porque tiene datos de persona) Profesor Es una persona (porque tiene datos de persona)

Tiene datos del alumno

Tiene datos del profesor

Cuarto paso: Al completar las caractersticas de todas las clases, vamos a observar que hemos ahorrado caractersticas, ya que en el primer paso haba caractersticas que se repetan en las dos entidades y ahora hay tres entidades en donde cada una tiene las caractersticas que le corresponden sin repeticin, pero alumno y profesor van a heredar de persona las caractersticas que le correspondan.

Persona
Nombre Domicilio Telefono Alumno Hereda los datos de persona Legajo Carrera Materias Profesor Hereda los datos de persona Legajo Titulos Cursos 5

Paradigmas de programacin Polimorfismo

Notas de clase

Dentro del mbito de la programacin orientada a objetos, podramos definir al polimorfismo formalmente diciendo: Dos objetos son polimorfitos, respecto de un conjunto de mensajes, si ambos son capaces de responderlos. En otras palabras podemos decir que si dos objetos son capaces de responder al mismo mensaje, aunque sea haciendo cosas diferentes, entonces son polimorfitos respecto de ese mensaje. Por ejemplo, supongamos que en un programa debemos trabajar con figuras geomtricas y construimos algunos objetos que son capaces de representar un rectngulo, un triangulo y un circulo. Si nos interesa que todos puedan dibujarse en la pantalla, podemos dotar a cada uno de un mtodo llamado dibujar que se encargue de realizar esta tarea y entonces vamos a poder dibujar tanto un circulo, como un cuadrado o un triangulo simplemente envindole al mensaje dibujar al objeto que queremos mostrar en la pantalla. En otras palabras, vamos a poder hacer X.dibujar() sin importar si X es un cuadrado un circulo o un triangulo, porque al fin y al cabo, todos pueden responder a ese mensaje. En ese caso decimos que tanto los objetos circulo, como los triangulo y los cuadrado son polimorfitos respecto del mensaje dibujar. Es importante notar que no es lo mismo dibujar una figura que otra, seguramente, cada figura implementa esa mtodo de modo diferente. Otro ejemplo: supongamos que en un sistema de un banco tenemos objetos que representas cuentas corrientes y cajas de ahorro. Si bien son diferentes, en ambas pueden hacerse depsitos y extracciones, entonces podemos hacer que cada objeto implemente un mtodo extraer y uno depositar para que puedan responder a esos mismos mensajes. Sin duda, van a estar implementados de modo diferente porque no se hacen los mismos pasos para extraer o depositar dinero de una cuenta corriente que de una caja de ahorro, pero ambos objetos van a poder responder e esos mensajes y entonces sern polimorfitos entre si respecto del conjunto de mensajes formado por depositar y extraer. La gran ventaja es que ahora podemos hacer X.depositar() y confiar en que se realizara un depsito en la cuenta que corresponde sin que tengamos que saber a priori si X es una cuenta corriente o una caja de ahorro. Otro ejemplo: un usuario de un sistema tiene que imprimir un listado de sus clientes, el puede elegir imprimirlo en el monitor, en la impresora, en un archivo en disco o en una terminal remota. De esta forma el mensaje es imprimir el listado pero la respuesta la dar el objeto que el usuario desee, el monitor, la impresora, el archivo o la terminal remota. Cada uno responder con mtodos (comportamientos) diferentes. Mas adelante, al analizar en profundidad el mecanismo de herencia, vamos a ver que Java posee una forma bastante simple que permite resolver el polimorfismo en tiempo de ejecucin, o sea, decidir a que objeto hay que enviarle el mensaje en el momento en que el programa se ejecuta.

RELACIONES ENTRE OBJETOS


Durante la ejecucin de un programa, los diversos objetos que lo componen han de interactuar entre s para lograr una serie de objetivos comunes. Existen varios tipos de relaciones que pueden unir a los diferentes objetos, pero entre ellas destacan las relaciones de: asociacin, agregacin / composicin, y generalizacin / especializacin.

Relaciones de Asociacin
Seran relaciones generales, en las que un objeto realiza llamadas a los servicios (mtodos) de otro, interactuando de esta forma con l. Representan las relaciones con menos riqueza semntica.

Aplicacion
Solicita el legajo a.getLegajo()

Alumno a
Legajo = 10000

Responde 10000

Relaciones de Agregacin / Composicin (clientela) (tiene un)


Muchas veces una determinada entidad existe como conjuncin de otras entidades, como un conglomerado de ellas. La orientacin al objeto recoge este tipo de relaciones como dos conceptos; la agregacin y la composicin. En este tipo de relaciones un objeto componente se integra en un objeto compuesto.

Paradigmas de programacin

Notas de clase

La diferencia entre agregacin y composicin es que mientras que la composicin se entiende que dura durante toda la vida del objeto componedor, en la agregacin no tiene por qu ser as. Esto se puede implementar como un objeto (objeto compuesto) que cuenta entre sus atributos con otro objeto distinto (objeto componente).

Venta

Tiene: Numero, Fecha, Cliente, Productos, Total


Tiene un

Cliente

Producto
Tiene uno o ms

Relaciones de Generalizacin/Especializacin (herencia) (es un)


A veces sucede que dos clases tiene muchas de sus partes en comn, lo que normalmente se abstrae en la creacin de una tercera clase (padre de las dos) que rene todas sus caractersticas comunes. El ejemplo ms extendido de este tipo de relaciones es la herencia, propiedad por la que una clase (clase hija) recoge aquellos mtodos y atributos que una segunda clase (clase padre) ha especificado como "heredables". Este tipo de relaciones es caracterstico de la programacin orientada a objetos. En realidad, la generalizacin y la especializacin son diferentes perspectivas del mismo concepto, la generalizacin es una perspectiva ascendente (bottom-up), mientras que la especializacin es una perspectiva descendente (top-down).

Persona

Alumno
Es un Es un

Docente

RESUMEN
Como vimos anteriormente, el anlisis de un problema es el paso ms importante para resolver un problema, existen varias formas de plantear las soluciones, pero hay dos grandes formas que se estn utilizando hoy en da, que son el anlisis estructurado y el orientado a objetos, el primero se est dejando de usar, sin embargo an quedan muchos sistemas resueltos bajo esta ptica que hay que mantener o actualizar. Y la segunda forma es la que nosotros vamos a usar ya que es la tendencia del mercado, es la que mejor rendimiento tiene, se est usando desde hace varios aos y es la que tiene mayor soporte en cuanto a tecnologas de anlisis, diseo y desarrollo de software. A continuacin vamos a realizar una breve comparacin entre la programacin estructurada y la orientada a objetos que nos servir para entender mejor como tendremos que resolver los problemas bajo la ptica orientada a objetos.

Paradigmas de programacin Programacin estructurada

Notas de clase

La programacin estructurada tiende a ser orientada a la accin. Los programadores se concentran en escribir funciones, que son grupos de acciones que ejecutan alguna tarea comn y que se agrupan para formar programas. La unidad fundamental de la programacin es la funcin. Es cierto que los datos son importantes, pero la ptica es que los datos son materia prima para las acciones que las funciones ejecutan. Semnticamente las acciones son verbos. Los verbos en una especificacin de sistema ayudan al programador a determinar el conjunto de funciones que juntas funcionarn para ponerlo en marcha.

Programacin orientada a objetos


La programacin orientada a objetos como su nombre lo indica est orientada al objeto (concepto). El concepto se implementa en clases (class). La clase es la unidad bsica de programacin. Es una unidad que contiene los atributos y todas las funciones necesarias a su tratamiento. Entonces cada clase contiene datos junto con un conjunto de funciones que manipula dichos datos. Los componentes de datos de una clase se llaman datos miembros o atributos. El comportamiento de la clase se implementa mediante funciones miembro. El foco de atencin est sobre los objetos, en vez de sobre las funciones. Los sustantivos en una especificacin de sistema ayudan al programador a determinar el conjunto de clases, a partir de las cuales sern creados los objetos que funcionarn conjuntamente para poner en prctica el sistema. Es muy importante que a la hora de analizar un problema utilicemos sustantivos y no verbos. A continuacin resolveremos un problema bajo la ptica orientada a objetos: PROBLEMA Dado el valor de los tres lados de un tringulo, calcular el permetro. ANALISIS 1. Identificar el objeto: identificar la entidad que engloba al problema, en nuestro ejemplo es el tringulo. 2. Identificar sus caractersticas: podemos decir que todo tringulo tiene como datos esenciales los tres lados, adems, nuestro problema en particular necesitar el valor del permetro, que es un datos calculable a partir de los tres lados y que puede figurar como atributo o no dependiendo si se quiere guardar su estado en el objeto. Como nuestro enunciado no nos restringe la forma de implementarlo vamos a definir como caractersticas los tres lados y el permetro. 3. Identificar sus responsabilidades: las responsabilidades a elegir generalemente dependern de las operaciones que podemos realizar con los atributos, entonces podemos enumerar: Inicializar los atributos: Inicializar en 0, por ejemplo, los lados y el permetro. Ingresar los lados: Se ingresa el valor de cada lado. Mostrar los lados: Mostrar el valor de los lados. Calcular el permetro: formula que devuelve el permetro del tringulo. Mostrar el permetro: Mostrar el valor del permetro. Graficando el resultado

Clase caractersticas

Triangulo Lado1, Lado2, Lado3, Permetro

Responsabilidades

Inicializar_Atributos () Cargar_Lados () Mostrar_Lados () Calcular_Perimetro () Mostrar_Perimetro ()

Paradigmas de programacin

Notas de clase

HERENCIA

La herencia es la propiedad que permite a los objetos construirse a partir de otros objetos. Permite la reutilizacin de cdigo ya que se puede reutilizar los atributos y mtodos de otras clases.

Alumno

Profesor

Nombre Domicilio Telefono Legajo Carrera Materias

Nombre Domicilio Telefono Legajo Titulos Cursos

Aplicando herencia

Persona Nombre Domicilio Telefono Alumno Profesor Hereda los datos Hereda los datos de persona de persona Legajo Legajo Carrera Titulos Materias Cursos

La herencia ms elemental est formada por una clase llamada base, padre, ancestro,etc. y una clase llamada derivada, subclase, hija, descendiente, etc. que hereda las caratersticas y comportamientos de la clase base.

Persona
Es una Persona

Clase Base Es una Persona

Alumno

Clase Derivada

Docente

Clase Derivada

Las distintas clases de un programa se organizan mediante la jerarqua de clases.

Persona

Diseo descendente (TopDown), por especializacin

De General

Alumno

Alumno Universitario

A Particular

Tipos de herencia: Simple: Una clase slo puede recibir caractersticas de otra clase base. Mltiple : Una clase recibe propiedades de ms de una clase base.

Herencia en Java
9

Paradigmas de programacin

Notas de clase

Para aplicar herencia, primero debemos tener creada la clase base y luego crear la clase derivada. Clase Base: Es una clase simple de java, puede ser abstracta o no. Es conveniente que los atributos de la misma sean protected, para que las clases derivadas puedan tener acceso a ellos. Clase Derivada : Es una clase que debe usar la palabra reservada extends: Ejemplo: class Alumno extends Persona { Atributos Mtodos } Recibe por herencia, todos los miembros de la clase base, pero solo puede acceder a aquellos que estn publicados en la clase base, es decir los miembros, public, protected o friendly. Para referenciar a los miembros de la clase base se utiliza la palabra reservada super, generalmente sta se usa si los miembros de la clase base se llaman de la misma forma que los de la clase derivada, sino, no hace falta usar la palabra super. No se heredan los miembros estticos de la clase base. No se heredan los contructores de la clase base. Por lo tanto en el constructor de la clase derivada, en la primera lnea del mismo, hay que invocar al constructor de la clase base con la palabra super y la cantidad de parametros que requiera el constructor, esto es as porque primero se debe crear la clase base y por ltimo la clase derivada.

Persona

dni, nombre, telefono

Persona() Persona (d, n, t) dni = d nombre = n telefono t

Alumno

legajo, promedio

Alumno() Alumno (l, d, n, t, p) super( d, n, t) legajo = l promedio = p

Ejercicio: diagrama de clases

Persona
dni, nombre, telefono

Alumno
Es una persona legajo, promedio

Aplicacion

Persona (), Persona (d, n, t), setDni (x), setNombre (x), setTelefono (x), getDni(), getNombre(), getTelefono(), toString()

Alumno (), Alumno (l, d, n, t, p), setLegajo (x), setPromedio (x), getLegajo(), getPromedio(), toString()

main();

10

Paradigmas de programacin

Notas de clase

Implementacin en java
//Persona.java class Persona { protected long dni; protected String nombre; protected String telefono; public Persona() { dni = 0; nombre = ; telefono = 0; } public Persona(long l, String n, String t) { dni = d; nombre = n; telefono = t; } public void setDni(long d) { dni = d; } public void setNombre(String n) { nombre = n; } public void setTelefono(String t) { telefono = t; } public long getDni() { return dni; } public String getNombre() { return nombre; } public String getTelefono() { return telefono; } public String toString() { String aux; aux = dni+ , +nombre+, +telefono; return aux; } }//fin de la clase //Alumno.java class Alumno extends Persona { private int legajo; private float promedio; public Alumno() { super (); //llama al constructor de persona legajo = 0; promedio = 0; } public Alumno(int l, long d, String n, String t, float p) { super (d, n, t); //llama al constructor de persona legajo = l; 11

Paradigmas de programacin
promedio = p; } public void setLegajo(int l) { legajo = l; } public void setPromedio(float p) { promedio = p; } public int getLegajo() { return legajo; } public float getPromedio() { return promedio; } public String toString() { String aux; aux = legajo+ , ;

Notas de clase

//para mostrar los atributos de persona se pueden tomar directamente aux += dni + , +nombre + , +telefono; //atributos de persona //o se puede llamar al mtodo toString de persona que trae el String ya cargado //aux += super.toString(); aux += +, +promedio; return aux; } }//fin de la clase //Aplicacin.java import java.io.*; import In; class Aplicacion { public static void main (String args) { //declara dos referencias a objetos alumno Alumno alu1, alu2; //crea el primer objeto alu1 = new Alumno(); //llama al constructor sin argumentos

int l; long d; String n, t; float p; //carga valores para el alumno 2 System.out.print(Ingrese el legajo del alumno : ); l = In.readInt(); System.out.print(Ingrese el dni del alumno : ); d = In.readLong(); System.out.print(Ingrese el nombre del alumno : ); n = In.readLine(); System.out.print(Ingrese el telefono del alumno : ); t = In.readLine(); System.out.print(Ingrese el promedio del alumno : ); p = In.readFloat(); //crea el segundo objeto alu2 = new Alumno(l, d, n, t, p); //cargamos el primer objeto System.out.print(Ingrese el l = In.readInt(); System.out.print(Ingrese el d = In.readLong(); System.out.print(Ingrese el n = In.readLine(); System.out.print(Ingrese el t = In.readLine(); //llama al constructor con argumentos

legajo del alumno : ); dni del alumno : ); nombre del alumno : ); telefono del alumno : ); 12

Paradigmas de programacin
System.out.print(Ingrese el promedio del alumno : ); p = In.readFloat(); alu1.setLegajo (l); alu1.setDni(d); alu1.setNombre (n); alu1.setTelefono (t); alu1.setPromedio(p);

Notas de clase

//mtodo de persona heredado por alumno //mtodo de persona heredado por alumno //mtodo de persona heredado por alumno

//muestra los datos usando el toString() System.out.printl(Los datos del primer alumno son: + alu1.toString()); System.out.printl(Los datos del segundo alumno son: + alu2.toString()); } }//fin clase aplicacion //usando vectores de objetos //Aplicacin2.java import java.io.*; import In; class Aplicacion2 { public static void main (String args) { //declara dos referencias a objetos alumno Alumno a[]; int n, i, l; long d; String n, t; float p;

System.out.print(Ingrese el tamao del vector : ); n = In.readInt(); //crea el vector de referencias a = new Alumno[n]; //carga los alumnos for (i = 0; i < a.length; i++) { System.out.print(Ingrese l = In.readInt(); System.out.print(Ingrese d = In.readLong(); System.out.print(Ingrese n = In.readLine(); System.out.print(Ingrese t = In.readLine(); System.out.print(Ingrese p = In.readFloat();

el legajo del alumno : ); el dni del alumno : ); el nombre del alumno : ); el telefono del alumno : ); el promedio del alumno : );

//crea el objeto a[i] = new Alumno(l, d, n, t, p); } //muestra los alumnos System.out.printl(Los datos de los alumnos son: ); for (i = 0; i < a.length; i++) System.out.printl(Alumno +(i+1)+ : + a[i].toString()); } }//fin clase aplicacion

POLIMORFISMO
13

Paradigmas de programacin

Notas de clase

El polimorfismo es la propiedad de los objetos de responder a los mismos mensajes de distintas formas. (mismo mensaje) Imprimir listado Imprimir( )

Objeto Usuario

Dispositivo

Monitor

Impresora (distintos objetos)

Terminal remota

Permite mejorar la implementacin de los programas. Por ejemplo, la implementacin del ejemplo anterior sin usar polimorfismo, implicara crear la cantidad de objetos que podra necesitar el usuario, si bien el mismo solo va a usar uno por vez, tiene que tenerlos a todos en la memoria para que cuando requiera el listado correspondiente, tenga acceso a cualquier salida. En cambio si se utiliza polimorfismo, en memoria slo se requerir en forma permanente una referencia al dispositivo (genrico) y cuando el usuario decida imprimir el listado, elegir en que dispositivo lo har (monitor, impresora o terminal remota), por lo tanto en tiempo de ejecucin se decide cual es el objeto que estar activo en el momento de la impresin, dejando en memoria solo el objeto que se requiera y no los n posibles.

Implementacin sin polimorfismo Objeto Usuario Monitor Imprimir1( ) Impresora (distintos mensaje) Imprimir2( )

Implementacin con polimorfismo Objeto Usuario Imprimir listado

Dispositivo

Imprimir( ) Terminal remota Imprimir3( ) (3 objetos en memoria) Monitor (un objeto en memoria)

Polimorfismo en Java En java, hay ciertos conceptos que se van a usar para aplicar polimorfismo, ellos son: Clases abstractas : Son clases genricas, sirven para agrupar clases del mismo gnero, no se pueden instanciar, es decir no se pueden crear objetos a partir de ellas, ya que representan conceptos tan generales que no se puede definir como ser la implementacin de la misma. Es por eso que dichas clases llevan mtodos que se llaman abstractos, que no tienen implementacin. Sintaxis: Acceso abstract class NombreClase { ... } por ejemplo: public abstract class Dispositivo { ... 14

Paradigmas de programacin
} En java una clase abstracta debe tener al menos un mtodo abstracto.

Notas de clase

Mtodos abstractos : Mtodos que no tienen implementacin, Se utilizan para recibir los mensajes en comun. No tiene implementacin porque en el nivel donde se definen no hay informacin suficiente para implementarlos. En los prximos niveles de la jerarqua se pueden implementar, para ello deben ser redefinidos en niveles posteriores. Sintaxis: Acceso abstract tipo NombreMetodo (parametros); por ejemplo: public abstract void Imprimir(); Mtodos redefinidos : Mtodos que tienen la misma firma (tipo, nombre y argumentos) en los distintos niveles de una jerarqua. Base Int metodo (int a)

Derivada1

Int metodo (int a)

Derivada2 Int metodo (int a)

Implementacin en java 1. Disear e implementar las clases: Disear una jerarqua de clases con las clases que intervendrn en el polimorfismo, dicha jerarqua debe tener una clase abstracta como clase base y tantas clases derivadas de ella, como haga falta. 2. Elegir l o los mtodos que recibirn el mismo mensaje, definirlo en la clase base como abstracto y redefinirlo en las clases derivadas con la implementacin correspondiente. 3. En la clase usuaria, puede ser la que lleve el mtodo main(), realizar lo siguiente: 1. Definir una variable de la clase base abstracta 2. Solicitarle al usuario que elija que objeto va a crear 3. Crear el objeto de acuerdo a la opcin del usuario, la referencia de dicho objeto se guarda en la variable crada en primera instancia. Por ejemplo:

15

Paradigmas de programacin
Usando un solo objeto polimrfico Dispositivo d; char c; // elija el dispositivo c = In.readChar(); if (c == M) d = new Monitor(...); else if (c == I) d = new Impresora(...); else d = new Terminal(...); d.Imprimir();

Notas de clase

Usando varios objetos polimrfico (vector) Dispositivo [ ] d; //crea el vector de referencias d = new Dispositivo[10]; char c; int i; //crear los objetos for (i = 0; i < 10; i++) { // elija el dispositivo c = In.readChar(); if (c == M) d[i] = new Monitor(...); else if (c == I) d[i] = new Impresora(...); else d[i] = new Terminal(...); } //usar los objetos for (i = 0; i < 10; i++) d[i].Imprimir();

Ah se aplica el polimorfismo, el objeto que est creado recibir el mensaje y lo ejecutar. En tiempo de programacin no importa si es un monitor, impresora o terminal. En tiempo de ejecucin se decidir cual es el objeto que se utilizar

Ejercicio: Se quiere mostrar el importe total de los recibos y remitos de una empresa, para facilitar el trabajo vamos a suponer que en el remito se enva un solo producto, la cantidad enviada y el precio unitario del mismo. Usa un

Aplicacion

Documento
Es un

Tiene un

Cliente

Es un

Recibo

Remito

Tiene un

Producto

diagrama de clases

16

Paradigmas de programacin

Notas de clase

Cliente
dni, nombre, telefono

Producto
codigo, nombre, cantProductos (static)

Aplicacion

Cliente (), Cliente (d, n, t), setDni (x), setNombre (x), setTelefono (x), getDni(), getNombre(), getTelefono(), toString()

Producto (), Producto (n), setNombre(x), getCodigo(), getNombre(), toString()

main();

Documento
numero, concepto, cliente, cantDoc (static) Documento (co, cl), setConcepto (x), setCliente(x), getNumero(), getConcepto(), getCliente(), getTotal(); (abstract) toString() total

Recibo

Remito
producto, cant, precio

Recibo(co,cl,t), setTotal(x), getTotal(), (redefinida) toString()

Remito(co,cl,p,c,pr), setProductol(x), setCant(x), setPrecio(x), getProducto(), getCant(), getPrecio(), getTotal(), (redefinida) toString()

Implementacin en java
La implementacin de la clase cliente y producto queda para tarea del alumno. //Documnento.java abstract class Documento { protected int numero; protected String concepto; protected Cliente cliente; private static int cantDoc = 0; public Documento(String co, Cliente cl) { cantDoc++; numero = cantDoc; concepto = co; cliente = cl; } public void setConcepto(String c) { concepto = c; } public void setCliente(Cliente c) { cliente = c; } public int getNumero() { return numero; } public String getConcepto() { return concepto; } public Cliente getCliente() { return cliente; }

17

Paradigmas de programacin
public abstract float getTotal(); //mtodo abstracto

Notas de clase

public String toString() { String aux; aux = numero+ , +concepto+, +cliente.toString(); return aux; } }//fin de la clase //Recibo.java class Recibo extends Documento { private float total; public Recibo(String co, Cliente cl, float t) { super (co, cl); //llama al constructor de documento total = t; } public void setTotal(float t) { total = t; } public float getTotal() { return total; } //mtodo redefinido

public String toString() { return super.toString()+, }//fin de la clase //Remito.java class Remito extends Documento { private Produto prod; private int cant; private float precio;

+total; }

public Remito(String co, Cliente cl, Producto p, int c, float t) { super (co, cl); //llama al constructor de documento prod = p; cant = c; precio = t; } public void setProd(Producto p) { prod = p; } public void setProd(int c) { cant = c; } public void setProd(float p) { precio = p; } public Producto getProd() { return prod; } public int getCant() { return cant; } public float getPrecio() { return precio; } public float getTotal() { return (cant*precio); } public String toString() { return (super.toString()+, //mtodo redefinido

+producto.toString()+,

+ cant+,

+precio); } 18

Paradigmas de programacin
}//fin de la clase //Aplicacin.java import java.io.*; import In;

Notas de clase

class Aplicacion { public static void main (String args) { Documento [] doc; //declara un vector de referencias a Documneto int c; //para la opcion del usuario int i, n; long d; String co, n, t; //para el cliente y el producto float tot; int ca; Cliente cl; Producto pr; System.out.print(Ingrese la cantidad de documentos : ); n = In.readInt(); //crea el vector doc = new Documento[n]; for (i = 0; i < n ; i++) { //Seleccione que documento va a cargar System.out.print(Ingrese el doc a cargar (1. Recibo, 2.Remito): ); c = In.readInt(); //carga los datos en comunes System.out.print(Ingrese el concepto: ); co = In.readLine(); System.out.print(Ingrese los datos del cliente: ); System.out.print(dni : ); d = In.readLong(); System.out.print(nombre : ); n = In.readLine(); System.out.print(telefono : ); t = In.readLine(); cl = new Cliente(d, n, t); //crea el cliente

if (c == 1) //crea un recibo { //carga el resto de los datos System.out.print(Ingrese el total: ); tot = In.readFloat(); doc[i] = new Recibo(co, cl, tot); //crea un recibo } else //crea un remito { //carga el resto de los datos System.out.print(Ingrese el nombre del producto: ); System.out.print(nombre : ); n = In.readLine(); //crea el producto pr = new Producto(n); System.out.print(Ingrese la cantidad : ); ca = In.readInt); System.out.print(Ingrese el total: ); tot = In.readFloat(); //crea el remito doc[i] = new Remito(co, cl, pr, ca, tot); } //fin del ciclo 19

Paradigmas de programacin

Notas de clase

for (i = 0; i < n ; i++) { //mostramos el objeto System.out.print(\n Los datos de documento son : + doc[i].toString()); System.out.print(\n El total del documento es : + doc[i].getTotal()); } } }//fin clase aplicacion

20

También podría gustarte