Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

308 views

Published on

Introduccion a la programación y la informática, Universitat Politècnica de València.

Published in: Education
  • Be the first to comment

  • Be the first to like this

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

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×