Professional Documents
Culture Documents
TEMA 3
Programacin Orientada a Objetos
La programacin orientada a objetos es otra tcnica para implementar el famoso
dicho divide y vencers. La idea es encapsular datos y mtodos en objetos, de
forma que cada objeto sea semiautnomo, encerrando mtodos y datos privados o
internos. De esta forma, el objeto puede interactuar con el resto del programa por
medio de una interfaz bien definida por sus mtodos pblicos, es decir, invocando
sus mtodos desde fuera del objeto.
Objeto
Los objetos permiten tener un control total sobre quin o qu puede acceder a
sus variables y mtodos, es decir, pueden tener componentes pblicos, a los que
podrn acceder otros objetos, o componentes privados, a los que nicamente
puede acceder l. Los componentes pueden ser tanto las variables como los
mtodos de ese objeto.
objeto coche
Un ejemplo de creacin de objetos variables internas
atendiendo a la definicin informal dada color
en el objeto coche podra ser la siguiente: marca
mtodos del objeto
coche c= new coche(); damecolor
asignamarca
Clase
Una clase es un prototipo o plantilla que define las variables y los mtodos
comunes a un cierto tipo de objetos. Son los moldes de los cuales se pueden crear
mltiples objetos del mismo tipo. La clase define las variables y mtodos comunes
a los objetos del mismo tipo pero despus, cada objeto tendr sus propios valores
para esas variables.
Lo primero es crear una clase antes de poder crear objetos o ejemplares de esa
clase.
class coche {
int color;
String marca;
public int damecolor {
return color; }
public String asignamarca {
return marca}
}
Cuando se define una clase, se declara su forma y naturaleza exacta. Esto se hace
especificando los datos que contiene la clase y el cdigo que opera sobre ellos.
Aunque las clases sencillas pueden contener slo cdigo o datos, la mayora de las
clases reales contienen las dos.
Variables
System.out.println(c.color);
Mtodos
La mayor parte de las veces es necesario utilizar mtodos para acceder a las
variables de instancia definidas en una clase. De hecho los mtodos definen la
interfaz de la mayora de las clases. Esto permite que la clase oculte sus
estructuras de datos internos detrs de un conjunto de mtodos.
Constructores
Debido a que los requisitos de inicializacin son tan comunes, Java permite que los
objetos se inicialicen cuando son creados. Esta inicializacin automtica se realiza a
travs de un constructor.
class Caja {
double ancho;
double alto;
double profundidad;
//Constructor
Caja() {
System.out.println(Constructor);
ancho = 10;
alto = 10;
profundidad = 10;
}
}
Es importante saber que la declaracin de una clase slo crea un modelo o patrn,
no crea un objeto real. En el ejemplo anterior no se crea ningn objeto del tipo
Caja. Para crear un objeto es necesario primero declarar el objeto y luego crearlo a
travs del operador new.
Para crear un objeto del tipo Caja es necesario utilizar las siguientes sentencias:
Cuando se ejecute esta sentencia, miCaja ser una instancia de Caja, es decir,
tendr realidad fsica.
Cada vez que se crea una instancia de una clase, se est creando un objeto que
contiene su propia copia de las variables de instancia definidas por esa clase. Cada
objeto del tipo Caja contendr su propia copia de las variables de instancia ancho,
alto y profundidad. Para acceder a estas variables se utiliza el operador .. Este
operador relaciona el nombre del objeto con el nombre de una variable de
instancia. Por ejemplo, para asignarle a la variable ancho de miCaja el valor 100 se
utiliza la siguiente sentencia:
miCaja.ancho = 100;
Mensaje
Caractersticas de la POO
Encapsulamiento
class Automovil {
//Caractersticas o tipos de datos de la clase Automovil
String estadoRuedas;
boolean lucesEmergencia;
double velocidad;
Herencia
class Caja {
//Esta clase ser superclase
double ancho;
double alto;
double profundidad;
Caja() {
System.out.println(Constructor);
ancho = 10;
alto = 10;
profundidad = 10;
}
void volumen() {
System.out.println(El volumen es: );
System.out.println(ancho * alto * profundidad);
}
}
En Java no est permitida la herencia mltiple, es decir, no est permitido que una
misma clase pueda heredar las propiedades y los mtodos de varias clases padres.
La explicacin es que a la hora de crear este lenguaje de programacin, se
consider que esta propiedad podra derivar en un aumento de la complejidad en el
cdigo. Sin embargo para no privar a Java de la potencia de la herencia mltiple, se
introdujo un nuevo concepto de clase, la interface.
Una interface es igual que una clase con dos diferencias esenciales, sus mtodos
estn vacos, no hacen nada, y a la hora de definirla en vez de emplear la palabra
clave class se emplea interface.
interface automovil {
Ejemplo 3.6: Declaracin de la interface. Deben figurar todos los mtodos que figurarn en
la clase que la implemente.
Recordar que para que un mtodo sobrescriba a otro ha de tener el mismo nombre,
se le han de pasar los mismos datos, ha de devolver el mismo tipo de dato y ha de
tener el mismo modificador de acceso (publica, privada o protegida como ya se
ver ms adelante).
coche1(){
velocidad = 10;
}
public void acelera() {
velocidad++;
}
public void frena() {
velocidad--;
}
public void para() {
velocidad = 0;
}
}
Polimorfismo
Sobrescritura de mtodos
class Caja {
double ancho;
double alto;
double profundidad;
Caja() {
System.out.println(Constructor);
ancho = 10;
alto = 10;
profundidad = 10;
}
void volumen() {
System.out.println(El volumen es: );
System.out.println(ancho * alto * profundidad);
}
void volumen(double w, double, h, double p) {
ancho = w;
alto = h;
profundidad = p;
System.out.println(El volumen es: );
System.out.println(ancho * alto * profundidad);
}
public static void main(String args[]) {
Caja miCaja = new Caja();
miCaja.volumen();
miCaja.volumen(10,15,20);
}
}
Sobrecarga de Constructores
class Caja {
double ancho;
double alto;
double profundidad;
Caja() {
System.out.println(Constructor);
ancho = 10;
alto = 10;
profundidad = 10;
}
void volumen() {
System.out.println(El volumen es: );
System.out.println(ancho * alto * profundidad);
}
Sobrescritura de mtodos
double peso;
CajaPesada() {
ancho = 10;
alto = 10;
profundidad = 10;
peso = 100;
}
void volumen() {
System.out.println(El volumen es: + ancho * alto * profundidad);
System.out.println(El peso es: + peso);
}
this
Algunas veces un mtodo necesita hacer referencia al objeto que lo invoc. Para
permitir esto. Java define la palabra clave this, que puede ser utilizada dentro de
cualquier mtodo para referirse al objeto actual, this es siempre una referencia al
objeto sobre el que ha sido llamado el mtodo. Se puede utilizar this siempre que
se quiera una referencia a un objeto del tipo de la clase actual.
super
double peso;
CajaPesada() {
super(20,20,20);
}
void volumen() {
System.out.println(El volumen es: + ancho * alto * profundidad);
System.out.println(El peso es: + peso);
}
Hay ocasiones en las que se necesita definir un miembro de una clase que ser
utilizado independientemente de cualquier objeto de esa clase. Normalmente a un
miembro de una clase se debe acceder a travs de un objeto de esa clase. Sin
embargo, es posible crear un miembro que pueda ser utilizado por s mismo sin
referirse a una instancia especfica.
Los siguientes ejemplos muestran el uso de la palabra clave static para declarar
variables y mtodos estticos
class EjemploStatic {
class UtilizaEjemploStatic {
Modificadores de acceso
Es obvio que dentro de una clase, todas las variables y mtodos son visibles para
todas las otras partes de la misma clase, dado que la clase es la unidad de
abstraccin ms pequea en Java. Por la existencia de paquetes, Java debe
distinguir cuatro categoras de visibilidad entre elementos de clase:
Misma clase
SI SI SI SI
Otra clase del mismo paquete
SI NO SI SI
Clase de diferente paquete
NO NO NO SI
Subclase del mismo paquete
SI NO SI SI
Subclase de diferente paquete
NO NO SI SI
Clases Abstractas
Podra haber un mtodo dibujar comn a todas las clases anteriores, pero esta
operacin se llevara a cabo de forma diferente en el caso de cada figura. Por otra
parte la accin dibujar no tiene sentido para la clase genrica FiguraGeometrica, ya
que esta clase representa una abstraccin del conjunto de figuras posibles.
Para resolver esta problemtica Java proporciona las clases y mtodos abstractos.
Un mtodo abstracto es un mtodo declarado en una clase para el cual esa clase
no proporciona la implementacin (el cdigo). Una clase abstracta es una clase que
tiene al menos un mtodo abstracto. Una clase que extiende a una clase abstracta
debe implementar los mtodos abstractos (escribir el cdigo) o bien volverlos a
declarar como abstractos, con lo que ella misma se convierte tambin en clase
abstracta.
Ejemplo 3.15: Declaracin de una clase abstracta y otra que extiende de ella.
Imaginemos que se crea una clase llamada a que tiene un mtodo print, que
visualiza una cadena de caracteres obtenindola de una llamada al mtodo
getData:
class a {
El mtodo getData no tiene ninguna String getData();
implementacin en la clase a ya que se quiere public void print() {
que los desarrolladores especifiquen qu datos System.out.println(
se van a visualizar. Para hacer que stos sepan getData());
que deben implementar el mtodo getData, se
puede hacer abstracto, lo que significa que }
tambin la clase lo ser. Por lo tanto la }
definicin de la clase a quedara de la
siguiente manera:
abstract class a {
class b extends a{
String getData() {
return Hola desde Java!!;
}
}
b b1 = new b();
b1.print();
}
}
Paquetes en Java
Los paquetes resuelven el problema del conflicto entre los nombres de las
clases. Al crecer el nmero de clases crece la probabilidad de designar con el
mismo nombre a dos clases diferentes.
La sentencia import
import java.awt.Font;
import java.awt.*;
Para la creacin de un objeto de la clase Font podemos seguir elegir dos formas:
import java.awt.*;
java.applet Este paquete contiene clases diseadas para usar con applets.
Hay una clase Applet y tres interfaces: AppletContext, AppletStub y
AudioClip.
java.lang Este paquete incluye las clases del lenguaje Java propiamente
dicho: Object, Thread, Exception, System, Integer, Float, Math, String, etc.
http://java.sun.com/j2se/1.4.2/docs/api/index.html
LABORATORIO
La clase DistanciPunto se utiliza para crear objetos del tipo Punto2D. En este
ejemplo se utiliza el mtodo esttico sqrt de la clase Math para calcular la raz
cuadrada de su parmetro.
class alfa {
private int j;
private int k;
class beta {
class Perro {
{
public static void main(String args[])
{
Perro ladrador = new Perro();
Perro mordedor = new Basenji();
ladrador.ladrido();
mordedor.ladrido();
}
}
}
}
Repasando Herencias
Cree una subclase de CajaPesada que herede todas las caractersticas de Caja y
CajaPesada, y aada un campo costo, el cual debe guardar el costo del envo de un
paquete.
EJERCICIOS
Cree una clase NumeroDecimal, defina dos propiedades (variables o atributos) que
son: entero, decimal; como lo indican sus nombres, representan a un nmero
decimal.
Implemente la anterior clase con una clase principal y ejecute los mtodos
anteriores.
Cree la clase abstracta FIGURAS2D que permita DEFINIR los mtodos CalculaArea y
CalculaPerimetro. Adems deber crear tres subclases de FIGURAS que
implementen o desarrollen dichos mtodos (Cuadrado,Crculo,Tringulo)
Cree la clase abstracta NUMEROS que tenga dos atributos: NUM1 y NUM2, en la
cual estarn definidos los mtodos SUMA y RESTA. Adems cree una subclase de
NUMEROS que implemente sus mtodos con la particularidad de que esta subclase
slo podr operar con nmeros del 0 al 9