You are on page 1of 28

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos PROGRAMACIN ORIENTADA A OBJETOS

La programacin orientada a objetos mira los fenmenos de la vida real de diferente perspectiva. PROGRAMACIN ESTRUCTURADA Tenemos la programacin estructurada, en la que se trabaja a travs de mdulos y procesos, dentro de los cuales se especifica lo que el usuario necesita. Por esto se la llama Programacin Modular. Consista en llenar lneas y lneas de cdigo, con el fin de encontrar solucin a los problemas. Sin embargo, sta soluciona muchas de las interrogantes que se presentan a menudo. La verdadera desventaja de este tipo de programacin es que se convierte en un cdigo no reutilizable, y con el ajetreo de hoy en da se requiere no slo un solucionador de problemas sino tambin una herramienta adecuada y rpida. PROGRAMACIN ORIENTADA A OBJETOS La programacin orientada a objetos (POO), a diferencia de la estructurada, trabaja con Divisin por mdulos (llamados mdulos a entidades u objetos). Ahora, la visin de la realidad se torna distinta, el programador visualiza la realidad a travs de objetos. Cada parte importante de algo es un objeto. Por ejemplo, piense en usted mismo y sus caractersticas que lo identifican: USTED es ya un objeto, que contiene objetos ms pequeos como su nombre, su direccin, su nmero de cdula, su edad, tu talla, su color, etc. La gran ventaja de este tipo de programacin es que, por su forma de ver las cosas, se convierte en una herramienta reutilizable para todos los casos. Piense en un rector de una universidad X. l posee caractersticas propias y adems sabe administrar dicha universidad. Cuando necesitemos analizar otro rector en una universidad Y, podremos utilizar al rector en X para simular uno en Y, lgicamente con diferente forma de administrar. MODELADO DE ENTIDADES DEL MUNDO REAL Antes de saber cmo modelar con entidades del mundo real, se debe entender de qu se trata una entidad del mundo real. Entidad del mundo real: Es un objeto que tiene funcionalidad y caractersticas propias. Objeto: Es una entidad del mundo real que tiene funcionalidad y caractersticas propias. Funcionalidad: Todo lo que un objeto es capaz de hacer. Nos referimos a una entidad como a cualquier ser propio del mundo real, que puede ser diferenciado uno de otro por sus atributos y funciones que puede desempear. Por ejemplo, un rbol, que es identificado por su tamao, especie, edad, y que adems cumple con varias funciones, tales como: dar fruto, alojar nidos de pjaros, proporcionar sombra, purificar el aire, etc. Una solicitud de ingreso posee atributos tales como: Nmero de folio, datos del aplicante, y cumple las funciones de devolver los datos en l ingresados, a la persona que autoriza dicho documento. Para que un objeto manifieste su funcionalidad, necesita ser invocado a travs de mensajes emitidos por otros objetos.

Manual de POO

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


Mensaje: Peticin o llamado a una funcionalidad de un objeto. El mensaje puede estar expresado en cualquier lenguaje, siempre y cuando ste sea entendido por el objeto emisor y el receptor. Para analizar la comunicacin entre objetos y funcionalidades, es necesario recurrir al proceso de abstraccin. PROCESO DE ABSTRACCION Es el proceso de agrupar objetos por su funcionalidad y atributos comunes. compone de los siguientes subprocesos: Identificacin de objetos Abstraccin de objetos Encapsulamiento Relacin de clases Se

Identificacin de Objetos: Se trata de indicar los objetos que van a interactuar en la utilizacin de un sistema determinado. Dentro de este subproceso se encuentra el anlisis de las caractersticas de dicho objeto y de las funcionalidades requeridas para el efecto. Abstraccin: Consiste en agrupar los objetos identificados por funcionalidad y caractersticas comunes. Esta agrupacin ser denominada de ahora en adelante como: CLASE. As, definiremos Clase como la abstraccin de un conjunto de objetos. Respecto a la clase a la que pertenece, se define a un objeto como una variable o instancia perteneciente a una clase definida. Encapsulamiento: Consiste en esquematizar cada una de las abstracciones definidas previamente, luego de agrupar sus caractersticas y funcionalidades. Esto permite la realizacin de un diagrama de clases. Diagrama de clases: Representacin grfica de las clases o abstracciones previamente definidas. Estas sern expresadas como rectngulos que contengan el nombre de la clase. Relacionar clases: Definir las interacciones entre clases, luego de determinar la dependencia entre ellas. Por ejemplo, una clase llamada Alumno, se relaciona automticamente con una clase Curso y sta a su vez, con una clase Materia, ya que un alumno se inscribe un curso determinado para recibir una o varias materias en dicho curso. Ejercicio Resuelto Realice el diagrama de clases para un Sistema de Inventario para una farmacia.

Manual de POO

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos

Proveedor

TipoMedicamento ArticulosUso Personal EquiposOficina

Medicamento

CatalogoMed

CatalogoTipoMed

CatalogoArt

CatalogoEqu

SISTEMA DE INVENTARIO

Ejercicios Propuestos 1.- Realice el diagrama de clases especificando las funcionalidades de cada clase, para un local de venta de computadores. 2.- Realice el diagrama de clases especificando las funcionalidades de cada clase, para una gasolinera. 3.- Realice el diagrama de clases especificando las funcionalidades de cada clase, para un sistema de facturacin. 4.- Realice el diagrama de clases especificando las funcionalidades de cada clase, para un sistema de biblioteca. UML (Lenguaje de Modelado Unificado) El UML es un lenguaje grfico que nos permite representar clases, atributos, funciones y relaciones entre clases. Se trata de una sntesis de la abstraccin. Se tiene como estndar el siguiente: Clase - atributoPrivado: tipo + atributoPblico: tipo - metodoPrivado(nombreVariable: tipo): tipoDelMetodo + metodoPblico(nombreVariable: tipo): tipoDelMetodo Firma de mtodo: Cada lnea en la definicin de la clase que establece cada mtodo se denomina firma o declaracin del mtodo. Tipos de Atributos: Existen atributos privados y pblicos. Son atributos privados aquellos que son propios de una clase y no pueden ser compartidos para las dems.

Manual de POO

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


Son atributos pblicos, en cambio, aquellos cuya caracterstica principal es tener la capacidad de ser modificados y compartidos por otras clases. Mtodos: Son la interfaz de la clase, modifican los atributos privados de la clase. Existen mtodos privados y pblicos, son mtodos privados aquellos que se ejecutan por la clase en la que estn definidos. Si modelamos atributos pblicos, nos ahorramos mtodos, pero se pierde seguridad. Por ejemplo: Punto - x: int - y: int + moverX(incrementoX: int): void + moverY(incrementoY: int): void + devolverX( ): int + calcularDistancia( ): double + imprimirDatos( ): void Mtodos Accesorios Existe una convencin de Java que establece que los mtodos que sirvan para devolver un valor a un atributo se denominen accesorios selectores y se escribirn getAtributo() donde Atributo es el nombre del atributo a devolverse, p.ej. getX( ): int; y los mtodos que sirvan para fijar un valor a un atributo se denominen accesorios modificadores o mutantes, y se escriban como setAtributo(), p.ej. setY(valorY: int): void. Para las aplicaciones, es decir la clase donde se ejecuta el programa, Aplicacin.Java, contiene la sentencia public static void main(String []args) y a partir de sta se va construyendo el cdigo en la aplicacin. Y slo sta clase es la principal, lo contrario de las otras clases donde hay ms clases principales sin embargo la clase toma el nombre de la clase pblica. Al grupo de clases que tienen algo en comn se les denomina package y stos pueden contener varios archivos de clases. Es aconsejable tener cada clase en un archivo diferente. La agrupacin de package, se le denomina carpetas, incluso clases. Project el cual puede tener varias

Manual de POO

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


PROJECT

PACKAGE Crculo

Punto

Esfera

PACKAGE

Cilindro Cono Lnea

Clases

Clases

Ejercicio Propuesto 1.- Complete el ejemplo con los mtodos que se refieran al atributo, tanto selectores, como modificadores. Wrapper Classes.- Clases de envoltura que permiten manipular datos y vienen incorporadas en el lenguaje programador (p.ej. Java) String clase formada por chars. Integer clase formada por ints. Atributos propios, muy propios e invariantes, como el nombre de un Estudiante o su nmero de cdula, pueden no tener accesorio set, y otro tipo de atributos como el nmero de folio en una Solicitud, puede no tener accesorio get. Ejercicio propuesto Modele las clases Estudiante, Curso y Fecha, con los atributos y mtodos que usted considere necesarios para acceder y modificar su informacin.
Nota: Es ms eficiente modelar al nmero de cdula y al nmero nico como String, ya que modelarlos como double o float ocupa mucho ms espacio, p.ej. un double ocupa 64 bytes, mientras que un String de 10 caracteres ocupa 10 bytes.

MTODOS CONSTRUCTORES.En programacin estructurada se requera reservar memoria, para poder crear variables en tiempo de ejecucin, y luego borrar esa porcin de memoria. En la Programacin Orientada a Objetos el Garbage Collector (recolector de basura) se encarga de eliminar la memoria que ya no ser necesaria en el futuro de manera automtica.

Manual de POO

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


Gracias a esta caracterstica tan til se pueden definir ciertos mtodos llamados Constructores. // para sumar dos puntos public void suma(Punto op1, Punto op2) { X = op1.x + op2.x; Y = op1.y + op2.y; } public Punto suma (Punto op2) { Punto res = new Punto (); res.x = x + op2.x; res.y = y + op2.y; return res; } En el caso de asignacin de memoria, en el ejemplo anterior la variable c es una referencia de res. Cuando se termina la funcin se elimina res y queda el nombre c. Esto se realiza mediante el garbage colector.

res
Memoria

c se elimina y queda res, as no se ocupa espacio con la misma variable. Constructores.- Mtodos que sirven para inicializar los valores de los atributos de un objeto al momento de crearlos (instanciarlos). Se ejecutan una sola vez por cada objeto, y no retorna valores. Su retorno no es void, ya que void ya es un tipo de retorno. Los mtodos constructores deben tener el mismo nombre de la clase a la que pertenecen, para crear el objeto de dicha clase. Adems se puede tener ms de un constructor para una clase, es decir que en programacin orientada a objetos se puede tener ms de un mtodo con el mismo nombre, con la condicin que los parmetros a ingresar en los mtodos no sean del mismo tipo, ni en el mismo nmero. Se debe escribir la clase tal como est en su definicin, empezando por una letra mayscula, ya que Java es sensible a maysculas. As una clase Estudiante puede definir varios mtodos, por ejemplo: Estudiante ( ): Se llama constructor por default, no tiene parmetros y crea objetos con todos los valores de sus atributos nulos. Siempre es bueno definir un constructor por default, para facilidad en tiempo de programacin.

Manual de POO

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


Estudiante (initialNumeroUnico: String,initialNombre: String,initialFechaNacimiento: Fecha) Se llama constructor con parmetros, y sirve para instanciar objetos donde los valores ingresados son los valores de los atributos que se especifican en la firma del mtodo. Estudiante (initialEstudiante: Estudiante): Se llama constructor copia, porque se ingresa como parmetro un objeto de la misma clase que el que se va a crear, y consecuentemente el nuevo objeto creado tiene los mismos valores de los atributos que el objeto que lo origin.
Nota: Se establece en la convencin Java que las variables que corresponden a los parmetros de los constructores se escriban initialAtributo.

Aqu se da un ejemplo del uso de los constructores: Estudiante a Se hace una referencia a un Estudiante. Estudiante b = new Estudiante() Se crea un objeto de clase Estudiante, de nombre b, con sus atributos de valor nulo. Estudiante c = new Estudiante(200510236,Carolina,1986/09/26) Se crea un objeto de clase Estudiante, de nombre c, con valores para sus atributos. Estudiante d = new Estudiante(c) Se crea un objeto de clase Estudiante, de nombre d, con los valores de sus atributos iguales a los del objeto c. USO DE LOS MTODOS.En programacin orientada a objetos se declaran mtodos, para usarlos y especificar a qu objeto corresponde cada uno de ellos se utiliza la notacin Punto. En la notacin punto se sigue la siguiente estructura: objeto.Metodo(Parametros) Por ejemplo se definen las siguientes clases: Punto Circulo - x: double - centro: Punto - y: double - radio: double + setX(valueX: double): void + setCentro(valueCentro: Punto): void + getX( ): double + getRadio( ): double + setY(valueY: double):void + setRadio(valueRadio : double):void + getY( ): double + getCentro( ): Punto + moverX(newX: double): void + Circulo(initialCentro:Punto,initialRadio: + moverY(newY: double): void double) + Punto(initialX: double,initially: Se crea un objeto Punto de nombre q: double) Punto q = new Punto(3,4) Se crea un objeto Crculo de nombre z: Circulo z = new Circulo(q,5) Se desea que el radio del crculo z cambie a 10 z.setRadio(10) Se desea que cambie la coordenada x del centro de z a 20 z.getCentro().setX(20) El momento que escribimos z.getCentro() estamos manipulando a un objeto de tipo punto en este caso el punto q, y se puede utilizar cualquiera de los mtodos definidos para la clase Punto

Manual de POO

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos

Alumno - nombre: String - numeroUnico: String - cedula: String - fechaNacimiento: Fecha

Fecha - dia: int - mes: int - anio: int + getDia(): int + setDia (valorDia:int):void

En este caso fecha no es un tipo de dato comn y corriente, que es asignado a un atributo, razonando con respecto a objetos, es otra clase, pues contiene un da, un mes determinado, y un ao, por lo que no puede ser del tipo String, ni int, ni tampoco es un nmero como double. En este caso se dice que existe una referencia entre las clases Alumno y Fecha, cuando se habla de referencia, nos estamos refiriendo a clases, ms no objetos. Cuando se habla de atributos, se habla de objetos, ya que un objeto contiene a otro objeto de otra clase. Como en el caso de dia: int. Un constructor solo se ejecuta 1 vez en 1 objeto y se puede tener varios constructores en1 clase. Es aconsejable tener un constructor por default. CONVENCIONES EN JAVA Para programar en lenguaje java, se deben seguir ciertas convenciones o reglas previstas con anterioridad. Entre estas tenemos: El archivo .java dentro del cual se almacena el contenido de la programacin de una clase Nombre, se llamar Nombre. Java. Si dentro del archivo se programa varias clases, se tomar en cuenta el nombre de la clase pblica o principal. Se puede definir

Manual de POO

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


como pblica a cualquier clase, siempre y cuando sea Clase Principal o Aplicacin Principal. Una clase principal se define con un mtodo main dentro de s. sta ser la que haga interactuar los objetos y los aplique. Definicin de una clase principal: Public Aplica { Main() { } } Como se puede observar, dentro de un mismo archivo pueden estar definidas varias funciones main, pero una sola clase pblica. Es aconsejable tener cada clase en un archivo diferente. Package: Es un flder comn y corriente que contiene una agrupacin de clases. Para que los .java se ejecuten directamente, debern estar almacenados en un mismo package. Project: Es una agrupacin de Packages. cualquier otra carpeta. Puede contener tambin clases o

Para las aplicaciones, es decir la clase donde se ejecuta el programa, Aplicacin.Java, contiene la sentencia public static void main(String []args) y a partir de sta se va construyendo el cdigo en la aplicacin. Y slo sta clase es la principal, lo contrario de las otras clases donde hay ms clases principales sin embargo la clase toma el nombre de la clase pblica. IMPLEMENTACIN Consiste en traducir a lenguaje java el diagrama UML del modelo orientado a objetos que escojamos. Implementemos la clase Punto:
package figuras; // Guarda este archivo .java en el package figuras public class Punto { private double x; // declara como variable privada de tipo double a x private double y; //El anterior se llama Bloque de Declaraciones // Declaracin de Funciones //Constructores public Punto() { // Funcin por default x = 0; y = 0; } public Punto (double initialX, double initialY) { //Funcin con parmetros x = initialX; y = initialY;

Manual de POO

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


} public Punto (Punto initialP) { //Funcin copia x = initialX; y = initialY; } public void setY (double valueY) { // Funcin que asigna valores a Y x = valueX; } public double getX() { // Devuelve el valor de la coord. x return x; } public void mover (double cambioX) { // Funcin que mueve la coord. X x = x + cambioX; } public void mover (double cambioY) { // Funcin que mueve la coord. Y x += cambioX; } public void imprimir() { //Imprime las coordenadas x y y del punto System.out.println (x = + x ); System.out.println (y = + y ); public void setPunto (Punto valueP) { x += valueP.x y += valueP.y } } Nota: En la setencia System.out.println(x = + x ); es espacio es del tipo String, y x es del tipo double por lo tanto se concatenan, si en lugar fuesen 2 doubles, se sumaran, de igual manera 2 int.

As, pueden haber varias funciones con un mismo nombre, cuya diferencia ser solamente sus argumentos. Este es el caso de SOBRECARGA DE FUNCIONES. Tambin, se puede manipular objetos desde una nueva clase, si es preciso, misma que, para este ejemplo, declararemos como clase de aplicacin o principal.
public class AplicaPunto { public static void main (String [ ]args ) { //Declaracin de una funcin main Punto a = new Punto(); Punto b = new Punto(10,20); b.moverPunto (10,10); //Mueve el punto b en (10,10) b.setX(0); //Asigna a la coordenada x el valor de 0 b.imprimir(); //Imprime las coordenadas del punto b double valor = a.getX(); //Devuelve en la variable valor la coordenada en x del punto a b.moverPunto(a); //Mueve las coord. del punto b en a (Increm. en a) b.moverY(a.getX()); //Mueve la coord. Y de b en X de a Punto c = new Punto (a); //Crea un nuevo punto c con atributos de a System.out.println(c.getX()); //Imprime la coord. X del punto c.

Para hacer explcito el package en el que deseo que est contenido Punto, utilizo:

Manual de POO

10

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


package figuras; Ejercicio Resuelto: 1.- Implemente una clase Complejos que realice todas las operaciones que con ellos se puede realizar. Tambin una clase de Aplicacin de complejos donde se manejen objetos. Esta clase tendr sus respectivos atributos y mtodos. Para ejecutar dicha clase se crear una clase AplicaComplejo, cuya funcin es de alguna manera, llevar a cabo la clase Complejo. CLASE COMPLEJOS
package complejos; public class Complejo { //Declaracin de atributos private double real; private double imag; //Funciones Constructoras public Complejo() { real = 0; imag = 0; } public Complejo(double initialReal, double initialImag) { real = initialReal; imag = initialImag; } //Funciones Accesorias public void setReal(double valueReal) { real = valueReal; } public double getReal() { return real; } public void setImag(double valueImag) { imag = valueImag; } public double getImag() { return imag; } //Funciones definidas por el usuario public void imprimirDatos() {

Manual de POO

11

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


System.out.println("Numero real: " + real); System.out.println("Numero imaginario: " + imag); System.out.println("Numero complejo: " + "(" + real + "," + imag + ")"); } public void incrementarEnUno() { real ++; imag ++; } //Funcin que sume dos complejos y retorne un complejo public Complejo sumaComplejos(Complejo valor1) { Complejo suma = new Complejo(); suma.real = real + valor1.real; suma.imag = imag + valor1.imag; return suma; } public void imprimirFormaCompleja() { if(imag < 0) System.out.println(real + "" + imag + "i"); else System.out.println(real + "+" + imag + "i"); } }

Los mtodos anteriormente implementados incluyen la definicin de datos, las funciones constructoras y accesorias para cada atributo, funciones definidas por el usuario, tales como la de imprimir datos en dos o ms formatos, sumar complejos devolviendo un complejo, imprimir datos bajo ciertas condiciones, etc. CLASE APLICACOMPLEJO
package complejos; public class AplicaComplejo { /** * @param args */ public static void main(String[] args) { Complejo a = new Complejo(10,20); //Creacin de nuevos complejos Complejo b = new Complejo(); b.setReal(100); //Asignacin del valor 100 a la parte real del complejo b b.imprimirDatos(); //Impresin de los datos del complejo b a.incrementarEnUno(); //Incremento en uno al complejo a a.imprimirDatos(); Complejo c = new Complejo(); c.setReal(10); c.setImag(15); //Asignacin del valor 15 a la parte imag. del complejo c //Suma del complejo b al a e impresin de resultados a.sumaComplejos(b).imprimirDatos(); a.sumaComplejos(b).imprimirDatos(); //Impresin de datos con diferente formato a.imprimirFormaCompleja(); b.imprimirFormaCompleja(); c.imprimirFormaCompleja(); a.setImag(-100); a.imprimirFormaCompleja();

Manual de POO

12

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


} }

Como podemos notar, la clase AplicaComplejo, trabaja con objetos, realizando llamadas o invocando a los mtodos de la clase Complejo de acuerdo con lo que necesite. Esto permite que la manipulacin de los mtodos y atributos sea mucho ms fcil y rpida.
Nota: Una operacin binaria siempre tendr 1 parmetro cuando retorna algo. Una operacin binaria que no retorna algo tiene 2 parmetros. Una operacin unaria no necesita parmetros. a.incrementoUno() { public void incrementoUno() { x++; y++; }

ASIGNACIN DE MEMORIA En el caso de asignacin de memoria, en el ejemplo anterior la variable c es una referencia de res. Cuando se termina la funcin se elimina res y queda el nombre c. Esto se realiza mediante el garbage colector. c se elimina y queda res, as no se ocupa espacio con la misma variable.

Ejercicio Resuelto: 1.- Implemente una clase Carta que valide que las cartas que se ingresen estn dentro del rango determinado.
public class Carta { private String palo; private String numero; private String[] palos = {"C","D","T","E"}; private String[] numeros = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"}; public Carta() { palo = null; numero = null; } public Carta( String initialNumero, String initialPalo) { numero = initialNumero;

Manual de POO

13

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


palo = initialPalo; } public void setNumero(String valueNumero) { numero = valueNumero; } public void setPalo(String valuePalo) { palo = valuePalo; } public int getNumero() { int numero1; numero1 = Integer.parseInt(numero); return numero1; } // como numero es String se convierte en Integer para poder // realizar operaciones sobre l. public String getPalo() { return palo; } public void imprimir() { System.out.println("La Carta es: "+ numero + "de" + palo); } public boolean validaCarta() { int contp = 0; while (contp < palos.length) { int contn = 0; if (palo.toUpperCase().equals(palos[contp])) { while (contn < numeros.length) { if (numero.toUpperCase().equals(numeros[contn])) { return true; } contn++; } } contp++; } return false; } }

Como otra convencin de Java, se debe saber que cuando se trabaja con objetos no se utiliza (==) para comparar, sino equals y el objeto. EXCEPCIONES Es un error inesperado en tiempo de ejecucin.

Manual de POO

14

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


Cuando el programa detecta un error, dispara un objeto excepcin ste debe ser capturado para determinar la causa del error. Ejemplo: public class mYEXception { public Static void main (String []args) { int n = 5; int d = 0; int r = n/d; System.out.println(RES r); } } En este caso el error se produce en la divisin por 0 cero que es de tipo aritmtico. Cuadro de Excepciones:

Exception

ArithmeticException

NumberFormatException

IOException

ArgIndezOrtof

Try: Sabe el error Catch: Captura el error Ejemplo: Try { int n = 5; int d = 0; int r = n/d; System.out.println(RES r); } Catch (ArithmeticException) { System.out.println(ERROR div 0); } El catch evita que se caiga el programa capturando el objeto se puede tomar medidas sobre el error. Tambin funcionara la excepcin escribiendo Exception ArithmeticException, pero no se sabra el detalle del error. en lugar de //captura el error

El error debe capturarse en la fundn porque si se captura en el main, y se vuelve a usar el main se tendra que usar el capturador en cada main.

Manual de POO

15

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


El error es tratado por el programador ya no por el Sistema Operativo y es el usuario quien decide que hacer con el error.
public Static void main (String []args) { int n = 5; int d = 0; int r = n/d; System.out.println(RES r); } Public Static int div (int rn, int rd) { If (rd == 0) { Throw new ArithmeticException (ERROR 0); } return rn/rd; } }

Throw new ArithmeticException, realiza casi la misma funcin que el try y catch con la diferencia de que el error no se captura. El throws exception se utiliza en la funcin para que llame y capture. Y de esta manera en cierta forma acta como un aviso dentro de la funcin advirtiendo que existe una excepcin. CARDINALIDAD La cardinalidad hace referencia a un conjunto de objetos que son contenidos por otro. Entre los conceptos ms importantes dentro de este tema tenemos: Coleccin: Conjunto de objetos de un mismo tipo. Como ejemplo: Alumno Curso

De esta manera se representa la cardinalidad entre dos clases. En este caso demuestra que un CURSO TIENE VARIOS ALUMNOS. De esta manera CURSO se constituye como una COLECCIN DE ALUMNOS. Al ser una coleccin de alumnos, Curso debe tener un arreglo que contenga objetos tipo Alumno. Estos e consigue implementando un arreglo de alumnos, que sera un array de referencias.

Manual de POO

16

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


Cada casillero del arreglo contendr un alumno distinto, de esta manera podremos manejar cada uno de los ndices que indican la posicin de cada alumno, de forma menos compleja.

Referencia a un objeto
Para la implementacin: Alumno alumnos[] = new Alumno[ 10 ] // De esta manera se crea un objeto arreglo Nmero de posiciones del arreglo alumno[0] = new Alumno() ; // Coloco un objeto en el arreglo Como se puede ver, primero se debe instanciar el objeto, para luego poder usar el arreglo como desee. Ejercicio Propuesto 1.- Implemente una clase Curso que contenga un nmero mximo de alumnos, que sume su edad, imprima sus datos. Adems aada funciones para realizar lo siguiente: Aadir un alumno Buscar un alumno Eliminar un alumno Cambiar o modificar los datos de un alumno Funcin que devuelva un arreglo que contenga todos los nombres de los alumnos del curso. Funcin que calcule el promedio de iras de los alumnos del curso Funcin que devuelva un arreglo con el nmero nico, nombre e IRA de todos los alumnos del curso. Funcin que imprima todos loa alumnos de un curso. HERENCIA Es una relacin que se da entre dos clases de la misma ndole que permite compartir atributos y funciones entre ellas. Nos permite crear clases a partir de otras ya creadas. Si quisiramos implementar una clase Alumno, pero existen alumnos de tecnologa, de ingeniera, de costura, etc., para cada una de las clases tendramos que digitar el cdigo con todos los atributos y a su vez, los mtodos accesorios para cada uno de ellos.

Alumno

Manual de POO

-NumUnico -Nombre -Edad -IRA -CI

AlumnoTecnol

-NumUnico -Nombre -Edad -IRA -CI 17 -noHorasLab

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos

AlumnoIng

-NumUnico -Nombre -Edad -IRA -CI -NCA

AlumnoCostura

-NumUnico -Nombre -Edad -IRA -CI horasCostura

Con una relacin de herencia podremos evitar este inconveniente, reduciendo el cdigo de manera notoria. Las clases AlumnoIng, AlumnoTecnol y AlumnoCostura heredaran de la clase Alumno todos sus atributos ya dems cada una de ellas tendra algunos extras que son especficos para cada clase. Para esto aplicamos implcitamente el concepto de GENERALIZACIN, que consiste en partir desde lo especfico e ir a lo general, como es abreviar las clases e implementar solamente una clase Alumno que tenga los atributos y funciones en comn para todas las dems, y luego heredarlos a las dems clases. As:

Alumno

AlumnoTecnol

AlumnoIng

AlumnoCostura

Esta sera la representacin en UML de una relacin de herencia. Alumno constituye la Clase Base o Superclase y Las dems se llamarn Clases Derivadas o Subclases. En este momento las clases heredadas comparten todos los miembros de Alumno excepto los MIEMBROS PRIVADOS. stos podrn ser vistos de forma indirecta, por medio de los mtodos get() y set(). Condicin de Herencia: Una clase puede ser herencia de otra siempre y cuando cumpla con la afirmacin: ClaseHeredada ES UN /A ClaseBase Tipos de proteccin de Atributos Como sabemos, los tipos de proteccin que se han utilizado hasta hoy han sido privado y pblico. Sin embargo, se han ocasionado insuficiencias en la seguridad interna de los sistemas, de modo que se necesitaba tener una proteccin que permita compartir miembros completamente a las subclases y mantener totalmente privados los miembros para las clases enlazadas por asociacin.

Manual de POO

18

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


De esta manera se crea un tipo de proteccin que realice lo que se necesitaba, ste se llama: protected o tipo protegido. Ejercicio Resuelto 1.- Supongamos una tienda de animales que tiene los siguientes animales: perro, ballena gris, tiburn, guilas, cndores, ballena jorobada. Realice el respectivo UML que represente el fenmeno.

Animal
Mamfero

Ave

Pez

Perro

Ballena

guila

Cndor

Tiburn

BallenaGris

BallebaJorobada

Ejercicio Propuesto 1.- Considere una empresa de contenedores. Se tiene contenedores rectangulares y cilndricos. Cada contenedor tiene una placa, color, profundidad. El contenedor rectangular tiene largo, ancho y profundidad, mientras que el cilndrico tiene radio y profundidad. Calcular el volumen, rea y permetro de los contenedores. Para el contenedor cuadrado se requiere un nmero de autorizacin municipal y para el cilndrico un nmero de patente del material (tipo enteros). Implemente el ejemplo. STRING TOKENIZER Son objetos que se pueden separar en Strings ms pequeos, conocidos como tokens. Por ejemplo si se tiene la cadena DISK_40_1970 se la puede separar en DISK, 40 Y 1970. Para emplear los StringTokenizer es necesario separar los tokens mediante un guin - o un subguin _. Mtodos: StringTokenizer(cadena, -) este constructor indica que el carcter que separa los tokens es el guin. void nextToken() apunta hacia el siguiente token dentro de un objeto StringTokenizer.

Manual de POO

19

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


Ejemplo: Este programa permite ingresar una cadena de caracteres separados por un _ los separa y los lee uno por uno, tambin tiene un men para que el usuario escoja la opcin que desee realizar.
package yoi; public class Cliente { private String nombre; private int edad; private double sueldo; /** * */ public Cliente() { // TODO Auto-generated constructor stub } /** * @param nombre * @param edad * @param sueldo */ public Cliente(String nombre, int edad, double sueldo) { // TODO Auto-generated constructor stub this.nombre = nombre; this.edad = edad; this.sueldo = sueldo; } /** * @return Returns the edad. */ public int getEdad() { return edad; } /** * @return Returns the nombre. */ public String getNombre() { return nombre; } /** * @return Returns the sueldo. */ public double getSueldo() { return sueldo; } /** * @param edad The edad to set. */ public void setEdad(int edad) { this.edad = edad; } /** * @param nombre The nombre to set. */ public void setNombre(String nombre) { this.nombre = nombre; } /** * @param sueldo The sueldo to set. */ public void setSueldo(double sueldo) { this.sueldo = sueldo;

Manual de POO

20

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


} public void imprimir() { System.out.println("\n*********\n" + "*CLIENTE*\n"+ "*********\n"); System.out.println("Nombre : "+this.nombre); System.out.println("Edad : "+this.edad); System.out.println("Sueldo : "+this.sueldo); } } Para la aplicacin package yoi; import java.util.*; import java.io.*; public class Aplica { static BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int op = 0; Cliente cliente = null; do{ menu(); op = leerDatoNumerico(1,3); switch(op) { case 1: cls(); cliente = leerCliente(); break; case 2: cls(); if(cliente != null){ cliente.imprimir(); } break; default: cls(); cls(); System.exit(0); } }while(op != 3); } public static Cliente leerCliente() {

Manual de POO

21

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


Cliente nuevoCliente = new Cliente(); String cliente = null; String cadena[] = new String[3]; int verif = 0; do{ try{ System.out.println("\nNUEVO CLIENTE " + "[(nombre)_(edad)_(sueldo)]"); System.out.println("\nEjemplo: Juan_15_1500"); System.out.println("\nINGRESE: "); cliente = stdIn.readLine().toUpperCase(); StringTokenizer str = new StringTokenizer(cliente, "_"); if(str.countTokens() == 3){ for(int i = 0; i < 3; i++){ cadena[i] = str.nextToken(); } if(Integer.parseInt(cadena[1]) > 0 && Integer.parseInt(cadena[1]) < 100) {

nuevoCliente.setEdad(Integer.parseInt(cadena[1])); if(Double.parseDouble(cadena[2]) > 220 && Double.parseDouble(cadena[2]) < 2000){

nuevoCliente.setNombre(cadena[0]); nuevoCliente.setSueldo(Double.parseDouble(cadena[2])); verif++; cls(); System.out.println("Cliente ingresado exitosamente"); }else { cls(); System.out.println("El sueldo es incorrecto"); } } else{ cls(); System.out.println("La edad es incorrecta"); }

} else{ cls(); System.out.println("El nmero de campos es incorrecto"); }

Manual de POO

22

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


}catch(Exception e){ cls(); System.out.println("Error: " + e.getMessage()); System.out.println("Uno o ms campos fueron ingresados" + " incorrectamente"); } }while(verif == 0); return nuevoCliente; } public static int leerDatoNumerico(int numInicio, int numFinal) { int opcion = 0; int verif = 0; do{ try{ System.out.println("\nINGRESE: "); opcion = Integer.parseInt(stdIn.readLine()); if(opcion >= numInicio && opcion <= numFinal){ verif++; } else{ System.out.println("Su opcion debe estar entre "+ numInicio+" y } }catch(Exception e){ System.out.println("Error: " + e.getMessage()); } }while(verif == 0); return opcion; } public static void menu() { System.out.println("\n\n**************\n" + "*MENU CLIENTE*\n" + "**************\n\n"); System.out.println("(1) Ingresar Cliente\n" + "(2) Consultar Cliente\n" + "(3) Salir"); } public static void cls(){ for(int i = 0; i < 27; i++){

"+numFinal);

System.out.println("\n"); } } }

Manual de POO

23

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


ARRAYLIST Los ArrayList son arreglos dinmicos; a manera de una lista enlazada, donde no tiene posicin fija en la memoria. Para manejarlo debe tener un apuntador al siguiente elemento guardado en memoria Los Arraylist son de tipo genrico, contienen objetos, y no pueden contener tipos de datos primitivos. Son tipos de datos Objetos: Integer, String, Double, Persona, Fecha, etc. Para manejar elementos ArrayList se necesita importar el package java.util. Tenemos por ejemplo una instanciacin de de un objeto ArrayList:
ArrayList <Producto> arreglo = new ArrayList<Producto>(); arreglo.add(new Producto("x","y")); arreglo.add(new Producto("z","w"));

MTODOS DEL ARRAYLIST A continuacin se muestran los mtodos que sirven para manipular objetos ArrayList: int size() boolean isEmpty() boolean contains(Object o) void add(E o) void add(int index, e O) E get(int index) public E set() public boolean remove(Object o) E remove(int index) OBJETO ITERADOR Para manejar ArrayList se puede crear un objeto Iterador que permite recorrer de principio a fin la lista, para poder eliminar o insertar un elemento en cualquier lugar determinado. Este objeto iterador devuelve la direccin del primer elemento del ArrayList. Mtodos: Iterator<E>: Devuelve el primer elemento de la lista boolean hasNext(): devuelve true si hay un elemento siguiente en la lista E next(): retorna el siguiente elemento de la iteracin void remove: Elimina el elemento en el que se encuentra el iterador en ese momento Ejercicio Resuelto: Devolver lo que se encuentra en el arreglo:
ArrayList<String> arreglo = new ArrayList<String>(); arreglo.add("HOLA"); arreglo.add("COMO");

Manual de POO

24

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


arreglo.add("ESTAN"); for(Iterator<String> i = arreglo.iterator(); i.hasNext();) { resul = resul + "" + i.next(); } System.out.print(resul);

POLIMORFISMO Definicin: Son mtodos iguales pero con distinta implementacin en una relacin de herencia. La principal caracterstica del polimorfismo es que el mtodo que est en la superclase obliga a la subclase a que tambin lo implemente; de esta manera se tiene mayor seguridad en cuanto al sistema ya que la subclase necesariamente necesita implementar el mtodo de la subclase, por que de lo contrario existe un error y la subclase se atiene a las condiciones que la superclase tenga. En el caso de que se aada otra clase al package esta nueva clase tiene calcular precio por defecto. Ejemplo:

PRODUCTO

Public double calcularPrecio()

Producto de Primera Necesidad Public double calcularPrecio()


Public double calcularPrecio() es el mtodo de polimorfismo. CLASES ABSTRACTAS

Producto de Lujo

Clase abstracta: Una clase es abstracta si tiene al menos un mtodo abstracto. Mtodo Abstracto: Es un mtodo sin cuerpo. Supongamos que se desea implementar una aplicacin para manipular empleados de una institucin educativa. Existen empleados a tiempo completo y a tiempo parcial, todos los empleados registran cdula y sueldo base. Los empleados a tiempo completo tienen como atributo sueldo de ingreso y una bonificacin. Los empleados a tiempo parcial registran el nmero de horas trabajadas y un sueldo por hora. Cabe indicar que todos los empleados tendrn un clculo de sueldo. Para el empleado a tiempo completo el sueldo ser su sueldo base + bonificacin. Mientras que para el empleado de tiempo parcial ser el sueldo base + nro de horas trabajadas * sueldo/hora.

Manual de POO

25

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


El momento en el que queremos crear la aplicacin pensamos en una jerarqua de clases de la siguiente forma:

INSTITUCIN EDUCATIVA

EMPLEADO

TiempoCompleto

TiempoParcial

Nos encontramos con la siguiente incgnita: qu tipo de implementacin deber tener el mtodo calcularSueldo() de la clase Empleado? Existe la opcin (no recomendada) de no incluir el mtodo en la clase empleado, lo que conllevara al error de permitir que si se agrega un nuevo tipo de empleado, ste no tenga un mtodo calcularSueldo() lo que es incoherente, puesto que todos los empleados deben tener un sueldo. Existe otra opcin tampoco recomendada de implementar el mtodo calcularSueldo() en Empleado con una programacin arbitraria para dar lugar al Polimorfismo en las subclases de empleado. Hacer esto sera otro error, puesto que no es lgico dar lugar a implementaciones arbitrarias. La opcin recomendada es la de utilizar mtodos abstractos. As, en Empleado, se declarara el mtodo calcularSueldo() como un mtodo abstracto, obteniendo as las siguientes ventajas: Convertir a la clase Empleado en abstracta al declarar el mtodo como abstracto, y con esto no permitir instanciar objetos de tipo Empleado, lo que se ajusta a la realidad, debido a que no existen empleados que no sean de tiempo parcial ni de tiempo completo. Obligar a las subclases de Empleado a implementar el mtodo calcularSueldo(), a menos que se defina a la subclase como abstracta tambin. Una clase abstracta s puede tener constructores, atributos y accesorios. INTERFACES Definicin: Se llama interface a la clase que consta todos sus mtodos abstractos. La interfaz nicamente consta de constantes ms no de atributos. En el caso de: Empleado implements SRI, SRI es una interfaz y Empleado es una clase normal. Una ventaja de las interfaces, es que si puede haber una relacin de herencia mltiple. Para la implementacin de una interfaz:

Manual de POO

26

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


Constantes: public static final Clases: public abstract Interface : public Interface Relacin de una clase con una interface: Clase implements Interface

Aunque para la implementacin de las clases no es necesario escribir abstract. En la interfaz, las constantes generalmente son pblicas. Importante: Una interfaz no puede instanciar objetos. Ejemplo:
public abstract class Empleado implements Sri,Iess,MinisTrabajo { private String cedula; private double sueldoBase; public Empleado(String cedula, double sueldoBase) { this.cedula = cedula; this.sueldoBase = sueldoBase; } public Empleado() { this.cedula = ""; this.sueldoBase = 0.0; } public String getCedula() { return cedula; } public void setCedula(String cedula) { this.cedula = cedula; } public double getSueldoBase() { return sueldoBase; } public void setSueldoBase(double sueldoBase) { this.sueldoBase = sueldoBase; } public abstract double calcularSueldo(); public double aporte() { return 0.05 * this.getSueldoBase(); } public double aporteMedico() {

Manual de POO

27

Instituto Tecnolgico Rumiahui Programacin Orientada a Objetos


return 0.07 * this.getSueldoBase(); } }

La clase Empleado implementa las Interfaces SRI, IESS, MinisTrabajo.


public interface Sri { public static final double ir = 0.5; public static final double iva = 0.12; public abstract double calcularIva(); //Mtodo que me sirve para calcular el IVA public abstract double calcularRenta(); }

MANEJO DE ARCHIVOS A continuacin se muestra un ejemplo de cmo se manejan los archivos:


import java.io.*; public class Archivo { public static BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); public static PrintWriter stdout = new PrintWriter(System.out,true); public static void main(String args[]) throws IOException { stdout.println("Archivo Origen"); stdout.flush(); // Borra la localidad de memoria BufferedReader input = new BufferedReader(new FileReader(stdin.readLine())); // Creacin de un lector de archivo, que en este caso se ingresa por teclado. stdout.println("Archivo Destino"); stdout.flush(); PrintWriter output = new PrintWriter(new FileWriter(stdin.readLine())); //Creacin de un escritor de archivo. String linea = input.readLine(); while(linea != null) { output.println(linea); //Copia la informacin del archivo input al output linea = input.readLine(); } input.close(); //Cierra el archivo de origen output.close(); } }

Se debe importar la librera java.io para manejar los objetos de manipulacin de archivos. BIBLIOGRAFA http://www.monografias.com/trabajos7/impu/impu.shtml http://es.wikipedia.org/wiki/Programacin_orientada_a_objetos

Manual de POO

28

You might also like