Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Notas de clase
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.
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)
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
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 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
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
Cliente
Producto
Tiene uno o ms
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.
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.
Clase caractersticas
Responsabilidades
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
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
Alumno
Clase Derivada
Docente
Clase Derivada
Persona
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
Alumno
legajo, promedio
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
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( )
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
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()
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
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