Sei sulla pagina 1di 65

UNIDAD I.

Introduccin al Paradigma de la
Programacin Orientada a Objetos

UNIDAD II. Clases y Objetos

UNIDAD III.

Herencia

UNIDAD IV. Polimorfismo

UNIDAD V. Excepciones
UNIDAD VI. Flujos y Archivos

DISEAR E IMPLEMENTAR OBJETOS DE PROGRAMACIN QUE PERMITAN

RESOLVER SITUACIONES REALES Y DE


INGENIERA.

1.1 ELEMENTOS DEL MODELO DE OBJETOS: CLASES, OBJETOS, ABSTRACCIN, MODULARIDAD, ENCAPSULAMIENTO, HERENCIA.
1.2 LENGUAJE DE MODELADO UNIFICADO: DIAGRAMA DE CLASES.

Uno de los principales objetivos de POO es crear objetos, piezas de cdigo autnomo, que puedan interactuar con otros objetos para resolver un problema. La POO difiere de la programacin procedural porque sta enfatiza la secuencia de pasos codificados para resolver un problema, mientras que la POO hace nfasis en la creacin e interaccin de objetos.

M.C. Miriam Zulma Snchez Hernndez

M.C. Miriam Zulma Snchez Hernndez

Los objetos pueden ser fsicos o conceptuales.


Una cuenta de cliente es un ejemplo de un objeto conceptual

Los objetos tienen atributos (caractersticas).

porque no se puede tocar fsicamente. Un cajero automtico es algo que mucha gente toca todos los das y es un ejemplo de un objeto fsico.

Los objetos tienen operaciones.(las cosas que pueden hacer)

Tal como tamao, nombre, color, forma, etc. Los valores de los atributos son referidos como el estado actual del objeto. Por ejemplo, un objeto puede tener un atributo color con el valor de rojo.

Tal como asignar un valor, desplegar una pantalla, o incrementar rapidez. Las operaciones usualmente afectan los atributos de los objetos.

M.C. Miriam Zulma Snchez Hernndez

Otro ejemplo una puerta Atributos? Operaciones?

color, tamao, tipo_madera cerrar_puerta(), abrir_puerta()

M.C. Miriam Zulma Snchez Hernndez

El identificar objetos ayuda a disear las clases (o plantillas) para cada tipo de objetos en un sistema. En OO cada objeto de una clase es llamado una instancia de la clase, y tiene valores distintos en sus atributos, pero son los mismos atributos y las mismas operaciones.

M.C. Miriam Zulma Snchez Hernndez

En Java los atributos son representados usando Variables, y las operaciones son representadas usando Mtodos. Las Variables son el mecanismo guardar datos. para

Los Mtodos son el mecanismo para ejecutar una operacin.

M.C. Miriam Zulma Snchez Hernndez

Una clase es una plantilla que se usa para instanciar varios objetos individuales. Una clase define el conjunto de elementos de datos (atributos) que definen los objetos, as como el conjunto de comportamientos o funciones (llamados mtodos) que manipulan el objeto o realizan interacciones entre objetos relacionados. Juntos, los atributos y mtodos son llamados miembros

M.C. Miriam Zulma Snchez Hernndez

ABSTRACCIN
La abstraccin en programacin es la forma mas general de ver a un objeto, sin meternos en su composicin interior u otros componentes.
Por ejemplo, la televisin, la abstraccin de la televisin es un aparato que sirve para el entretenimiento, no nos interesa los circuitos, chips y dems cosas de la que esta integrada por dentro.

ENCAPSULAMIENTO
La encapsulacin en programacin significa agrupar a todos los componentes de un objeto en uno solo, por medio de algo, para ocultar de la simple vista los componentes internos del objeto. Para quede mas claro, la television esta formada internamente por circuitos, chips, cinescopio y demas, la encapsulacion de la television es el cajon donde estan metidos todos estos componentes, este cajon los oculta de la simple vista, esto es la encapsulacion.

MODULARIDAD
La Modularidad es la propiedad que permite subdividir una aplicacin en partes ms pequeas (llamadas mdulos), cada una de las cuales debe ser tan independiente como sea posible de la aplicacin en s y de las restantes partes.
La modularizacin consiste en dividir un programa en mdulos que se puedan compilar por separado, pero que tienen conexiones con otros mdulos. Al igual que la encapsulacin, los lenguajes soportan la Modularidad de diversas formas.

HERENCIA
La herencia es especfica de la programacin orientada a objetos, donde una clase nueva se crea a partir de una clase existente.
La principal ventaja de la herencia es la capacidad para definir atributos y mtodos nuevos para la subclase, que luego se aplican a los atributos y mtodos heredados. Esta particularidad permite crear una estructura jerrquica de clases cada vez ms especializada. La gran ventaja es que uno ya no debe comenzar desde cero cuando desea especializar una clase existente.

Qu es UML?

o UML es un lenguaje estndar que nos permite representar, especificar, visualizar, construir y documentar los elementos que se anan para conformar el sistema orientado a objetos en estudio.

Caractersticas

o Es un lenguaje de propsito general. o Es un software libre. o No es una metodologa completa y estricta. o Se ha convertido en un estndar mundial.

Modelado Establecimiento de los requisitos de usuario Modelado de la estructura esttica (anlisis o diseo) Modelado de interaccin

Diagrama Diagrama de Casos de Uso Diagrama de Clases

Diagrama de Colaboracin Diagrama de Secuencia

Modelado dinmico

Diagrama de Estados Diagrama de Actividades


Diagrama de Componentes Diagrama de Distribucin

Modelado de implementacin

Un diagrama de clases sirve para visualizar las relaciones entre las clases que involucran el sistema, las cuales pueden ser asociativas, de herencia, de uso y de contenimiento.

Un diagrama de clases esta compuesto por los siguientes elementos: Clase: atributos, mtodos y visibilidad. Relaciones: Herencia, Composicin, Agregacin, Asociacin y Uso.

Mtodos: Los mtodos u operaciones de una clase son

la forma en como sta interacta con su entorno, stos pueden tener las caractersticas:

public (+): Indica que el mtodo ser visible tanto dentro como fuera de la clase, es decir, es accsesible desde todos lados. private (-): Indica que el mtodo slo ser accesible desde dentro de la clase (slo otros mtodos de la clase lo pueden accesar). protected (#): Indica que el mtodo no ser accesible desde fuera de la clase, pero si podr ser accesado por mtodos de la clase adems de mtodos de las subclases que se deriven (ver herencia).

Un empresario quiere abrir varias sucursales de videoclubes, por lo que necesita un sistema que maneje todas sus operaciones y tenga control de sus pelculas, clientes y prstamos. Se planean abrir tres sucursales llamadas, VideoMorelia, VideoUruapan, VideoQuiroga. El prstamo de pelculas es el mismo en todos los videoclubes, pero la base de datos de pelculas es diferente en cada una de las sucursales. Cada sucursal tiene 3 copias de cada pelcula, por lo que al hacer el prstamo se debe disminuir el nmero de pelculas. Las opciones del men principal son:

Busqueda. En VideoMorelia la bsqueda se hace por cliente y me establece que pelcula tiene rentada, en VideoUruapan la bsqueda se hace por pelcula y me dice cuantas quedan y que clientes la tienen rentada, y en VideoQuiroga an no se implementa el proceso de bsqueda, por lo que aparece un mensaje que dice En construccion. REALICE EL ESQUEMA DE CLASES CON SUS RELACIONES PARA MODELAR EL PROBLEMA ANTERIOR.

Hacer prstamos de pelculas (solo a clientes) Consulta general de clientes y pelculas (con total y existencia). En VideoMorelia se presenta en orden alfabetico, en las dems estn desordenadas Alta de clientes y/o pelculas

2.1. DECLARACIN DE CLASES: ATRIBUTOS, MTODOS, ENCAPSULAMIENTO. 2.2. INSTANCIACIN DE UNA CLASE. 2.3. REFERENCIA AL OBJETO ACTUAL.

2.4. MTODOS: DECLARACIN, MENSAJES, PASO DE


PARMETROS,RETORNO DE VALORES. 2.5. CONSTRUCTORES Y DESTRUCTORES: DECLARACIN, USO Y APLICACIONES. 2.6. SOBRECARGA DE MTODOS. 2.7. SOBRECARGA DE OPERADORES: CONCEPTO Y UTILIDAD, OPERADORES UNARIOS Y BINARIOS.

En JAVA la declaracin de clases toma la siguiente forma:

<modifier>* class <class_name> { <attribute_declaration>* <constructor_declaration>* <method_declaration>* }

M.C. Miriam Zulma Snchez Hernndez

<modifier>* <type> <name> [=<initial_value>];


public class Foo { private int x; private float y = 10000.0F; private String name = Luis Gonzlez;
La palabra private indica que el atributo solo es accesible por los mtodos dentro de la clase. El tipo puede ser primitivo o de cualquier clase.

M.C. Miriam Zulma Snchez Hernndez

<modifier>* <return_type><name> (<argument>*) { <statement>* }


Los modificadores pueden ser public, protected o private. El modificador de acceso pblico indica que el mtodo puede ser llamado desde otro cdigo. El mtodo privado indica que el mtodo puede ser llamado solo por otros mtodos dentro de la clase. El mtodo protected es descrito ms adelante.

M.C. Miriam Zulma Snchez Hernndez

M.C. Miriam Zulma Snchez Hernndez

M.C. Miriam Zulma Snchez Hernndez

Un mtodo es un bloque de cdigo que tiene un nombre, tipo de acceso, tipo de retorno y una lista de argumentos o parmetros.

Las clases constan de dos elementos principales: variables de instancia y mtodos. Una definicin de un mtodo consta de dos partes: cabecera y cuerpo. Sintaxis:

tipo nombre (lista de parmetros) { //cuerpo del mtodo }

tipo Especifica el tipo de datos devuelto por el mtodo. nombre El nombre que identifica al mtodo

<modifier>* <return_type><name> (<argument>*) { <statement>* }


Los modificadores pueden ser public, protected o private. El modificador de acceso pblico indica que el mtodo puede ser llamado desde otro cdigo. El mtodo privado indica que el mtodo puede ser llamado solo por otros mtodos dentro de la clase. El mtodo protected es descrito ms adelante.

El operador punto(.) permite accesar a atributos y mtodos no privados de una clase. Dentro de un mtodo no se necesita usar esta notacin para accesar miembros locales del mtodo. Generalmente se crean mtodos set() y get() para accesar a miembros de un objeto que no es local.

El mtodo calling es el que invoca o llama a otro mtodo para hacer algn trabajo. Inversamente, el mtodo worker hace algn trabajo para el mtodo que lo invoc.

***Llamar un mtodo en la misma Clase es fcil. Solo incluye el nombre del mtodo worker y sus argumentos si tiene. --Modificar el de la clase String sin crear objeto

Los mtodos y variables que son nicos en una instancia son llamadas mtodos de instancia y variables de instancia. Existen mtodos que no requieren instanciacin, como el mtodo main. Este es llamado mtodo de clase o mtodo esttico, ya que lo puedes invocar sin crear primero un objeto. Similarmente, las variables de clase o variables static se pueden usar sin crear un objeto. public class Habitacin{ static int Bao; } System.out.println(Habitacin.Bao);

Todas las aplicaciones Java comienzan llamando al mtodo main() que se sita en la clase cuyo nombre ha sido dado a la mquina virtual Java (JVM) para comenzar la ejecucin del programa.

No todas las clases necesitan un mtodo main(),

solo las clases que son el punto de arranque del programa. El mtodo main() se declara static, ya que es llamado por la mquina Java en tiempo de ejecucin antes de que se cree cualquier objeto. Los argumentos que se pasan al mtodo main() pueden ser cualquiera de la lnea de rdenes que se introduce cuando se ejecuta el programa.

Ejemplo: La clase Prrafo contiene slo el mtodo main(). ste consta de una lnea de cdigo para dar salida por pantalla a la frase Este es el verbo junto a la cadena args[0] de la lnea de rdenes

public class Parrafo {


public static void main(String args[]) { System.out.println(Esto es lo que escribiste + args[0]); }

Este archivo se compila y se ejecuta en modo lnea de rdenes. java Parrafo HOLA La salida por pantalla ser Esto es lo que escribiste HOLA

**Los argumentos de la lnea de rdenes se consideran argumentos del mtodo main()

La sentencia return se utiliza para salir del mtodo actual y devolver el valor especificado por el tipo de retorno del mtodo. Si el tipo de retorno del mtodo es void, la palabra reservada return se utiliza sola o se omite.
class Rectangulo { private double base, altura; public Rectangulo(double b, double h) { base = b; altura=h}

public class Retorno { public static void main(String args[]){ Rectangulo r = new Rectangulo(3.0,7.0); System.out.println(El rea es + r.calcArea());

}
}

public double calcArea()


{ return base*altura; } }

class Matem { static long factorial (int n){ long p=1; for (int i=2;i<=n; i++)

p*=i;
return p; } // class CalculoFact { public static void main(String args[]) {

final int M=15;


for (int n=1; i<=M; i++) System.out.println (n + ! = + Matem.factorial(n); }

Cada mtodo tiene un tipo asociado que se utiliza para controlar el acceso al mtodo. El tipo de acceso puede estar ausente (no se especifica), public, private o protected
Un mtodo public se puede llamar por cualquier cdigo que tenga la acceso a la clase. Un mtodo private solo se puede llamar desde otro mtodo de la clase en que se define el mtodo privado. Un mtodo protected se puede llamar desde otro mtodo de la clase en que mismo mtodo est definido y por cualquier otro mtodo de las clases que heredan de la clase en que est definido el mtodo. Tambin est disponible en cualquier objeto de las clases pertenecientes al mismo paquete que la clase en que est definido el mtodo. Si no se especifica ningn tipo de acceso, se utiliza el acceso por defecto, que significa que el mtodo es accesible a todas las clases contenidas en el mismo paquete, pero no es accesible fuera de ese paquete.

package dolmen; public class Primera { private void goliar() {} public double homero() { goliar(); } protected void jureste() {} String salustio() {} } public class Segunda { public void balsas() { Primera p = new Primera(); p.goliar(); //error, el mtodo goliar es privado p.salustio(); //Correcto, esta en el mismo paq } } //fin del paquete

import dolmen.*;
public class Prueba { public static void main (String args[]) { Segunda st=new Segunda(); Primera pt=new Primera(); st.balsas(); Correcto, es publico pt.homero(); //Correcto, es pblico pt.salustio(); //Error, no esta en el mismo //paquete } }

Los argumentos se pasan a los mtodos en Java por valor. Se hace una copia del tipo de dato primitivo (int, float, ) o la referencia al objeto de la clase o array y se pasa al mtodo. Se suele denominar parmetro a la variable definida en el mtodo y que tiene un valor cuando se llama al mtodo (a veces tambin se le conoce como parmetro formal) y argumento (a veces tambin se le conoce como parmetro real) es el valor que se pasa al mtodo cuando se invoca.

cuadrado(23)
Pasa 23 como argumento

int cuadrado (int n)

n recibe el valor 23

Paso por valor (tambin llamado paso por copia) significa que
cuando Java compila el mtodo y el cdigo que llama al mtodo, el mtodo recibe una copia de los valores de los parmetros. Si se cambia el valor de un parmetro variable local, el cambio solo afecta al mtodo y no tiene efecto fuera del mtodo. En la tcnica de paso por parmetro por valor, el mtodo receptor no puede modificar la variable del mtodo (parmetro pasado).

void calMetodo() { int i=6; metodo2(i); }

6
void metodo2(int n) { int k=9; n+=k; }

class porValor { public static void main (String args[]) { int n=10; System.out.println(Antes de llamar a demoLocal, n= + n);

demoLocal(n);
System.out.println(Despus de la llamada, n= + n); } static void demoLocal(int valor) {

System.out.println(Dentro de demoLocal, valor= + valor);


valor=999; System.out.println(Dentro de demoLocal, valor= + valor); }

class Miriam {
String fecha; int dias; Miriam() { fecha=17-04-2007; dias=22; } void mostrar() { System.out.println(Fecha actual: + fecha + \t Dias = + dias); } }

class PorValorObjeto {
public static void main(String args[]){ Miriam mir=new Miriam(); System.out.println(Propiedades del objeto en la

creacin);
mir.mostrar(); modifica(mir); System.out.println(Propiedades del objeto

modificado: );
mir.mostrar(); } static void modifica(Miriam obj) {

obj.fecha = 22-05-1972;
obj.dias = 22; } }

Los mtodos abstractos se utilizan en clases abstractas para imponer una cierta funcionalidad a las subclases de las clases abstractas. Los mtodos abstractos se designan por la palabra reservada abstract y no tienen cuerpo. La implementacin de los mtodos abstractos se deja a las subclases. Por ejemplo, en una clase Figura se definen los mtodos abstractos calcularArea() y Perimetro(). Las subclases Circulo y Rectangulo tendran sus propias implementaciones de estos mtodos.
Figura
Definicin de calcularArea() Perimetro()

Circulo

Rectngulo

Implementacin de calcularArea() Perimetro()

En Java pueden haber mtodos en una clase que tengan el mismo nombre pero diferentes argumentos, a esto se le conoce como Sobrecarga de mtodos. SOBRECARGA es mismo nombre de mtodo, distintos argumentos y puede retornar diferente valor.

Ejemplo: public int sum(int num1, int num2); public int sum(float num1, float num2, int num3); public int sum(int num1, float num2);

public class TestCalculadora { public static void main(String args[ ]) { System.out.println("La suma es: "+ Calculadora.suma(5, 4)); System.out.println("La suma es: "+ Calculadora.suma(5.5F, 4.3F)); System.out.println("La suma es: "+ Calculadora.suma(5, 4.5F, 6)); public class Calculadora { } public static int suma(int num1, int num2) { } System.out.println("Mtodo suma1"); return num1 + num2; }

TestCalculadora.class

public static float suma(float num1, float num2) { System.out.println("Mtodo suma2"); return num1 + num2; }

Calculadora.class
{

public static float suma(int num1, float num2, int num3) System.out.println("Mtodo suma3"); return num1 + num2 + num3; } }

Si un mtodo es definido en una subclase con el mismo nombre, el mismo tipo de retorno y exactamente la misma lista de argumentos de un mtodo de la clase padre, entonces el nuevo mtodo est sobreescribiendo al anterior. Un mtodo que es sobreescrito tiene distinto comportamiento que el mtodo que lo sobreescribe.

package figuras; public abstract class Figuras { public Figuras() { } public abstract void CalculoArea(); } -----------------------------------------------------------------------------------------------package figuras; import java.util.*; import figuras.Figuras.*; public class FigurasTest { public static void main(String[] args) { Collection <Figuras> lista = new ArrayList <Figuras>(); lista.add(new Triangulo()); lista.add(new Circulo()); lista.add(new Cuadrado()); for(Figuras i: lista)//nuevo for i.CalculoArea(); } }

package figuras; public class Circulo extends Figuras { public void CalculoArea() { double pi=3.1416,area=0.0; int radio=10; area=(pi*radio)*(pi*radio); System.out.println("El area de un circulo es: "+area); } } ---------------------------------------------------------------------------------------------------------------------package figuras; public class Triangulo extends Figuras{ public void CalculoArea() { int base=10,altura=10; double area=0.0; area=(base*altura)/2; System.out.println("El area del triangulo es: "+area); } }

Ejercicios que ejemplifican varios de los conceptos revisados en la unidad

import javax.swing.*; public class PosNeg { public static void main(String args[]) { int num=Integer.parseInt(JOptionPane.showInputDialog("Dame un nmero: ")); if (SeraPosNeg(num)=='P') JOptionPane.showMessageDialog(null, "El nmero "+ num+" es Positivo","POSITIVO O NEGATIVO",JOptionPane.PLAIN_MESSAGE); else JOptionPane.showMessageDialog(null, "El nmero "+ num+" es Negativo o Cero","POSITIVO O NEGATIVO",JOptionPane.PLAIN_MESSAGE); } static char SeraPosNeg (int n){ if(n>0) return 'P'; else return 'N'; } }

import javax.swing.*; public class UnoDivideOtro { public static void main(String args[]){ int num1=Integer.parseInt(JOptionPane.showInputDialog("Dame un nmero entero: ")); int num2=Integer.parseInt(JOptionPane.showInputDialog("Dame otro nmero entero: ")); if (divide(num1, num2)) JOptionPane.showMessageDialog(null, "El nmero "+ num1+" ES DIVISIBLE POR "+ num2,"DIVIDE",JOptionPane.PLAIN_MESSAGE); else JOptionPane.showMessageDialog(null, "El nmero "+ num1+" NO ES DIVISIBLE POR "+ num2,"DIVIDE",JOptionPane.PLAIN_MESSAGE); } static boolean divide(int n1, int n2){ if (n1%n2==0) return true; else return false; } }

Un constructor es un conjunto de instrucciones diseadas para inicializar una instancia. Los parmetros pueden ser pasados al constructor de la misma manera que un mtodo. Su declaracin bsica es: [<modifier> <class_name> (<argument>*) { <statement> }

***Los constructores no son mtodos, ya que no pueden retornar valores y no tienen herencia.

Cada clase tiene al menos un constructor. Si no se escribe un constructor, Java proporciona uno por default. Este constructor no tiene argumentos y tiene un cuerpo vaco. Si se declara un constructor en una clase que no tenia constructores, se pierde el constructor por default.

INVOCACION AUTOMTICA DE LOS CONSTRUCTORES

import java.io.*; class MyDate{ public int day; public int month; public int year; public MyDate(int day, int month, int year){ //day=10; month=05; year=2005; this.day=day; this.month=month; this.year=year; } } public class TestMyDate { public static void main(String args[]){ MyDate fecha = new MyDate(18,05,72); System.out.println("El dia es: "+ fecha.day); System.out.println("El mes es: "+ fecha.month); System.out.println("el ao es: "+ fecha.year); } }

Los constructores son estructuras parecidas a los mtodos que son invocados

automticamente cuando se instancia un objeto.


Los constructores son usualmente usados para inicializar valores en un objeto. El nombre de un constructor debe ser el mismo de la clase. Puede o no tener argumentos, y puede o no, tener lneas de cdigo en su cuerpo.

public class ConstructorPlayera { private int playeraID = 0; private String description = "-descripcion requerida-"; //Los cdigos de color son R=Red, B=Blue, G=Green, U=Unset private char colorCode = 'U'; private double precio = 0.0; private int cantidadInStock = 0; public ConstructorPlayera(char Codeinicial) { switch(Codeinicial){ case 'R': case 'G': case 'B': colorCode = Codeinicial; break; default: System.out.println("Cdigo de color invlido, use R,G public class ConstructorPlayeraTest { o B"); public static void main(String args[]) { }//fin del case ConstructorPlayera myPlayera = new ConstructorPlayera('R'); }//Fin del constructor char colorCode; public char getColorCode(){ colorCode = myPlayera.getColorCode(); return colorCode; System.out.println("Cdigo del color: " + colorCode); } } } }

Asi como los mtodos, los constructores pueden ser sobrecargados. La sobrecarga de constructores ofrece una variedad de maneras en que los objetos pueden ser creados e inicializados usando una sola clase.

public class ConstructorPlayera{

public ConstructorPlayera(); public ConstructorPlayera(char codeInicial); public ConstructorPlayera(char codeInicial, int quantityInicial);

Potrebbero piacerti anche