1. Tema 2. Objetos, Clases y
ProgramasProgramas
Introducción a la Informática y a la Programación (IIP)
Curso 2011/12
Departamento de Sistemas Informáticos y Computación
2. Contenidos
1. Estructura básica de una clase: atributos y métodos
2. Creación y uso de objetos: operadores new y punto (.)
3. Edición, compilación y ejecución en Java
4. Documentación de programas4. Documentación de programas
5. La organización en paquetes del lenguaje Java
6. Librerías de clases, herencia, la clase Object
20/09/2011 IIP - Curso 2011/12 2
3. Objetos, clases y programas
Se desea disponer de un espacio de dibujo a modo de pizarra,
que puede tener un tamaño variable, un título y sobre la cuál se
puedan dibujar círculos, rectángulos y cuadrados de diferentes
tamaño, colores y en diferentes posiciones.
Objetos y Características
20/09/2011 IIP - Curso 2011/12 3
Ámbito del problema Ámbito del programa
Objetos y
Clases
Características
Pizarra de diferentes tamaños y títulos
Circulo de diferentes tamaños, colores y posición
Cuadrado de diferentes tamaños, colores y posición
Rectángulo de diferentes tamaños, colores y posición
4. Clases y Objetos
• Un objeto se puede definir como una agrupación o colección de
datos y operaciones que poseen determinada estructura y
mediante los cuales se modelan aspectos relevantes de un
problema.
• Los objetos que comparten cierto comportamiento se pueden
agrupar en diferentes categorías llamadas clases.agrupar en diferentes categorías llamadas clases.
• Una clase describe el comportamiento de cada uno de los
objetos. Se dice entonces que el objeto es una instancia de la
clase.
• Java es un LOO y programar en Java es escribir las definiciones de
las clases y utilizar esas clases para crear objetos de forma que,
mediante los mismos, se represente adecuadamente el problema
que se desea resolver.
20/09/2011 IIP - Curso 2011/12 4
5. Clases en Java
• Clases predefinidas y definidas por el programador.
• Según la estructura de la clase y al uso que se va a hacer de ella
se pueden distinguir tres tipos básicos de clases:
– Clase-Tipo de dato: definen el conjunto de valores posibles
que pueden tomar los objetos y las operaciones que sobreque pueden tomar los objetos y las operaciones que sobre
éstos se pueden realizar.
– Clase-Programa: son las que inician la ejecución del código.
– Clase de Utilidades: son repositorios de operaciones que
pueden utilizarse desde otras clases.
20/09/2011 IIP - Curso 2011/12 5
6. Ejemplo de Clase-Tipo de dato
/** Clase Circulo: define un círculo de un determinado radio, color y … */
public class CirculoCirculoCirculoCirculo {
private double radio; private String color;
private int centroX, centroY;
/** crea un Circulo de radio 50, negro y centro en (100,100) */
public Circulo() { radio=50; color="negro"; centroX=100; centroY=100; }
/** consulta el radio del Circulo. */
public double getRadio() { return radio; }
/** actualiza el radio del Circulo a nuevoRadio. */
public void setRadio(double nuevoRadio) { radio = nuevoRadio; }public void setRadio(double nuevoRadio) { radio = nuevoRadio; }
/** decrementa el radio del Circulo. */
public void decrece() { radio = radio / 1.3; }
/** calcula el área del Circulo. */
public double area() { return 3.14 * radio * radio; }
/** obtiene un String con las componentes del Circulo. */
public String toString() { String res="Circulo de radio "+ radio;
res += ", color "+color+" y centro ("+centroX+","+centroY+")";
return res;
}
// más métodos
} 20/09/2011 IIP - Curso 2011/12 6
7. La importancia de documentar las clases
import javax.swing.*;
import java.awt.*;
/**
* Clase Pizarra: define una Pizarra sobre la que se pueden dibujar
* elementos de tipo Circulo, Rectangulo y Cuadrado
* @author Libro IIP-PRG
* @version 2011
*/
public class Pizarra extends JFrame {
// Elementos por defecto de la Pizarra:
private static int DIM_X = 200;
private static int DIM_Y = 200;
private static int NUM_MIN = 8;
// Atributos almacen objetos gráficos
private Object gOL[] = new Object[NUM_MIN];
private int numGO = 0;
// Constantes figuras posibles
20/09/2011 IIP - Curso 2011/12 7
// Constantes figuras posibles
private final static int DESCONOCIDO = -1;
private final static int CIRCULO = 0;
private final static int RECTANGULO = 1;
private final static int CUADRADO = 2;
// Constantes arrays de colores
private static final String NOM_COLS[] =
{"rojo","amarillo","verde","azul","naranja","negro"};
private static final Color COLS[] =
{Color.red, Color.yellow, Color.green, Color.blue,
Color.orange, Color.black};
private static final Color COLOR_POR_DEFECTO = Color.black;
/**
* construye una Pizarra por defecto en la que es posible
* situar elementos gráficos.
*/
public Pizarra() {
super("La pizarra por defecto"); setSize(DIM_X,DIM_Y);
setContentPane(initPanel()); setVisible(true);
} …
8. Ejemplo de Clase-Programa
/**Programa de prueba de las clases Circulo, Rectangulo y Pizarra
* @author Libro IIP-PRG
* @version 2011
*/
public class PrimerPrograma {
public static void main (String[] args) {
// Iniciar el espacio para dibujar dándole nombre y dimensión
Pizarra miPizarra = new Pizarra("ESPACIO DIBUJO",300,300);
// Crear un Circulo de radio 50, amarillo, con centro en (100,100)
Circulo c1 = new Circulo(50,"amarillo",100,100);
// Añadirlo a la Pizarra y dibujarlo// Añadirlo a la Pizarra y dibujarlo
miPizarra.add(c1);
// Crear un Rectangulo de 30 por 30, azul, con centro en (125,125)
Rectangulo r1 = new Rectangulo(30,30,"azul",125,125);
// Añadirlo a la Pizarra y dibujarlo
miPizarra.add(r1);
// Crear un Rectangulo de 100 por 10, rojo, con centro en (50,155)
Rectangulo r2 = new Rectangulo(100,10,"rojo",50,155);
// Añadirlo a la Pizarra y dibujarlo
miPizarra.add(r2);
}
}
20/09/2011 IIP - Curso 2011/12 8
9. Estructura básica de una clase:
atributos y métodos
[modificadores] class NombreDeLaClaseNombreDeLaClaseNombreDeLaClaseNombreDeLaClase [ extends OtraClase ] {
//////// DefiniciónDefiniciónDefiniciónDefinición dededede AtributosAtributosAtributosAtributos
[[modificadores] tipo nomVar1;
[modificadores] tipo nomVar2;
... ... ...
[modificadores] tipo nomVarN; ][modificadores] tipo nomVarN; ]
//////// DefiniciónDefiniciónDefiniciónDefinición dededede MétodosMétodosMétodosMétodos
[[modificadores] tipo nomMetodo1 ([listaParams]) { cuerpo }
[modificadores] tipo nomMetodo2 ([listaParams]) { cuerpo }
... ... ...
[modificadores] tipo nomMetodoM ([listaParams]) { cuerpo } ]
}
20/09/2011 IIP - Curso 2011/12 9
10. Modificadores que definen el ámbito
de la declaración: private y public
• Toda la información declarada private es exclusiva del objeto e
inaccesible desde fuera de la clase.
– Cualquier intento de acceso a las variables de instancia radio o color que
se realice fuera de la clase Circulo (p.e., en la clase PrimerPrograma) dará
lugar a un error de compilación.
private double radio; private String color;
• Toda la información declarada es accesible desde fuera• Toda la información declarada public es accesible desde fuera
de la clase.
– Es el caso de los métodos getRadio o area de la clase Circulo.
/** consulta el radio del Circulo. */
public double getRadio() { return radio; }
/** calcula el área del Circulo. */
public double area() { return 3.14 * radio * radio; }
20/09/2011 IIP - Curso 2011/12 10
11. Atributos de una clase
• Los atributos o variables de instancia (nomVar1, nomVar2, ...,
nomVarN) representan información propia de cada objeto de la
clase y se declaran de un tipo de datos determinado, siendo
definidos habitualmente de acceso privado.
• El tipo de datos define los valores que el atributo puede tomar y
las operaciones que sobre él se pueden realizar.
20/09/2011 IIP - Curso 2011/12 11
//////// DefiniciónDefiniciónDefiniciónDefinición dededede AtributosAtributosAtributosAtributos
[[modificadores] tipo nomVar1;
[modificadores] tipo nomVar2;
... ... ...
[modificadores] tipo nomVarN; ]
public class Circulo {
private double radio;
private String color;
…
}
12. Métodos de una clase
• Los métodos definen las operaciones que se pueden aplicar
sobre los objetos de la clase y se describen indicando:
– Su cabecera o perfil: nombre, tipo de su resultado y lista de parámetros
que se requieren para el cálculo si fuera necesario.
• Es posible que un método no devuelva un valor (void)
– Su cuerpo: contiene la secuencia de instrucciones que se efectúan cuando
se ejecute.
• la instrucción es de aparición obligada (a menos que el resultado sea• la instrucción return es de aparición obligada (a menos que el resultado sea
void) y su efecto es devolver el resultado calculado
20/09/2011 IIP - Curso 2011/12 12
public class CirculoCirculoCirculoCirculo {
…
public void setRadio(double nuevoRadio) { radio = nuevoRadio; }
public double area() { return 3.14 * radio * radio; }
}
13. Métodos de una clase
• Se pueden clasificar, atendiendo a su función con respecto al
objeto del modo siguiente:
– Constructores: permiten crear el objeto;
– Modificadores: permiten alterar el estado (valores de las variables de
instancia) del objeto;
– Consultores: permiten conocer, sin alterar, el estado del objeto.
20/09/2011 IIP - Curso 2011/12 13
public class CirculoCirculoCirculoCirculo {
…
public Circulo() { radio=50; color="negro"; centroX=100; centroY=100; }
public Circulo(double r, String c, int px, int py) {
radio=r; color=c; centroX=px; centroY=py;
}
public double getRadio() { return radio; }
public void setRadio(double nuevoRadio) { radio = nuevoRadio; }
}
14. El método main
• En Java existe un método especial denominado main que indica
el punto de inicio de ejecución del código.
public static void main (String[] args) { … }
• El programa más sencillo en Java se implementa como una clase
con un único método main.
class NombreDeClase {
public static void main (String[] args) {
…
}
20/09/2011 IIP - Curso 2011/12 14
}
}
public class PrimerPrograma {
public static void main (String[] args) {
// Iniciar el espacio para dibujar dándole nombre y dimensión
Pizarra miPizarra = new Pizarra("ESPACIO DIBUJO",300,300);
// Crear un Circulo de radio 50, amarillo, con centro en (100,100)
Circulo c1 = new Circulo(50,"amarillo",100,100);
// Añadirlo a la Pizarra y dibujarlo
miPizarra.add(c1);
…
}
}
15. Creación y uso de objetos:
operadores new y punto
• El operador new se utiliza para crear un objeto de una clase
• El operador punto (.) se emplea para seleccionar el atributo
deseado o el método específico que se desea utilizar sobre el
objeto.
public class PrimerPrograma {
public static void main (String[] args) {
20/09/2011 IIP - Curso 2011/12 15
public static void main (String[] args) {
// Iniciar el espacio para dibujar dándole nombre y dimensión
Pizarra miPizarra = new Pizarra("ESPACIO DIBUJO",300,300);
// Crear un Circulo de radio 50, amarillo, con centro en (100,100)
Circulo c1 = new Circulo(50,"amarillo",100,100);
// Añadirlo a la Pizarra y dibujarlo
miPizarra.add(c1);
…
}
}
16. Edición, compilación y ejecución en java
/** Programa de prueba de las clases Circulo, Rectangulo y Pizarra
* @author Libro IIP-PRG
* @version 2011
*/
public class PrimerPrograma {
public static void main (String[] args) {
// Iniciar el espacio para dibujar dándole nombre y dimensión
Pizarra miPizarra = new Pizarra("ESPACIO DIBUJO",300,300);
// Crear Circulo de radio 50, amarillo, con centro en (100,100)
Circulo c1 = new Circulo(50,"amarillo",100,100);
// Añadirlo a la Pizarra y dibujarlo
miPizarra.add(c1);
// Crear Rectangulo de 30 por 30, azul, con centro en (125,125)
Rectangulo r1 = new Rectangulo(30,30,"azul",125,125);
// Añadirlo a la Pizarra y dibujarlo
miPizarra.add(r1);
// Crear Rectangulo de 100 por 10, rojo, con centro en (50,155)
Rectangulo r2 = new Rectangulo(100,10,"rojo",50,155);
// Añadirlo a la Pizarra y dibujarlo
PrimerPrograma.java
20/09/2011 IIP - Curso 2011/12 16
// Añadirlo a la Pizarra y dibujarlo
miPizarra.add(r2);
}
}
javac PrimerPrograma.java
… bytecodes …
PrimerPrograma.class
java PrimerPrograma.java
17. Errores de programación
• Es posible que aparezcan errores que imposibiliten la ejecución
de un programa o que alteren su comportamiento con respecto a
lo pretendido:
– Errores de compilación: suceden cuando el programa incumple alguna de
las características de la definición del lenguaje.
• El compilador del Java es múltiple pasada, está organizado en fases que se
ejecutan sólo si se ha pasado correctamente las fases previas.
• Generalmente estos errores son sencillos de corregir gracias a la ayudaGeneralmente estos errores son sencillos de corregir gracias a la ayuda
proporcionada por el compilador y al uso de la documentación del lenguaje.
– Errores de ejecución: provocan un malfuncionamiento del programa:
• Errores en tiempo de ejecución: provocan la detención de la ejecución
• Errores lógicos: provocan que los resultados obtenidos no son correctos
aunque puede parecer que el programa funciona correctamente.
En general, los errores de ejecución pueden ser difíciles de detectar y resolver.
20/09/2011 IIP - Curso 2011/12 17
18. Ejemplos de errores de compilación
public class CirculoCirculoCirculoCirculo {
private double radio; private String color;
private int centroX, centroY;
/** crea un Circulo de radio 50 , negro y centro en (100,100) */
plubic Circulo() { radio=50; color="negro"; centroX=100; centroY=100; }
/** consulta el radio del Circulo. */
public double getRadio() { return radio; }
/** actualiza el radio del Circulo a nuevoRadio. */
public void setRadio(double nuevoRadio) { radio = nuevoRadio; }
/** decrementa el radio del Circulo. */
20/09/2011 IIP - Curso 2011/12 18
public void decrece() { radio = radio / 1.3 }
/** calcula el área del Circulo. */
public double area() { return 3.14 * radio * radio; }
/** obtiene un String con las componentes del Circulo. */
public String toString() { String res="Circulo de radio "+ radio;
res += ", color "+color+" y centro ("+centroX+","+centroY+")";
return res;
}
// más métodos
}
19. Ejemplo de error de ejecución
/** Programa de prueba de las clases Circulo, Rectangulo y Pizarra
* @author Libro IIP-PRG
* @version 2011
*/
public class PrimerPrograma {
public static void main (String[] args) {
// Iniciar el espacio para dibujar dándole nombre y dimensión
Pizarra miPizarra = null;
// Crear Circulo de radio 50, amarillo,
Circulo c1 = new Circulo(50,"amarillo",100,100);
// Añadirlo a la Pizarra y dibujarlo
20/09/2011 IIP - Curso 2011/12 19
// Añadirlo a la Pizarra y dibujarlo
miPizarra.add(c1);
// Crear Rectangulo de 30 por 30, azul, con centro en (125,125)
Rectangulo r1 = new Rectangulo(30,30,"azul",125,125);
// Añadirlo a la Pizarra y dibujarlo
miPizarra.add(r1);
// Crear Rectangulo de 100 por 10, rojo, con centro en (50,155)
Rectangulo r2 = new Rectangulo(100,10,"rojo",50,155);
// Añadirlo a la Pizarra y dibujarlo
miPizarra.add(r2);
}
}
20. Ejemplos de errores lógicos
public class CirculoCirculoCirculoCirculo {
private double radio; private String color;
private int centroX, centroY;
/** crea un Circulo de radio 50, negro y centro en (100,100) */
public Circulo() {radio=-50; color="negro"; centroX=100; centroY=100; }
/** consulta el radio del Circulo. */
public double getRadio() { return radio; }
/** actualiza el radio del Circulo a nuevoRadio. */
public void setRadio(double nuevoRadio) { radio = nuevoRadio; }
/** decrementa el radio del Circulo. */
20/09/2011 IIP - Curso 2011/12 20
public void decrece() { radio = radio * 1.3; }
/** calcula el área del Circulo. */
public double area() { return 3.14 * radio; }
/** obtiene un String con las componentes del Circulo. */
public String toString() { String res="Círculo de radio "+ radio;
res += ", color "+color+" y centro ("+centroX+","+centroY+")";
return res;
}
// más métodos
}
21. Organización de clases: packages java
• Un paquete (package) facilita la organización y uso de las clases
ya definidas y la definición y uso de nuevas.
• Un package del Java consiste en un grupo de clases que pueden
ser importadas y, tras ello, utilizadas en otras clases.
packagepackagepackagepackage libUtil;
importimportimportimport javax.swing.*;
importimportimportimport java.awt.*;
public class Pizarra extends JFrame {
• En Java, las clases se estructuran siempre en paquetes, cuando
no se indica explícitamente, están en uno especial (anonymousanonymousanonymousanonymous).
• El paquete java.lang se importa por defecto. Forman parte de
este paquete las clases Object, String y Math.
20/09/2011 IIP - Curso 2011/12 21
public class Pizarra extends JFrame {
.....
}
22. Herencia. Jerarquía de clases: Object
• En los LOO el mecanismo básico para el reuso del código es la
herencia: permite definir nuevas clases extendiendo o
restringiendo las funcionalidades de otras clases ya existentes.
• La herencia permite modelar relaciones jerárquicas entre clases:
la heredera tiene las mismas características pero tal vez,
refinadas para definirla como un caso especial.
• La librería de clases del lenguaje se encuentra organizada de• La librería de clases del lenguaje se encuentra organizada de
forma jerárquica, siendo la base de dicha jerarquía ObjectObjectObjectObject.
20/09/2011 IIP - Curso 2011/12 22
java.lang.Objectjava.lang.Objectjava.lang.Objectjava.lang.Object
||||
++++--------java.awt.Componentjava.awt.Componentjava.awt.Componentjava.awt.Component
||||
++++--------java.awt.Containerjava.awt.Containerjava.awt.Containerjava.awt.Container
||||
++++--------java.awt.Windowjava.awt.Windowjava.awt.Windowjava.awt.Window
||||
++++--------java.awt.Framejava.awt.Framejava.awt.Framejava.awt.Frame
||||
++++--------javax.swing.JFramejavax.swing.JFramejavax.swing.JFramejavax.swing.JFrame