CapIII LPOO
CapIII LPOO
CapIII LPOO
II. JAVA
II.1. INTRODUCCIÓN:
Simple
Orientado a Objetos
Distribuido
Interpretado
Robusto
Seguro
De Arquitectura Neutra
Portable
Multihilo
Dinámico
COMPILACIÓN Y CONVENCIONES
El siguiente código concreto de JAVA muestra el programa quizás más simple del
lenguaje:
El programa define una clase pública que contiene el método main() que es el
punto de entrada principal para todas las aplicaciones de JAVA. El cuerpo de main()
consiste de sólo una línea que imprime la salida “Hola Mundo”.
El programa debe ser guardado en un archivo con el mismo nombre que la clase
pública, más la extensión .java. La sintaxis de compilación es:
javac Nom_arch.java
Java Nom_arch
Programación II JAVA Dr. Mario Rossainz López
Una clase es una colección de datos, y métodos que operan sobre esos datos. Los
datos y los métodos en conjunto sirven para definir algún tipo de objeto. Por ejemplo la
clase Círculo:
clase Circulo
double x
double y
double r
double circunferencia()
double area()
// Métodos de Instancia
Circulo c1,c2,c3,c4;
Pero estas variables son sólo nombres que hacen referencia a objetos círculo pero
no son objetos en sí. En JAVA todo objeto se crea dinámicamente con la palabra new. Por
ejemplo:
Circulo c1,c2,c3,c4;
o bien:
Se dice entonces que c1, c2, c3 y c4 son variables de tipo Círculo que contienen
instancias de la clase Circulo (es decir, objetos Círculo).
Una vez creado un objeto se pueden utilizar sus campos de datos o variables de
instancia de la siguiente forma a manera de ejemplo:
Así mismo se pueden utilizar los método de instancia del objeto sobre si mismo (a
través de sus datos) de la siguiente forma a manera de ejemplo:
c.x=2.0;
c.y=2.0;
c.r=2.5;
a=c.area();
//Método Constructor
// Métodos de Instancia
ANTES DESPUES
Circulo c;
c=new Circulo(); Circulo c= new Circulo(1.414,-1.0,0.25)
c.x=1.414;
c.y=-1.0;
c.r=0.25;
IMPORTANTE:
//Métodos Constructores
public Circulo(double x, double y, double r)
{
this.x=x; //El argumento implícito llama “this”
this.y=y; // y hace referencia a “este” objeto
this.r=r; //o variable
}
public Circulo(double r)
{
x=0.0;
y=0.0;
this.r=r;
}
public Circulo(Circulo c)
{
x=c.x;
y=c.y;
r=c.r;
}
public Circulo()
{
x=0.0;
y=0.0;
r=1.0;
}
// Métodos de Instancia
public double Circunferencia()
{
return 2*3.14159*r;
}
IMPORTANTE:
JAVA utiliza la palabra clave “static” para indicar que una variable particular es una
variable de clase y no una variable de instancia. Es decir, sólo hay una copia de la
variable asociada con la clase. A este tipo de variable también se le denomina variable
estática. Por ejemplo:
//Métodos Constructores
public Circulo(double x, double y, double r)
{
this.x=x; this.y=y; this.r=r;
num_circulos++;
}
public Circulo(Circulo c)
{ this(c.x,c.y,c.r); }
public Circulo()
{ this(0.0,0.0,1.0); }
Programación II JAVA Dr. Mario Rossainz López
// Métodos de Instancia
Nombre_de_clase.Variable_de_clase
Por ejemplo:
Cuando una variable de clase además de ser declarada con la palabra static se
declara también con la palabra clave final, dicha variable se considera como si fuera una
constante. Por ejemplo
Circulo.PI=4; Error
Por ejemplo; si queremos utilizar el método de JAVA que se emplea para calcular
la raíz cuadrada de un número; escribiríamos:
Math.sqrt(número);
Circulo c= a.masgrande(b);
Circulo c= Circulo.masgrande(a,b);
clase Circulo
double x, y. r
double circunferencia()
double area()
HEREDA
clase CirculoGrafico
void dibujar()
Programación II JAVA Dr. Mario Rossainz López
Toda clase que se defina en JAVA tendrá necesariamente una superclase, aun
cuando no se especifique la superclase con la claúsula extends en cuyo caso la
superclase será la clase Object que es la clase sobre la cual cuelgan todas las demás
clases inmediatas, siendo ésta la másimportante debido a que:
Los métodos definidos en cla clase Object pueden ser llamados por
cualquier objeto de JAVA.
Math
System
Button
List
Programación II JAVA Dr. Mario Rossainz López
Por ejemplo:
class A {
int i;
public A() {
// Aquí va una llamada implícita a
// super()
i=3;
}
}
class B extends A {
// Constructor por omision:
// public B() { super(); }
}
Si suponemos la siguiente jerarquía de clases, donde cada una de ellas define una
misma variable “x”:
A //define la variable x
B //define la variable x
C //define la variable x
x // Es la variable de la clase C
Cuando una clase define un método que usa el mismo nombre, el mismo tipo de
retorno y los argumentos como un método en su subclase. El método en dicha clase
invalida el método en la superclase (No confundir con la sobrecarga de métodos). Así,
cuando se invoca el método para un objeto de la clase, se llama a la nueva definición del
método (el de la subclase) y no a la definición antigua de la superclase. Por ejemplo:
class A {
int i=1;
int f() { return i; }
}
class B extends A {
int i=2;
int f() { return –i }
}
}
NOTA: No se pueden invalidar métodos estáticos, privados y finales. Tampoco se pueden
invalidar los métodos de una clase final.
class A {
int i=1;
int f() { return i; }
}
class B extends A {
int i;
int f() {
i=super.i+1 //representa A.i
return super.f()+i
//invoca a A.f()
}
}
Si se quieren ocultar variables y/o métodos, bastará con declararlos como privados
(con la palabra private). Ejemplo:
// Constructores públicos
public Circulo(double x, double y, double r)
{
this.x=x; this.y=y;
if (checar_radio(r)) this.r=r;
else this.r= MAXR;
}
public Circulo(double r)
{ this(0.0,0.0,r); }
public Circulo()
{ this(0.0,0.0,1.0); }
// métodos triviales
public double conseguirX() { return x; }
public double conseguirY() { return y; }
public double conseguirRadio() { return r; }
Programación II JAVA Dr. Mario Rossainz López
}
II.6. CLASES Y METODOS ABSTRACTOS
El siguiente ejemplo muestra una clase abstract Forma y dos subclases no abstract de
ella:
La utilidad del anterior ejemplo puede ser ilustrada con la siguiente parte de código
fuente de la aplicación principal de este problema:
double total_area= 0;
II.7. INTERFACES
Se dice entonces que una clase puede extender su superclase (extends) pero
también puede implementar (implements) opcionalmente una interfaz.
Programación II JAVA Dr. Mario Rossainz López
//Un constructor
public RectanguloDibujable(double w, double h) { super(w,h); }
formas[0]=dc; dibujables[0]=dc;
formas[1]=ds; dibujables[1]=ds;
formas[2]=dr; dibujables[2]=dr;
double total_area=0;
DibujarVentana cuadro= new DibujarVentana(3.0,10.0,50.0, 155.0);
.
.
.
Clase Abstracta
Forma