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
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
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 sepuedan dibujar círculos, rectángulos y cuadrados de diferentestamañ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
Clases y Objetos
• Un objeto se puede definir como una agrupación o colección dedatos y operaciones que poseen determinada estructura ymediante los cuales se modelan aspectos relevantes de unproblema.
• Los objetos que comparten cierto comportamiento se puedenagrupar en diferentes categorías llamadas clases.agrupar en diferentes categorías llamadas clases.
• Una clase describe el comportamiento de cada uno de losobjetos. Se dice entonces que el objeto es una instancia de laclase.
• Java es un LOO y programar en Java es escribir las definiciones delas clases y utilizar esas clases para crear objetos de forma que,mediante los mismos, se represente adecuadamente el problemaque se desea resolver.
20/09/2011 IIP - Curso 2011/12 4
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 ellase pueden distinguir tres tipos básicos de clases:
– Clase-Tipo de dato: definen el conjunto de valores posiblesque 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 quepueden utilizarse desde otras clases.
20/09/2011 IIP - Curso 2011/12 5
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
La importancia de documentar las clasesimport 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áficosprivate Object gOL[] = new Object[NUM_MIN];private int numGO = 0; // Constantes figuras posibles
20/09/2011 IIP - Curso 2011/12 7
// Constantes figuras posiblesprivate 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 coloresprivate 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);
} …
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
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
Modificadores que definen el ámbito de la declaración: private y public
• Toda la información declarada private es exclusiva del objeto einaccesible 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 fuerade 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
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, siendodefinidos habitualmente de acceso privado.
• El tipo de datos define los valores que el atributo puede tomar ylas 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;
…
}
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 cuandose 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 seavoid) 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; }
}
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 deinstancia) 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; }
}
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 clasecon 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);…
}}
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 atributodeseado o el método específico que se desea utilizar sobre elobjeto.
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);…
}}
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ónPizarra 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 dibujarlomiPizarra.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 dibujarlomiPizarra.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 dibujarlomiPizarra.add(r2);
}}
javac PrimerPrograma.java
… bytecodes …
PrimerPrograma.class
java PrimerPrograma.java
Errores de programación• Es posible que aparezcan errores que imposibiliten la ejecución
de un programa o que alteren su comportamiento con respecto alo 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 seejecutan 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 ayudaproporcionada 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 correctosaunque 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
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
}
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ónPizarra 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 dibujarlomiPizarra.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 dibujarlomiPizarra.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 dibujarlomiPizarra.add(r2);
}}
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
}
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 puedenser 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, cuandono se indica explícitamente, están en uno especial (anonymousanonymousanonymousanonymous).
• El paquete java.lang se importa por defecto. Forman parte deeste paquete las clases Object, String y Math.
20/09/2011 IIP - Curso 2011/12 21
public class Pizarra extends JFrame {.....
}
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 orestringiendo 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 deforma 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