Sei sulla pagina 1di 33

ORIENTACION A OBJETOS EN JAVA

Orientación a Objetos en Java

OBJETIVO
•Aterrizar los conceptos teóricos del
paradigma de programación orientada a
objetos al Lenguaje Java.

1 de 33
ORIENTACION A OBJETOS EN JAVA

AGENDA

•OBJETOS EN JAVA
•EL CICLO DE VIDA DE UN OBJETO
•CLASES
•METODOS
•DATOS MIEMBRO DE UNA CLASE
•CONTROL DE ACCESO A DATOS MIEMBRO
•CONSTRUCTORES

2 de 33
ORIENTACION A OBJETOS EN JAVA

LOS OBJETOS EN JAVA

Fruta manzana=new
Fruta();
Un objeto en el lenguaje
Java es una instancia de
una clase o de un
arreglo. Las referencias
de objetos son
“punteros” a esos
objetos, y una referencia
especial null, se refiere a
ningún objeto

3 de 33
ORIENTACION A OBJETOS EN JAVA

EL CICLO DE VIDA DE UN OBJETO


1. CREACION (Inicialización): Se hace creando una instancia de una
clase. Se usa el operador New:
Fruta manzana = new Fruta();
Fruta manzana = new Fruta(50,8);

2. UTILIZACION
a) Manipulando los datos miembro
b) Manipulando las variables del objeto a través
de los métodos.
<referenciaObjeto>.<variable>
<referenciaObjeto>.nombreMetodo(listaArgumentos)
3. DESTRUCCION(a través del reciclador de memoria (garbage
collector) y la finalización del objeto. Un objeto es elegido por el
reciclador de memoria cuando no hay más referencias a ese objeto.
Antes que un objeto llegue a ser basura recopilada, el garbage collector
da la oportunidad de destruirse al objeto por si mismo a través de la
llamada al método finalize() del objeto.
4 de 33
ORIENTACION A OBJETOS EN JAVA

CLASES

Las clases son lo más simple e importante de


Java. Una clase es un prototipo que puede ser
usado para crear muchos objetos. Todo en
Java hace parte de una clase.

5 de 33
ORIENTACION A OBJETOS EN JAVA

DEFINICION DE UNA CLASE


Para crear una clase el programador debe
basarse en una clase existente. La nueva clase
se llama subclase de la otra, la cual es
conocida como superclase.
2 componentes: declaración y cuerpo de la
clase
class NombreClase{
...
Cuerpo de la clase
...
}
6 de 33
ORIENTACION A OBJETOS EN JAVA

DEFINICION DE UNA CLASE


Sintaxis más general de la declaración de una clase:
[modificadores]class NombreClase[extends NombreSuperClase][implements 
NombreInterfaces]{

   ...
   Cuerpo de la clase
   ...
}

Modificadores: declara si la clase es abstracta, pública o final.

NombreClase: define el nombre de la clase a declarar (empieza con mayúscula)

NombreSuperClase: declara la superclase a la que pertenece la clase

NombreInterfaces: lista las interfaces implementadas por la clase.


Por defecto: es una clase no final, no pública, no abstracta, subclase de Object que no
implementa interfaces.

7 de 33
ORIENTACION A OBJETOS EN JAVA

DECLARACION DE UNA CLASE


Modificadores de una clase
abstract: define una clase abstracta, la cual tiene al menos un método
abstracto. Una clase abstracta no se instancia, sino que se usa como
clase base para la herencia.
Final: declara una clase final, es decir, que no puede ser
subclasificada (por razones de seguridad y por razones de diseño).
Una clase que tiene métodos sin implementar no puede ser final.
Public: se utiliza para declarar clases públicas accesibles desde otras
clases, bien sea directamente o por herencia. Son accesibles dentro del
mismo paquete en el que se han declarado. Para acceder desde otros
paquetes, primero tienen que ser importadas.
Sincronizable: Especifica que todos los métodos definidos en la clase
son sincronizados, es decir, que no se accede a ellos al mismo tiempo
desde hilos distintos.

8 de 33
ORIENTACION A OBJETOS EN JAVA

EL CUERPO DE LA CLASE
Contiene dos secciones: declaraciones de las variables
(estado)y declaraciones de métodos (comportamiento).

DeclaracionClase{
declaracionVariablesMiembro;
declaracionMétodos
}

Ejemplo...

9 de 33
ORIENTACION A OBJETOS EN JAVA

EL CUERPO DE LA CLASE –
public class Fruta EJEMPLO
{
  private int peso;
  private int caloriasxgramo;
  public Fruta()
  {
    peso=0;
    caloriasxgramo=0;
  }

  public Fruta(int peso, int cal)
  {
    this.peso=peso;
    caloriasxgramo=cal;
  }
  public int CalcularTotalCalorias()
  {
    return peso*caloriasxgramo;
  }
  public int getCalorias(){

     return caloriasxgramo;
  }
}

10 de 33
ORIENTACION A OBJETOS EN JAVA

DECLARACION DE VARIABLES
MIEMBRO
Como mínimo, la declaración miembro de una variable tiene dos componentes: el tipo
de la variable y su nombre:

<tipo> Nombre_variable;

En general, la sintaxis es la siguiente:

[especificadorAcceso][static][final][transient][volatile] type NombreVariable

especificadorAcceso: define si otras clases tienen acceso a la variable miembro de


la clase. El acceso a los métodos también es controlado por los mismos
especificadores.
static: indica que la variable es variable miembro de clase en lugar de variable
miembro de instancia. Es decir, solo existirá una copia de la variable en todos los
objetos que se instancien de la misma clase, es como una “variable global” para el
conjunto de objetos de la misma clase. Todas las instancias comparten la misma
copia de las variables de clase de la clase. Se puede accesar a las variables de clase
a través de una instancia o a través de la misma clase.
final: indica que la variable es una constante.
transient: variables que no son parte del estado persistente del objeto.
volatile: significa que la variable es modificada asincrónicamente por hilos corriendo
al mismo tiempo

11 de 33
ORIENTACION A OBJETOS EN JAVA

DECLARACION DE VARIABLES
MIEMBRO
EJEMPLO 1:

class Prueba{
final double AVOGADRO=6.02323;
transient int aleatorio;
volatile int contador;
static int a;
declaracionMetodos();

12 de 33
ORIENTACION A OBJETOS EN JAVA
DECLARACION DE VARIABLES MIEMBRO - EJEMPLO 2:
class UnEnteroX{
static private int x;
static public int getX(){
return x;
}
static public void setX(int nuevoX){
x=nuevoX;
}
}
...
UnEnteroX miX= new UnEnteroX();
UnEnteroX otroX= new UnEnteroX();
miX.setX(2);
miX.setX(3);
System.out.println(“miX.X :“ + miX.getX());
System.out.println(“OtroX.X :“ + otroX.getX());

UnEntero.setX(1);
System.out.println(“Un entero :“ + UnEnteroX.getX());

13 de 33
ORIENTACION A OBJETOS EN JAVA

DECLARACION DE UN METODO
Como mínimo la declaración de un método debe tener el nombre
del método y el valor retornado, así:

tipoRetornado nombreMetodo(){
...
}

tipoRetornado: si no retorna valor debe ser declarado como


void. Se puede retornar tipos de datos simples (int, double,
float, etc) o tipos de datos completos (clases, interfaces,
arreglos)

nombreMétodo: cualquier nombre válido. Si tiene el mismo


nombre de la clase es un constructor. Los constructores son
utilizados para crear e inicializar un nuevo objeto del tipo de la
clase. Los constructores son llamados solamente por el
operador new de java.
14 de 33
ORIENTACION A OBJETOS EN JAVA

DECLARACION DE UN METODO
La declaración general de un método es la siguiente:

[especificadorAcceso][static][abstract][final][native][sincronized]
tipoRetornado nombreMetodo([]) [throws ListaExcepciones]

especificadorAcceso: define si otras clases tienen acceso al método.


static: indica si es un método de instancia o de clase. Un método de
clase no pueden accesar las variables de instancia declaradas dentro de
la clase. También los métodos de clase se pueden ser invocados en la
clase y no se necesita una instancia para llamar al método de clase.
final: indica que la variable es una constante.
ListaExcepciones: Si el método arroja cualquier excepción, en la
declaración del método se indica qué excepciones puede arrojar.
Native: Los métodos implementados en un lenguaje diferente a Java
(como C) son llamados métodos nativos y tienen que ser declarados
como tal.
Sincronized: indica que el método está sincronizado , eso cuando los
hilos corren concurrentemente llamando a métodos.
15 de 33
ORIENTACION A OBJETOS EN JAVA

PASAR INFORMACION A UN
METODO

Tipos de parámetros
En Java se puede pasar a un método cualquier tipo de argumento válido,
esto incluye datos simples (float, double, int, etc) tipos de datos
compuestos (objetos y arreglos), ejemplo:

Polygon poligono(Point listaDePuntos[]){


...
}

16 de 33
ORIENTACION A OBJETOS EN JAVA

CONTROL DE ACCESO A MIEMBROS DE UNA


CLASE
Los especificadores de acceso permiten proteger las variables y los
métodos de una clase en su declaración. Java soporta 4 niveles de
acceso: private, pretected, public, y sin especificar el acceso,
package.

Especificador clase subclase paquete global


private X
protected X X X
public X X X X
package X X

La primera columna indica si la clase misma tiene acceso al miembro


definido por el especificador de acceso. La clase siempre tiene acceso a
sus propios miembros. La segunda columna indica si las subclases de la
clase (sin considerar en qué paquete están) tienen acceso al miembro.
La tercera columna indica sin las clases en el mismo paquete (sin
considerar su parentesco) tienen acceso al miembro. Finalmente, la
cuarta columna indica si todas las clases tienen acceso al miembro.

17 de 33
ORIENTACION A OBJETOS EN JAVA

Acceso Private (Privado)


Es el más restrictivo de todos. Un miembro declarado como Privado es
accesible únicamente a la clase que se ha definido.

Ejemplo.

class Alpha{
private int varPrivate;
private void metodoPrivate(){
System.out.println(“Método Privado“);
}
}

Los objeto de tipo Alpha pueden inspeccionar o modificar la variable


varPrivate y pueden invocar el método metodoPrivate(), pero los objetos
de otros tipos no pueden hacerlo. Por ejemplo, la siguiente clase, Beta:

18 de 33
ORIENTACION A OBJETOS EN JAVA

Acceso Private (Privado)


Class Beta{
void accesoMetodo(){
Apha a=new Alpha();
a.varPrivate=10; //ILEGL
a.metodoPrivado();//ILEGAL
}
}
Pero es posible que objetos del mismo tipo tengan acceso a los miembros
privados del otro:

class Alpha{
private int varPrivate;
boolean esIgualA(Alpha otroAlpha){
if (this.varPrivate==otroAlpha.varPrivate)
return true;
else
return false;
}
}
19 de 33
ORIENTACION A OBJETOS EN JAVA

Acceso Protected (Protegido)

Permite el acceso de los miembros a la clase misma,


a subclases y todas las clases en el mismo paquete.
Se usa este nivel de acceso cuando se desea que las
subclases tengan acceso a los miembros pero no a las
clases relacionadas que se encuentran en paquetes
diferentes. Los miembros protegidos son como una
familia secreta.

20 de 33
ORIENTACION A OBJETOS EN JAVA

Acceso Protected (Protegido) –


Package Greek; Ejemplo1:
class Alpha{
protected int varProtected;
protected void metodoProtected(){
System.out.println(“Método protegido“);
}
}

Package Greek;
class Gamma{
void accesoMetodo(){
Alpha a= new Alpha();
a.varProtected=10;//LEGAL
a.metodoProtected(); //LEGAL
}
}

La clase Gamma puede accesar legalmente la variable miembro varProtected de un


objeto Alpha y puede invocar legalmente su método metodoProtected() debido a que
la clase Gamma está en el msmo paquete Greek.

21 de 33
ORIENTACION A OBJETOS EN JAVA

Acceso Protected (Protegido) –


Package Greek;
Ejemplo2:
class Alpha{
protected int varProtected;
protected void metodoProtected(){
System.out.println(“Método protegido“);
}
}

Package Latin;
import Greek.*;
class Delta extends Alpha{
void accesoMetodo(Alpha a, Delta d){
a.varProtected=10;// ILEGAL
d.varProtected=10;//LEGAL
a.metodoProtected(); // ILEGAL
d.metodoProtected(); // LEGAL
}
}

Si una clase es subclase de la clase que contiene el miembro protegido y está en el


mismo paquete, entonces la clase tiene acceso al miembro protegido

22 de 33
ORIENTACION A OBJETOS EN JAVA
Acceso Public (Públic)

Es el nivel de acceso más fácil. Cualquier clase, en cualquier


paquete, tiene acceso a los miembros públicos de una clase. Se
declaran miembros públicos sólo si tal acceso no produce
resultados indeseables cuando un objeto externo lo usa. En
general, los miembros públicos definen la interfaz de un objeto,
es decir, la comunicación con el exterior.

23 de 33
ORIENTACION A OBJETOS EN JAVA

Acceso Public (Públic) – Ejemplo


Package Greek;
class Alpha{
public int varPublic;
public void metodoPublic{
System.out.println(“Método público“);
}
}

Ahora modificamos la clase Beta y la colocamos en un paquete diferente:

import Greek.*;
package Roman;
Class Beta{
void accesoMetodo(){
Apha a=new Alpha();
a.varPublic=10; // LEGAL
a.metodoPublic();// LEGAL
}
}

24 de 33
ORIENTACION A OBJETOS EN JAVA

Acceso Package (Paquete)

Es el nivel de acceso por defecto. Permite a las clases en el


mismo paquete de la clase accesar los miembros. Este nivel de
acceso asume que las clases en el mismo paquete sean “Amigas
de confianza“ (Como las clases friend en C+).

25 de 33
ORIENTACION A OBJETOS EN JAVA

Acceso Package (Paquete) - Ejemplo

Package Greek;
class Alpha{
int varPackçage;
void metodoPackage{
System.out.println(“Método de acceso a Paquete“);
}
}

Package Greek;
Class Beta{
void accesoMetodo(){
Apha a=new Alpha();
a.varPackage=10; // LEGAL
a.metodoPackage();// LEGAL
}
}

26 de 33
ORIENTACION A OBJETOS EN JAVA
MODIFICADORES DE ACCESO

CONCLUSION

La idea es lograr un equilibrio en el manejo de la


accesibilidad. Sin llegar a la paranoia de tener todos los
miembros privados, puesto que sería imposible que todos
los objetos interaccionen, o del lado opuesto, ser totalmente
confiados y dejar que cualquiera accese todos los miembros
de la clase, produciendo los llamados efectos colaterales a
la hora de implementar y mantener el software.

27 de 33
ORIENTACION A OBJETOS EN JAVA
CONSTRUCTORES

Constructores son métodos cuyo nombre coincide


con el nombre de la clase y que nunca devuelven
ningún tipo de dato, no siendo necesario indicar
que el tipo de dato devuelto es void.

Se emplean para inicializar los valores de los objetos


y realizar las operaciones que sean necesarias para
la generación de este objeto (crear otros objetos que
puedan estar contenidos dentro de este objeto, abrir
un archivo o una conexión de internet.....).

Como cualquier método, un constructor admite


sobrecarga.

28 de 33
ORIENTACION A OBJETOS EN JAVA
CONSTRUCTORES EJEMPLO
class animal{
int edad;
String nombre;
public animal(){
edad=0;nombre=“”;
}
public animal(int _edad, String _nombre){
edad = _edad;
nombre = _nombre;
}
public void nace(){
System.out.println("Hola mundo");
}
public void get_nombre(){
System.out.println(nombre);
}
public void get_nombre(int i){
System.out.println(nombre +" " +edad);
}
public void get_edad(){
System.out.println(edad);
}
}

29 de 33
ORIENTACION A OBJETOS EN JAVA
Constructores - Modificadores
de acceso

Al declarar constructores se pueden usar modificadores de


acceso para especificar que otros objetos puedan crear
instancias de la clase:

Private: Otras clases no pueden instanciar la clase como un


objeto. La clase puede contener métodos de clase públicos, y
estos métodos pueden construir un objeto y retornalo, pero no
lo contrario.

Protected: Solamente las subclases de la clase pueden crear


instancias de esta.

Public: Cualquiera puede crear una instancia de la clase

Package: Nadie fuera del paquete puede construir una


instancia de la clase.
30 de 33
ORIENTACION A OBJETOS EN JAVA

El método finalize()

Antes de que un objeto sea coleccionado por el


garbage collector, el sistema de ejecución llama al
método finalize(). La intención es finalizarlo para
liberar los recursos del sistema tales como archivos
abiertos o sockets abiertos antes de reciclarlo.

El método finalize() debe ser declarado así:

protected void finalize() throws throwable

31 de 33
ORIENTACION A OBJETOS EN JAVA

El método finalize() - Ejemplo

La siguiente clase abre un archivo cuando es construida:


public class Archivo{
FileInputStream unArchivo=null;
Archivo(String filename){
try{//se intenta abrir el archivo
unArchivo=new FileInputStream(filename);
}
catch(java.io.FileNotFoundException e){
System.err.println(“No se puede abrir archivo” + filename);
}
}

Protected void finalize() throws throwable{
if(unArchivo!=null){
unArchivo.close();
unArchivo=null;
}
}
}

32 de 33
UML - Diagrama de Clases

Sobre los derechos


Los contenidos del presente objeto de aprendizaje son propiedad de su
autor:Libardo Pantoja Yépez
(web personal: www.unicauca.edu.co/~wpantoja
e-mail: wpantoja@unicauca.edu.co)

Los usuarios de estos contenidos:

Deberán reconocer los créditos del objeto de aprendizaje de la forma


especificada por el autor, podrán copiar, distribuir, y comunicar
públicamente el objeto de aprendizaje, no podrán hacer uso comercial del
objeto de aprendizaje, ni cobrar por su acceso, si producen una obra
nueva a partir de estos contenidos, deberán liberarla bajo licencia
Creative Commons Attribution NonCommercial ShareAlike 2.5 Colombia,
si realizan modificaciones a la obra original, deberán informar y compartir
de dichos cambios con el autor.

33 de 33

Potrebbero piacerti anche