Introducción a la programación y la informática. Tema 2

22
Tema 2. Objetos, Clases y Programas Introducción a la Informática y a la Programación (IIP) Curso 2011/12 Departamento de Sistemas Informáticos y Computación

Transcript of Introducción a la programación y la informática. Tema 2

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