Sei sulla pagina 1di 72

Programacin OO

Proyecto Programar Vctor Giordano

Temario
Clases Miembros
Atributos Mtodos
Constructores El this

Mensajes Atributos y Variables Locales Operador de acceso a Miembros Accesibilidad a miembros Encapsulacin Interfaz

Prologo
Ya estuvimos viendo los componentes bsicos del lenguaje java
Reglas Lxicas, Sintcticas y Semnticas Datos Operaciones elementales

Los programas que hicimos son del estilo estructurados Es hora de dar el paso y aplicar la POO

Prologo (II)
La POO no deja de ser imperativa
Solo que cambiamos el enfoque de abordar el problema.
En vez hacer nfasis en separar los datos de las operaciones que manipulan estos datos Pasamos a considerar los datos y las operaciones que los manipulan encapsulados en objetos.

Prologo (III)
La POO es tambin en parte estructurada y modular
Hay seguir un estilo disciplinado de escritura en la programacin Separar en mdulos (Clases) diferentes partes del programa.

Es ms bien una continuacin

Prologo (IV)
En adelante nos vamos a dedicar a estudiar los aspectos y las herramientas que nos brinda las POO para afrontar la tarea de realizar programas
Vamos a salir del main Vamos a pensar en clases y objetos, distribuyendo a los algoritmos y datos a lo largo de los mtodos y atributos.

Clases
Definicin Terica: Concepto que abarca a un conjunto de objetos con caractersticas similares. Definicin Prctica: Una clase es un molde a partir del cual creamos objetos
En este molde definimos las caractersticas generales de los objetos que contiene

Porque un molde?
Tomemos la clase Bicicleta
Con esta puedo crear 1, 10, 2000 bicicletas
Cada una con su estado particular.

Si tuviera que salir a describir 2000 bicicletas por separado (sin el molde) tendra muchsimo trabajo por hacer.

Diseamos la clase una vez y la usamos para construir tantos objetos como queramos.

Clases (II)
Disear una clase consiste en especificar para cada objeto de la misma:
Sus atributos Sus mtodos Como se construyen objetos

Clases (III)
Una clase en Java se guarda en un archivo de texto (el cual podemos abrir con un editor de notas y ver perfectamente su contenido). Recuerden siempre que el nombre de archivo tiene una extensin .java. Y la definicin de la clase que contiene debe tener exactamente el mismo que el nombre del archivo. As si tengo el archivo Persona.java entonces la clase se va llamar Persona.

Estructura de una clase


Sintaxis:
public class <IDENTIFICADOR CLASE> { <CUERPO DE LA CLASE> }

Estructura de una clase (II)


Ejemplo: (En el archivo Bicicleta.java)
public class Bicicleta { }

La palabra Bicicleta es un identificador que definimos para poder hacer referencia a la clase que envuelve a los distintos objetos bicicletas El comienzo y el final de las llaves indican el cuerpo de la clase

Estructura de una clase (III)


El cuerpo se compone de:
Miembros
Atributos Mtodos Constructores

Atributos
Las propiedades o caractersticas que tiene un objeto se almacenan en variables que se conocen como atributos.

Atributos (II)
Se declaran dentro del cuerpo de la clase
Son variables que guardan los datos que corresponden al valor de un propiedad de un objeto. El valor de todos los atributos de un objeto en un instante determina su estado

Atributos (III)
Sintaxis:
public class XX {
<MODIFICADORES><TIPO> <IDENTIFICADOR VARIABLE> = <EXPR>;

Atributos (IV)
Ejemplo: public class Bicicleta { private int velocidad; private int cambio; private boolean estaRota; }

As cada bicicleta instanciada de esta clase va a tener su velocidad, su cambio y su indicador de si estaRota o no. Cada instancia tiene un juego de atributos propios con sus valores particulares.

Mtodos
En la Teora: Los mtodos sirven para definir el comportamiento que manifiestan los objetos de una clase. En la Prctica: Son los lugares donde se escriben sentencias para manejar instrucciones y datos
Los algoritmos

Mtodos (II)
Sintaxis:
public class XX { <MODIFICADORES> <TIPO> <IDENTIFICADOR MTODO> (<PARAMETROS>) { <CUERPO DEL MTODO> } }

Son similares a los subalgoritmos que vimos en pseudo cdigo.


Envuelven sentencias Tienen parmetros Tienen un valor retorno (optativo)

Mtodos (III)
Ejemplo:
public class BuenaPersona { public void saludar () { boolean deDia = true; int personasSaludo = 2; if (deDia) System.out.println(Buenas das caballeros); else System.out.println(Buenas tardes caballeros); } }

Nota: Si no hay parmetros, igual deben ir los parntesis de apertura y cierre. Al igual que pseudo cdigo.

Mensajes
Los mtodos son porciones de cdigo ejecutables Cuando un mtodo de un objeto es invocado se dice que se le enva un mensaje o solicitud a tal objeto para que realice esa accin.
Invocar mtodo a del objeto X equivale a enviar mensaje a o solicitud a al objeto X

Modulo Invocante

Objeto x

Mensajes (II)
Un mensaje se compone de:
Objeto receptor Mtodo que se ejecuta Argumentos (si los requiere)

Ejemplos:
scannedor.nextInt(); // envo de mensaje nextInt cadena.lenght(); // envo de mensaje lenght

Mtodos + Atributos
public class Bicicleta { private int velocidad; public void acelerar () { velocidad = velocidad + 1; } }

velocidad tiene la pinta de ser un variable no declarada dentro del mtodo acelerar. !Pero sin embargo funciona! que ocurre?

Mtodos + Atributos (II)


public class Bicicleta { private int velocidad ; public void acelerar () { velocidad = velocidad + 1; } }

Con velocidad me refiero automticamente al atributo del objeto que estoy acelerando. Tiene mucho sentido.
Veamos un poco ms porque

Mtodos + Atributos (III)


Mtodo = Funcionalidad de un Objeto
Invocar un mtodo = Solicitar a un objeto que efecta dicha funcionalidad.
No se puede solicitar al aire, necesito a algo que haga eso!

Para invocar un mtodo se requiere un objeto concreto, que es justamente al que le solicitamos que lleve a cabo dicha funcin.

Mtodos + Atributos (IV)


Terico: Dentro del mtodo es el objeto quien ejecuta las sentencias y este tiene conocimiento de sus atributos. Prctico: Dentro de un mtodo que tiene un objeto se puede acceder a cualquiera de sus atributos.
Desde un enfoque PEM* podemos ver a los mtodos como operaciones para modificar datos que se almacenan en los atributos.

Mtodos con valor de retorno


Si el Mtodo retorna un valor, entonces en la ltima lnea se tiene que usar una sentencia especial que indique que valor se retorna. return <EXPRESION>;

La expresin debe ser del mismo tipo que figura en el encabezado.

Mtodos con valor de retorno (II)


public class Matemtico { public double calcularE (int precision) { double ac, d, i; ac = 0; d = 1; for (i = 1;i < precision;i++) { d = d * i; ac = ac + (1 / d); } return ac + 1; } }

Una primera Clase


public class Bicicleta { private int cambioActual; private int velocidad; public void establecerCambio (int nuevoCambio) { cambioActual = nuevoCambio; } public void aplicarFrenos () { velocidad--; } }

Y Ahora la usamos
public class Programa { public static void main (String args[]) { int x = 5 boolean mePersiguenLadrones = true; Bicicleta bici; bici = new Bicicleta (); // instanciamos un objeto bicicleta // la uso pasndole como argumentos valores literales bici.establecerCambio (2); // como le puedo pasar expresiones en general, tambin le puedo pasar expresiones que se calculen con literales bici.establecerCambio (2 + 10); // como sabemos las expresiones tambin pueden componerse de variables, por lo tanto esto es muy valido tambin. bici.establecerCambio (x + 4); if (!mePersiguenLadrones) bici.aplicarFrenos(); // me detengo solo s no me persiguen ladrones. } }

Parmetros y Argumentos
Los parmetros son variables de un mtodo que asumirn un valor cuando se invoca dicho mtodo. El valor que efectivamente se le asigna a un parmetro de un mtodo cuando se invoca se llama argumento.
Dicho valor es el resultado de una expresin que retorna un valor del mismo tipo que del parmetro.

El orden en que se declaran los parmetros y se pasan los argumentos establece la correspondencia entre uno y otro.

Parmetros y Argumentos (II)


La idea de parametrizar un mtodo (agregarle parmetros) es extender o ampliar o generalizar la utilidad del mismo, para que se adapte a diversos usos.

Parmetros y Argumentos (III)


Por ejemplo: (En nuestra clase Bicicleta)
public void acelerar () { aceleracin = aceleracin }

+ 1;

vs.
public void acelerar (int cuanto) { aceleracin = cuanto; }

Con el ltimo podemos


Especificar lo que aceleramos Hasta podemos frenar (if cuanto < 0)

Parmetros y Argumentos (IV)


Los parmetros son variables locales dentro del mtodo (o constructor) en el que se definen, se usan como cualquier otro tipo de variable, sabiendo que una vez que termina el mtodo, estas mueren.

Pit stop de conocimientos


Que vimos:
Ya vimos como disear una clase en trminos de atributos y mtodos. Hemos creado objetos de la misma y los usamos de manera sencilla.

Que falta ver:


Como es esto de crear objetos a partir de una clase
Instanciar una clase

El Constructor
Antes de poder usar un objeto es obligatorio construirlo Para construir objetos usamos los constructores En trminos prcticos: un constructor es un mtodo especial que sirve para inicializar el estado de un objeto.

El constructor (II)
Se declara y define como cualquier otro mtodo solo que el nombre es el mismo que el nombre de la clase y no tiene un tipo de retorno especificado.
public class Bicicleta { private int cambio; private int velocidad; public Bicicleta (int cambioInicial, int velocidadInicial) { cambio = cambioInicial; velocidad = velocidadInicial; } }

Definiendo el Constructor (III)


Si no se provee un constructor, Java proporciona un constructor por defecto sin parmetros. Si se define un constructor (con o sin parmetros) entonces java no hace nada por nosotros y debemos usar solamente el o los definidos. Se pueden definir varios constructores
Se diferencian de otro basndose en la cantidad de parmetros y sus tipos
Mecanismo de sobrecarga

Usando el constructor
Como invoco el constructor para crear objetos? Se lo invoca usando el operador new seguido del nombre del constructor. El nombre del constructor indica:
De que clase se quiere crear un objeto
Nombre constructor = Nombre Clase

Como se va a inicializar.

new != Constructor
El new es un operador que crea una instancia y devuelve una referencia Lo que toma como operando (a derecha) es el constructor que se invoca para inicializar la instancia fabricada.
Dentro del constructor esta el cdigo para inicializarla

Usando el constructor (II)


Empleado e1 = new Empleado (Pepe); Empleado e2 = new Empleado (Ricardo,50); Empleado e3 = new Empleado (Euclides,100); Cada sentencia de construccin tiene 3 partes.
Declaracin: Declaraciones de variables de referencias, si no estaba previamente declarada. Instanciacin: El operador new crea objetos Inicializacin: La invocacin a un constructor, que inicializa los valores de sus atributos y concede un estado inicial.

Usando el constructor (III)


Otro Ejemplo: Bicicleta miBici = new Bicicleta (23,2); El operador new crea una instancia y devuelve una referencia al objeto creado.
Un Objeto Bicicleta

23 Velocidad 2 Cambio

miBici

Usando el constructor (IV)


La referencia devuelta por el operador new no tiene que ser asignado a una variable de forma obligatoria.
int altura = new Rectangle ().altura; double hipo = new Geometra().calcularSuperficieRectangulo(20,30);

Uso de palabra reservada this


Dentro de un mtodo de instancia o un constructor, this es una variable que guarda la referencia al objeto actual
Aquel cuyo mtodo se esta invocando Aquel que se esta construyendo

El uso ms comn del this es porque el nombre de un atributo es ocultado por un parmetro del mismo nombre.

Ejemplo prctico
public class Persona { private String nombre; public Persona (String nombre) { Como diferencio el atributo nombre del parmetro nombre? } }

Ejemplo prctico
public class Persona { private String nombre; public Persona (String nombre) { this.nombre = nombre; } } this.nombre: Me refiero al atributo nombre (a secas): Me refiero al parmetro. Todo esto se extiende para el caso de cualquier variable local.

Una clase ms completa


public class Bicicleta { /* Atributos de una bicicleta*/ private int velocidad; private int cambio; /* Constructor sin parmetros */ public Bicicleta () { velocidad = 0; cambio = 1; } /* Constructor con parmetros */ public Bicicleta (int velocidad, int cambio) { this.velocidad = velocidad; this.cambio = cambio; } /* Continua con Mtodos en la siguiente diapositiva*/

Una clase ms completa


public void subirCambio() { cambio = cambio + 1; } public void bajarCambio() { cambio = cambio - 1; } public void acelerar(int incremento) { velocidad = velocidad + incremento; } public void desacelerar(int decremento) { velocidad = velocidad - decremento; } public int obtenerVelocidad() { return velocidad; } }

Usando dicha Clase


public class Principal { public static void main(String[] args) { Bicicleta b1 = new Bicicleta (); Bicicleta b2 = new Bicicleta (); b2.acelerar(10); b2.subirCambio(); b1.acelerar (10); b1.subirCambio(); b2.bajarCambio(); b2.desacelerar (10); System.out.println(Bicicleta 1: Velocidad vale b1.obtenerVelocidad()) System.out.println(Bicicleta 2: Velocidad vale b2.obtenerVelocidad()) } }

+ +

Atributos y Variables Locales


No confundir Un atributo es una variable declarada dentro del cuerpo de una clase
Es accesible mientras se tenga una referencia al objeto

Un variable local es una variable declarada dentro del cuerpo de un mtodo o un parmetro del mismo.
Es accesible solamente dentro del mtodo.

Atributos y Variables Locales (II)


public class Bicicleta { /* Atributos de una bicicleta*/ private int velocidad; private int cambio; public int subirCambio() { int velocidadPerdida = velocidad / (6 cambio); // variable local if (cambio < 6) { cambio++; velocidad -= velocidadPerdida; } } }

Pequeo ejercicio Grupal


Diseemos una clase para modelizar a todos los autos del mundo.
Atributos? Mtodos?

Usmosla dentro de otra clase que tenga el mtodo main.

Trabajando con objetos


Ya vimos que en las variables de un tipo de clase guardamos referencias a objetos Ahora como uso dichos objetos?
Como le envo mensajes? Cmo puedo acceder a sus atributos?

En forma general, como accedo a los miembros de un objeto?.

Operador de Acceso A Miembros


El punto . es el operador de acceso a los miembros de un objeto. En total necesito tres cosas para laburar con objetos:
Una referencia El operador . Nombre del miembro
Nombre del atributo Nombre del mtodo con sus argumentos

Pregunta
Se puede acceder a todos los miembros?

Respuesta
No! Esto depende de desde donde se quiera acceder y la visibilidad que tenga el miembro.

Acceso a Miembros
Vamos a empezar dos visibiblidades bsicas:
private: Los miembros declarados como private no son accesibles desde otras clases, solo se pueden acceder desde la misma clase que los define. public: Los miembros declarados como public son accesibles desde otras clases.

La visibilidad es un modificador de un miembro.

Aplicando los modificadores


public class Bicicleta { private int velocidad; private int cambio; public void acelerar (int cuanto) {}

Los atributos son privados Los mtodos son pblicos

Entiendo los modificadores


public class Principal { public static void main(String[] args) { Bicicleta b1 = new Bicicleta (); b1.velocidad = 10; b1.acelerar(10); } }

No se puede acceder al atributo aceleracin desde la clase Principal porque es privado Se puede acceder al mtodo acelerar desde la clase Principal porque es pblico.

Acceso a Miembros (II)


public class Principal { public static void main(String[] args) { Bicicleta b1 = new Bicicleta (); b1.velocidad = 10 b1.acelerar(10); } } public class Bicicleta { private int velocidad; private int cambio; public void acelerar (int cuanto) {} }

Atributos privados Mtodos pblicos

Acceso a Miembros (II)


public class Principal { public static void main(String[] args) { Bicicleta b1 = new Bicicleta (); b1.velocidad = 10 b1.acelerar(10); } } public class Bicicleta { public int velocidad; public int cambio; private void acelerar (int cuanto) {} }

Atributos pblicos Mtodos privados

Acceso a Miembros (III)


public class Principal { public static void main(String[] args) { Bicicleta b1 = new Bicicleta (); b1.velocidad = 10 b1.acelerar(10); } } public class Bicicleta { private int velocidad; private int cambio; private void acelerar (int cuanto) {} }

Atributos privados Mtodos privados

Acceso a Miembros (IV)


public class Principal { public static void main(String[] args) { Bicicleta b1 = new Bicicleta (); b1.velocidad = 10 b1.acelerar(10); } } public class Bicicleta { public int velocidad; public int cambio; public void acelerar (int cuanto) {} }

Atributos pblicos Mtodos pblicos

Acceso A Miembros (V)


Y porque la complico con permisos de acceso? Por qu no hago todo pblico y me dejo de joder?
Parece tentador, pero tiene sus inconvenientes.

Acceso a Miembros (VI)


Que pasa si sabemos que una bicicleta solamente tiene 6 cambios
public class Principal { public static void main(String[] args) { Bicicleta b1 = new Bicicleta (); b1.cambio = 7 } }

Si bien es correcto el cdigo y el programa compilara, y hasta, ejecutara, estoy estableciendo un estado invlido.

Acceso a Miembros (VII)


Si deniego el acceso a sus atributos, y lo hago indirectamente mediante los mtodos bajarCambio() y subirCambio(), en ellos puedo controlar no excederme del rango permitido. Adems
Puedo despreciar el detalle de que los cambios van entre 1 y 6, solamente subo y bajo. Permite evitar que se salte del primer cambio al sexto, estoy obligando, a ir subiendo y bajando cambios de una.

Encapsulacin
Estos permisos de acceso a miembros son el fundamento del mecanismo de encapsulacin, el cual permite ocultar detalles de la implementacin
Invocamos los mtodos para gestionar el estado de un objeto y no lo modificamos directamente usando sus atributos.

Encapsulacin (II)
Que ganamos? No tenemos que ser conocedores de las reglas internas o la lgica que lleva un objeto, solamente lo usamos y sabemos que los mtodos harn el trabajo que necesitamos. Por ejemplo:
scanner.nextInt(); A alguno le intereso se efecta internamente la lectura del teclado?

Encapsulamiento
Los objetos deben saber cmo comportarse
Deben manejar su propio comportamiento No debemos manipular sus detalles desde afuera En vez de: cuenta setSaldo: [ cuenta getSaldo + monto ]. Hacemos: cuenta depositar: monto.

Interfaz
Se trata de la parte del objeto que es visible para el resto de los objetos.
Es decir, que es el conjunto de miembros visibles un objeto que permiten operarlo.

Generalmente, es la parte pblica. Encapsular implica dejar al descubierto una interfaz.

Ejercitacin
Prctica 1

FIN

Potrebbero piacerti anche