Your SlideShare is downloading. ×
Características esenciales O.O.                                  (1)   • Abstracción           – Quedarse con las caracter...
Características esenciales O.O.                                           (2)   • Clases y Objetos           – Un programa...
Características esenciales O.O.                                (3)Programación III                  Tema 1 - Introducción
Características esenciales O.O.                                      (4)           – Atributos de Instancia               ...
Características esenciales O.O.                                      (5)       • Métodos de Instancia               – Méto...
Características esenciales O.O.                      (6)   • Actividades fundamentales de un programa     OO           – C...
Características esenciales O.O.                                         (7)   • Encapsulación y Ocultamiento de la Informa...
Métodos get y set (1/3)   • El acceso a los atributos tal y como se ha     explicado anteriormente viola el concepto     d...
Métodos get y set (2/3)   • ¿Por qué complicarnos?           – 1) Independencia de implementación y cambios               ...
Métodos get y set (3/3)   • Ejemplo:                   public void setX(double pX)                   {                    ...
Sintaxis básica de Java (1)   • Normas de estilo seguidas en Java           – Clases empiezan con mayúscula y cada cambio ...
Sintaxis básica de Java (2)   • Comentarios           – El “//” comenta hasta el final de la línea           – El “/*” com...
Sintaxis básica de Java (3)           – Conversiones entre los tipos enteros, reales y             caracteres. De dos tipo...
Sintaxis básica de Java (4)   • Todos los demás tipos son clases (referencias).                   • Definidas por el usuar...
Sintaxis básica de Java (5)   • Operadores           – Aritméticos (enteros y reales)                   • + - * /         ...
Sintaxis básica de Java (6)   • Estructuras de Control  Iguales que en C y     C++                   • if ( exp ) sent1 [...
Sintaxis Java decl. de clases                               (1/4)   [Modif. de clase] class Nombre_Clase [Clase Padre (0-1...
Sintaxis Java decl. de clases                              (2/4)   • Ejemplo de declaración de una clase   public class Ci...
Sintaxis Java decl. de clases                               (3/4)   • Modificadores que no afectan al ámbito      MODIFICA...
Sintaxis Java decl. de clases                                (4/4)           – Modificadores que afectan al ámbito        ...
Constructores (1/2)   • Tipo especial de método que permite crear objetos   • Cuando una clase no declara ningún construct...
Constructores (2/2)       • Ejemplo Constructores       public class Circulo       {               double x,y;            ...
Sintaxis para instancias (1/3)   • Creación de instancias                   Circulo miCirculo;                       //CAS...
Sintaxis para instancias (2/3)   • Acceso a los atributos de un objeto                          miCirculo.x = 3;          ...
Sintaxis para instancias (3/3)   • Acceso a los métodos de un objeto                              miCirculo.area();       ...
Herencia (1/2)   • Características de la Herencia                   • Diferencia los TADs de la POO                   • En...
Herencia (2/2)           – Sintaxis Java para la Herencia                   • La cláusula extends indica que una clase her...
¿De dónde se hereda?   • La relación de herencia es transitiva           – Si A es subclase de B y B es subclase de C, ent...
Modificadores de Clase Her.                                (1/2)       •     abstract               –   Sirve para proporc...
Modificadores de Clase Her.                               (2/2)   • final           – Indica que la definición de la clase...
Polimorfismo   • ¿Qué es?           – Poder ejecutar código distinto de métodos iguales según el objeto que se haya       ...
Referencias this y super           – this                   • Es la referencia al propio objeto sobre el que se está traba...
Ejemplo this y super:         class Rectangulo         {               void saludar()               {                     ...
Cadenas de constructores   • Los constructores se llaman en cadena           – Se reserva espacio para el descendiente    ...
La clase String   • El String (en Java) no es un tipo primitivo, es una     clase. Sin embargo, Java le ofrece un tratamie...
Arrays (1/5)   • Los arrays en Java se caracterizan por ser objetos.   • Por tanto, se necesita una referencia para manipu...
Arrays (2/5)   • El rango de un array está en 0 y N-1 (siendo N el tamaño)   • Si se accede a una posición fuera de rango,...
Arrays (3/5)   • Ejemplo:           public class Ejemplo           {             public static void main(String[] args)   ...
Ejemplo de arrays   •     De tipo primitivo                                           • De objetos   int      v[]; //Sólo ...
Arrays (4/5)   • Ejercicio: Indica qué se visualiza en cada caso por pantalla           class PruebaArrays           {    ...
Arrays Multidimensionales                             (5/5)   • Arrays Multidimensionales           – Los arrays multidime...
Ejemplos de Arrays (1/2)   class QueHago   {      public static void main(String[] args)      {           String[][] array...
Ejemplos de Arrays (2/2)       class HolaConTiempo       {          static int contInstancias = 0;          static HolaCon...
Composición (1/4)       •     Las clases pueden incluir atributos que a su vez son objetos, o métodos que devuelven       ...
Composición (2/4)                   class Punto                   {                              private int x,y;         ...
Composición 3/4   • ¡Atención al error de referencia nula ! (muy     habitual en composición)    class Fecha {            ...
Composición 4/4   •     Cuando se crea un objeto compuesto, se           •     Solución 2. Crear la fecha a la vez que la ...
Otros aspectos:        Wrappers (envoltorios)  • ¿Cómo tratar un primitivo como un objeto?          – Wrappers (envoltorio...
Otros aspectos:               Comparación   • Dos objetos se comparan por referencias           – if (o1 == o2) ...   • Pa...
Otros aspectos: javadoc   • Utilidad incluida en JDK   • Permite integrar la documentación de una     clase con el código ...
Sintaxis comentarios   • Justo antes de la clase o del método   • Primera línea: descripción corta resumen     (summary)  ...
Javadoc - ejemplo   /**           Clase de ejemplo javadoc. Utiliza la clase {@link String}.<p>   */   public class Ejempl...
Visión documentación (1)Programación III              Tema 1 - Introducción
Visión documentación (2)Programación III              Tema 1 - Introducción
Ejercicios propuestos (1/4)       •     Ejercicio 1:               –   Solucionar los problemas de la siguiente clase, ree...
Ejercicios propuestos (2/4)   • Ejercicio 2:           – Crear una clase Vaca que tenga:                      – Atributos:...
Ejercicios propuestos (3/4)       • Ejercicio 3:               – Modificar la clase HolaMundo, llamándola HolaMundoAMedias...
Ejercicios Propuestos (4/4)       • Ejercicio 5:               – Escribir un programa que coja todos los parámetros de la ...
Upcoming SlideShare
Loading in...5
×

Programación III (Java) - 01 Introduccion

2,076

Published on

Published in: Education
1 Comment
4 Likes
Statistics
Notes
No Downloads
Views
Total Views
2,076
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
1
Likes
4
Embeds 0
No embeds

No notes for slide
  • Añadir aquí el dibujo/ejemplo de las cajas - una por cada objeto con sus métodos saliendo. Otra para la clase que los engloba
  • Prueba1.java
  • Prueba2.java
  • Ver ejemplo de bichos y muros
  • Transcript of "Programación III (Java) - 01 Introduccion"

    1. 1. Características esenciales O.O. (1) • Abstracción – Quedarse con las características esenciales de algo (desde un cierto punto de vista), ignorando los detalles irrelevantes.Programación III Tema 1 - Introducción
    2. 2. Características esenciales O.O. (2) • Clases y Objetos – Un programa orientado a objetos se compone sólo de objetos – Un Objeto... • Tiene datos (atributos) y comportamiento (métodos) • Es la concreción (un ejemplar, instancia) de una clase – Una Clase... • Es una plantilla (modelo) para crear objetos similares. • Define un conjunto de características comunes (atributos y métodos) a todos los objetos de esa clase. • Es la abstracción de un conjunto de objetos. • Puede utilizarse para crear muchos objetos, pocos o ninguno – En ese caso es simplemente una agrupación de código y datos únicos – Por ejemplo, MathProgramación III Tema 1 - Introducción
    3. 3. Características esenciales O.O. (3)Programación III Tema 1 - Introducción
    4. 4. Características esenciales O.O. (4) – Atributos de Instancia • Cada instancia creada de la clase tiene sus propios valores y espacio de almacenamiento. Ej: velocidad Máxima, consumo y matrícula – Atributos de Clase • Se crea una variable única para la clase y TODOS los objetos que se creen a partir de esa clase. • Todos los objetos acceden a esa variable (se comparte por todos) • Lleva el modificador static • Ejemplo: numCochesProgramación III Tema 1 - Introducción
    5. 5. Características esenciales O.O. (5) • Métodos de Instancia – Método asociado a una instancia/objeto en particular – Cuando se llama, se tiene acceso a los datos contenidos en la instancia a la que está asociada. • Llamada: objeto.nombre_metodo(arg1, arg2,...argN) • Métodos de Clase – Método asociado a la clase y no a una instancia en particular. Es un método único para todos los objetos creados a partir de esa clase. – Manejan información significativa para toda la clase y no de una instancia en particular – Se declaran como static – No contemplan el polimorfismo (con herencia) • Llamada: nombre_clase.nombre_metodo(arg1, arg2,...,Programación III argN) Tema 1 - Introducción
    6. 6. Características esenciales O.O. (6) • Actividades fundamentales de un programa OO – Crear los objetos necesarios (constructores) – Invocación de métodos de objetos (mensajes) – Borrar los objetos cuando no son necesarios (automático en Java: garbage collector)Programación III Tema 1 - Introducción
    7. 7. Características esenciales O.O. (7) • Encapsulación y Ocultamiento de la Información – Manipulación de un objeto como una caja negra, sin necesidad de conocer nunca su estructura interna. – Se usan los servicios (métodos) que proporciona el objeto sin necesidad de conocer como está éste implementado por dentro – En las OO, las propiedades (atributos) de los objetos pueden ser privadas y se accede a ellas a través de los métodos • Se recomienda que los atributos sean siempre privados • Acceso público con get/set [ver luego]Programación III Tema 1 - Introducción
    8. 8. Métodos get y set (1/3) • El acceso a los atributos tal y como se ha explicado anteriormente viola el concepto de encapsulación. • Solución: – Métodos get para consultar los atributos de una clase. – Métodos set para modificar los atributos de una clase.Programación III Tema 1 - Introducción
    9. 9. Métodos get y set (2/3) • ¿Por qué complicarnos? – 1) Independencia de implementación y cambios • (ej: long getDNI()) – 2) Control de errores • (ej: setFecha( int dia, int mes, int anyo )) – 3) Campos calculados • (ej: setValorFactura ( base, iva ) -> base, iva, total) – 4) Polimorfismo • (diferente lógica en clase padre e hijo sobre el mismo dato) – 5) Para pruebas y depuración • es más fácil depurar el paso por un método que por un atributo: void getDNI() { if (...) System.out.println( "Cogiendo DNI " + dni ); return dni; }Programación III Tema 1 - Introducción
    10. 10. Métodos get y set (3/3) • Ejemplo: public void setX(double pX) { x=pX; } public double getX() { return x; } public void setCentro(double pX, double pY) { this.x = pX; this.y = pY; } ...Programación III Tema 1 - Introducción
    11. 11. Sintaxis básica de Java (1) • Normas de estilo seguidas en Java – Clases empiezan con mayúscula y cada cambio de concepto con mayúscula. class MiClase – Miembros (atributos y métodos) empiezan con minúsculas y cada cambio de concepto con mayúscula. int miAtributo void miMetodo() – Constantes todo con mayúsculas y cada cambio de concepto con guión bajo ‘_’ static final int MI_CONSTANTEProgramación III Tema 1 - Introducción
    12. 12. Sintaxis básica de Java (2) • Comentarios – El “//” comenta hasta el final de la línea – El “/*” comenta hasta el primer “*/” (no se permite anidamiento) – Comentarios de documentación “/**” al principio de una clase, atributo o método. (JavaDoc, herramienta por defecto). • Tipos – Java es un lenguaje con un control estricto de tipos • Cada variable debe declararse con un tipo – Los tipos se clasifican en dos grandes grupos: • Tipos Primitivos • Clases – Tipos Primitivos • char • boolean • Numéricos – Enteros (byte, short, int, long) (8, 16, 32, 64 bits con signo) – Reales (float, double) (32, 64 bits con signo, infinito, NaN)Programación III Tema 1 - Introducción
    13. 13. Sintaxis básica de Java (3) – Conversiones entre los tipos enteros, reales y caracteres. De dos tipos: • Implícitas (automáticamente por el compilador) 5 + 2.3 [5  5.0] double x = 5 / 2.0; [5/2.0  5.0/2.0] real = entero [entero  real] • Explícitas (programador mediante un casting). Máxima: No perder precisión. (int)5.4 double x = 5 / (double)2Programación III Tema 1 - Introducción
    14. 14. Sintaxis básica de Java (4) • Todos los demás tipos son clases (referencias). • Definidas por el usuario o ya existentes en el API de Java • Las clases en Java se gestionan mediante referencias . ClaseX referencia = instanciaClaseX; ClaseX referencia = null; – Toda variable de un tipo de clase X (o sea, referencia) mantiene una referencia nula, expresada por la palabra clave null, o bien apunta a una instancia de la clase X (o alguna de sus subclases). – Las instancias hay que crearlas EXPLICITAMENTE (o algún método las creará por nosotros). La declaración no implica instanciación.Programación III Tema 1 - Introducción
    15. 15. Sintaxis básica de Java (5) • Operadores – Aritméticos (enteros y reales) • + - * / – Aritméticos (enteros) • % (módulo o resto) – Booleanos • < <= > >= == != • && || ! – Manipulación de bits (enteros) • And (&), Or (|), Xor (^), Not (~), Desplazamiento (>> << >>>) – Incremento y decremento (forma prefija y postfija) • ++ -- – Asignación (=)Programación III Tema 1 - Introducción
    16. 16. Sintaxis básica de Java (6) • Estructuras de Control  Iguales que en C y C++ • if ( exp ) sent1 [else sent2] • for (inic; exp.while; inc.) sent ; • switch (exp) { – case exp: sent; – ... } • while ( exp ) sent ; • do sent while ( exp ) ;Programación III Tema 1 - Introducción
    17. 17. Sintaxis Java decl. de clases (1/4) [Modif. de clase] class Nombre_Clase [Clase Padre (0-1)] [Interfaces(0-N)] { [Cuerpo de la Clase] } [Modif. de clase]: public | abstract | final [Clase Padre]: extends Tipo_Clase_Padre [Interfaces]: implements Lista_InterfacesProgramación III Tema 1 - Introducción
    18. 18. Sintaxis Java decl. de clases (2/4) • Ejemplo de declaración de una clase public class Circulo { double x,y; double radio; public double perimetro() { return 2*3.1416*radio; } public double area() { return 3.1416*radio*radio; } }Programación III Tema 1 - Introducción
    19. 19. Sintaxis Java decl. de clases (3/4) • Modificadores que no afectan al ámbito MODIFICADOR SIGNIFICADO final Atributo con valor constante Método que no puede ser redefinido Clase que no puede ser heredada static Método o atributo de clase abstract Método que está declarado pero no implementado (método abstracto). Deberá implementarse en las subclases Clase que no puede instanciarseProgramación III Tema 1 - Introducción
    20. 20. Sintaxis Java decl. de clases (4/4) – Modificadores que afectan al ámbito MODIFICADOR SIGNIFICADO public Mét/Atr accesible desde cualquier clase private Mét/Atr sólo accesible en métodos de la misma clase <Sin Mét/Atr accesible por la propia clase y por las Modificador> clases del mismo paquete protected Mét/Atr accesible por la propia clase, por las subclases y por las clases del mismo paqueteProgramación III Tema 1 - Introducción
    21. 21. Constructores (1/2) • Tipo especial de método que permite crear objetos • Cuando una clase no declara ningún constructor, Java automáticamente crea un constructor por defecto (constructor sin parámetros). Cuando no se especifica uno por defecto pero se declara uno con parámetros, se pierde el constructor por defecto • Una clase puede tener uno o varios constructores. • El nombre del método constructor debe coincidir con el nombre de la clase y no devuelve ningún tipo de valor (ni void). • En principio suelen ser siempre públicos. ¿Por qué?Programación III Tema 1 - Introducción
    22. 22. Constructores (2/2) • Ejemplo Constructores public class Circulo { double x,y; double radio; public Circulo() { x = 0; y = 0; radio = 0; } public Circulo(double cX, double cY, double r) { x = cX; y = cY; radio = r; } … }Programación III Tema 1 - Introducción
    23. 23. Sintaxis para instancias (1/3) • Creación de instancias Circulo miCirculo; //CASO 1º – CASO 1º: Así no se crea ningún objeto, únicamente estamos declarando una referencia a un objeto de tipo Circulo (se inicializa a null). Circulo miCirculo = new Circulo(); //CASO 2º – CASO 2º: Así estamos creando un objeto de tipo Circulo mediante el constructor sin parámetros ( new Circulo() ) y se lo estamos asignando a la referencia miCirculo Circulo miCirculo = new Circulo(2,4,5);//CASO 3º – CASO 3º: Así estamos creando un objeto de tipo Circulo mediante la invocación al constructor con tres parámetros ( new Circulo (int,int,int) ) y se lo estamos asignando a la referencia miCirculo – En Java todos los objetos se crean en memoria dinámica (new)Programación III Tema 1 - Introducción
    24. 24. Sintaxis para instancias (2/3) • Acceso a los atributos de un objeto miCirculo.x = 3; miCirculo.y = 3; miCirculo.radio = 3; Siempre bajo el supuesto de que los modificadores de esos atributos permitan el acceso a ellos.Programación III Tema 1 - Introducción
    25. 25. Sintaxis para instancias (3/3) • Acceso a los métodos de un objeto miCirculo.area(); miCirculo.perímetro(); int a = miCirculo.area(); //CORRECTO int a = area(miCirculo); //ERROR Siempre bajo el supuesto de que los modificadores de esos métodos permitan el acceso a ellos. –En Java el acceso a los métodos y atributos de un objeto se realiza a través de la referencia que apunta al objeto. <referencia>.<nombre_metodo>(<argumentos>) <referencia>.<nombre_atributo>Programación III Tema 1 - Introducción
    26. 26. Herencia (1/2) • Características de la Herencia • Diferencia los TADs de la POO • En Java, SOLO HAY HERENCIA SIMPLE (cada hijo sólo tiene 1 padre, aunque un padre puede tener N hijos) • Funciona de modo estrictamente jerárquico • Los métodos y atributos se heredan hacia abajo en la jerarquía • En Java, TODAS LAS CLASES DERIVAN DE LA CLASE Object (todas son subclases de ella) aunque no se indique explícitamente. • Las clases superiores describen un comportamiento más general, las inferiores son más específicas (ej: Animal y Perro) • Ventaja Principal: Reutilización de Código + simplificación conceptual y programática.Programación III Tema 1 - Introducción
    27. 27. Herencia (2/2) – Sintaxis Java para la Herencia • La cláusula extends indica que una clase hereda de otra. public class Perro extends Animal { … } • La clase de la que se hereda (Animal) debe ser accesible: – Estar en el mismo paquete que la clase Coche. (Tema 3) – Estar declarada en otro paquete como public. (sgte apartado) – No estar declarada como final. (sgte apartado)Programación III Tema 1 - Introducción
    28. 28. ¿De dónde se hereda? • La relación de herencia es transitiva – Si A es subclase de B y B es subclase de C, entonces A es subclase de C • Si no hay cláusula extends, entonces la superclase directa es java.lang.Object • Ejemplo: class Animal { } class Perro extends Animal { } class PastorAleman extends Perro { } • Animal es subclase de java.lang.Object • Perro es subclase de Animal y por tanto también de java.lang.Object • Perro es superclase de PastorAleman • ...Programación III Tema 1 - Introducción
    29. 29. Modificadores de Clase Her. (1/2) • abstract – Sirve para proporcionar un comportamiento común a varias clases. – Indica que es una clase abstracta (una clase incompleta). La clase puede (no es obligatorio) tener algunos métodos declarados pero no implementados (métodos abstractos). – Las clases con este modificador NO SE PUEDEN INSTANCIAR – Ejemplo: abstract class Punto //clase abstracta { int x; int y; void mover(int x, int y) { this.x += x; this.y += y; } abstract void dibujar(); //método abstracto } abstract class PuntoColoreable extends Punto { int color; } class PuntoSimple extends Punto { void dibujar() { System.out.println(“(”+ x + ”,” + y + ”)”); } }Programación III Tema 1 - Introducción
    30. 30. Modificadores de Clase Her. (2/2) • final – Indica que la definición de la clase está completa. • No se puede heredar de esa clase (no puede tener subclases). • Si una clase es declarada abstract y final  Error de compilación • public – La clase es accesible a clases de otros paquetes. (Tema 3) – Sólo una clase public por fichero fuente (las otras clases si las hubiera son "privadas")Programación III Tema 1 - Introducción
    31. 31. Polimorfismo • ¿Qué es? – Poder ejecutar código distinto de métodos iguales según el objeto que se haya instanciado. – En concreto... • La variable que contiene un objeto y el objeto contenido no son del mismo tipo • El método que se lanza se decide en ejecución, no en compilación • Condiciones mínimas en otros lenguajes – Herencia / misma signatura en métodos / método virtual • Condiciones mínimas en Java. – Herencia y misma signatura. Todos los métodos en Java son potencialmente virtuales (polimórficos) • Utilidad. – Independencia y abstracción. • Utilidad en Java. – Java no existiría sin el polimorfismo. Independiente de plataforma. • El uso de instanceof. – Permite conocer el tipo real del objeto que se ha instanciado. Animal a = new PastorAleman(); System.out.println(a instanceof PastorAleman);Programación III Tema 1 - Introducción
    32. 32. Referencias this y super – this • Es la referencia al propio objeto sobre el que se está trabajando. • No hace falta usarla para acceder a los atributos y métodos propios pero siempre está presente en métodos de instancia. • A veces es necesaria cuando se quiere pasar la referencia al propio objeto como parámetro de otro método. • Ej: – panel.dibujaObjeto( this ) – super • Permite referenciar a la clase padre. • Se emplea cuando se ha redefinido un método y se quiere acceder al método del padre (si no se usara esta palabra reservada se llamaría al método de la propia clase y no habría forma de invocar el del padre). [super.método(...)] • Permite también llamar al constructor de la clase padre desde el constructor de la clase hija. [super(...)]. En este caso, la llamada debe ser la primera del constructor del hijo.Programación III Tema 1 - Introducción
    33. 33. Ejemplo this y super: class Rectangulo { void saludar() { System.out.println("Hola, soy Rectangulo, y saludo"); } } class Cuadrado extends Rectangulo { void saludar() //Método redefinido { System.out.println("Hola, soy un cuadrado"); } void saludos() { saludar(); //Hola, soy un cuadrado this.saludar(); //Hola, soy un cuadrado super.saludar(); //Hola, soy Rectangulo, y saludo } public static void main (String[] args) { Cuadrado c1 = new Cuadrado(); c1.saludos(); } }Programación III Tema 1 - Introducción
    34. 34. Cadenas de constructores • Los constructores se llaman en cadena – Se reserva espacio para el descendiente – Se ejecuta el código de todos los constructores • Cada constructor inicializa sus atributos • Primero los padres (de Object hacia abajo) • Por eso lo primero que tiene que hacer cada constructor es llamar al constructor de la clase padre – super( ... ) – super() por defecto (lo hace Java si no lo hace el programador)Programación III Tema 1 - Introducción
    35. 35. La clase String • El String (en Java) no es un tipo primitivo, es una clase. Sin embargo, Java le ofrece un tratamiento especial. – Los literales de la cadena van entre comillas dobles. String saludo = “Hola”; – Java permite la concatenación de cadenas mediante + System.out.println(saludo + “ a todos!!!”); – Si se concatena una cadena con otro tipo, este último se convierte automáticamente a cadena int valor = 5; System.out.println(“Valor = ” + valor + ‘.’); • (método toString())Programación III Tema 1 - Introducción
    36. 36. Arrays (1/5) • Los arrays en Java se caracterizan por ser objetos. • Por tanto, se necesita una referencia para manipularlos. • Declaración de un array: int v[]; //No se indica el tamaño int[] v; – ¡Ojo! Aquí lo único que hemos hecho es declarar una referencia a un array de enteros. ¡El array todavía no está creado! • El array, como cualquier otro objeto, se crea con new. v = new int[10]; float v2 = new float[50] • Para acceder a los elementos de una array se usa la notación clásica de arrays: v[0] = 5; int a = v[2];Programación III Tema 1 - Introducción
    37. 37. Arrays (2/5) • El rango de un array está en 0 y N-1 (siendo N el tamaño) • Si se accede a una posición fuera de rango, el interprete nos avisa (se produce una excepción) • Como los arrays son objetos tienen atributos. El atributo length permite saber el tamaño de una array int tamaño = v.length • Java permite inicializar el array en su declaración int[] v = {1,2,3}; • Equivale a: int[] v = new int[3]; v[0] = 1; v[1] = 2; v[2] = 3;Programación III Tema 1 - Introducción
    38. 38. Arrays (3/5) • Ejemplo: public class Ejemplo { public static void main(String[] args) { int[] a1 = {1,2,3,4}; for(int i=0; i < a1.length; i++) System.out.println(a1[i]); } } • Cuando el array no es de tipos primitivos lo que se almacena en cada posición es una referencia a un objeto Animal[] animales = new Animal[10]; • Inicialmente, cada una de las referencias del array se inicializa a null. • Posteriormente habrá que crear los objetos y guardarlos en el array animales[0] = new Animal(); animales[1] = new Animal();Programación III Tema 1 - Introducción
    39. 39. Ejemplo de arrays • De tipo primitivo • De objetos int v[]; //Sólo referencia!! Racional v[] = new Racional[3]; v = new int[6]; null null null //o lo que es lo mismo //Si intentamos operar con Racionales int v[] = new int[6]; v[0].setNumerador(1);//Null pointer Exc //Es necesario crear los objetos 0 0 0 0 0 0 v[0] = new Racional(1,1); //Acceso a los elementos v[0] = 3; ref null null 1 1 v[5] = 4;//Error v[3] = 2; v[0].setNumerador(2); 3 0 0 ref null null 2 1 for (int 0i=0; 2i < 6; i++) 0 v[i] = i; //Se pueden crear todos los objetos for (int i=0; i<v.length;i++) 0 4 v[i] = new Racional(1,1); 1 2 3 5Programación III Tema 1 - Introducción
    40. 40. Arrays (4/5) • Ejercicio: Indica qué se visualiza en cada caso por pantalla class PruebaArrays { public static void main(String[] args) { int[] a = new int[10]; String[] b = new String[10]; System.out.println("Longitud: " + a.length); for (int i=0;i<a.length;i++) System.out.println(a[i]); System.out.println("Longitud: " + b.length); for (int i=0;i<b.length;i++) System.out.println(b[i]); for (int i=0;i<b.length;i++) b[i]=new String("" + i); for (int i=0;i<b.length;i++) System.out.println(b[i]); } }Programación III Tema 1 - Introducción
    41. 41. Arrays Multidimensionales (5/5) • Arrays Multidimensionales – Los arrays multidimensionales no son más que arrays donde cada elemento es a su vez otro array (arrays de arrays) – El número de dimensiones lo indica el número de corchetes: int [][] v1; //ref. a array de 2 dim int [][][] v2; //ref. a array de 3 dim – A la hora de crear el array se indicará el tamaño de cada dimensión: v1 = new int[10][20] ; //array de 10 x 20 v2 = new int[6][4][5]; – Para acceder a un elemento de un array multidimensional: v1[3][4] = 5; v2[3][2][2] = 6;Programación III Tema 1 - Introducción
    42. 42. Ejemplos de Arrays (1/2) class QueHago { public static void main(String[] args) { String[][] arrayOfStringArrays = new String[5][]; for (int i=0;i<arrayOfStringArrays.length;i++) { String[] nuevoArray = new String[10]; arrayOfStringArrays[i] = nuevoArray; for (int j=0;j<nuevoArray.length;j++) nuevoArray[j] = new String(“(”+i+“,”+j+”)”); } for (int i=0;i<arrayOfStringArrays.length;i++) { for (int j=0;j<arrayOfStringArrays[i].length;j++) System.out.print(arrayOfStringArrays[i][j]); } } }Programación III Tema 1 - Introducción
    43. 43. Ejemplos de Arrays (2/2) class HolaConTiempo { static int contInstancias = 0; static HolaConTiempo[] instancias =new HolaConTiempo[10]; int num; long tiempoCreacion; HolaConTiempo() { num = ++contInstancias; tiempoCreacion = System.currentTimeMillis(); } void saludar() { System.out.println(“¡Hola! Soy la instancia “ + num + “ y he nacido en el milisegundo “ + tiempoCreacion); } public static void main(String args[]) { //Creamos las 10 instancias for (int i=0;i<10;i++) instancias[i] = new HolaConTiempo(); //Que saluden las 10 instancias for (int i=0;i<10;i++) instancias[i].saludar(); } }Programación III Tema 1 - Introducción
    44. 44. Composición (1/4) • Las clases pueden incluir atributos que a su vez son objetos, o métodos que devuelven objetos. • Los objetos se pueden encadenar para hacer llamadas. • Ejemplo: class Persona { Persona padre; //Atributo de tipo clase String nombre; public Persona(Persona pPadre, String pNombre) { padre = pPadre; nombre = pNombre; } public String saluda() { return nombre; } public Persona getPadre() { return padre; } public static void main (String args[]) { Persona filiberto = new Persona(null,"Filiberto"); Persona pablo = new Persona( filiberto, "Pablo" ); Persona nuria = new Persona( filiberto, "Nuria" ); Persona alberto = new Persona( nuria, "Alberto" ); //El nieto es Alberto System.out.println("El nieto es: " + alberto.saluda()); //La madre es Nuria System.out.println("La madre: " + alberto.getPadre().saluda()); //El abuelo es Filiberto System.out.println("El abuelo es: " + alberto.getPadre().getPadre().saluda()); } }Programación III Tema 1 - Introducción
    45. 45. Composición (2/4) class Punto { private int x,y; public int getX() { return x; } public int getY() { return y; } } public class Cuadrado { Punto[] vertices; Cuadrado(Punto p1, Punto p2, Punto p3, Punto p4) { vertices = new Punto[4]; vertices[0] = p1; vertices[1] = p2; vertices[2] = p3; vertices[3] = p4; } Punto getOrigen() { return vertices[0]; } public static void main(String[] args) { Punto p1 = new Punto(0,0); Punto p2 = new Punto(2,0); Punto p3 = new Punto(0,2); Punto p4 = new Punto(2,2); Cuadrado c = new Cuadrado(p1,p2,p3,p4); System.out.println(c.getOrigen().getX()); System.out.println(c.getOrigen().getY()); } }Programación III Tema 1 - Introducción
    46. 46. Composición 3/4 • ¡Atención al error de referencia nula ! (muy habitual en composición) class Fecha { class Persona { private int dia, mes, anyo; private String nombre; private Fecha fechaNcto; Fecha (int d, int m, int a){ //COMPOSICIÓN dia = d; mes = m; void imprimir(){ anyo = a; s.o.p.(nombre + “ “); } s.o.p.(fechaNcto.dia +”/”); //ACCESO } s.o.p.(fechaNcto.mes +”/”); s.o.p.(fechaNcto.anyo +”/”); } } class X { ...main(...){ Persona p = new Persona(); p.imprimir(); //ERROR. ¿POR QUÉ? }Programación III Tema 1 - Introducción
    47. 47. Composición 4/4 • Cuando se crea un objeto compuesto, se • Solución 2. Crear la fecha a la vez que la deben crear también TODOS los persona (en el constructor) objetos que lo componen class Persona { private String nombre; • Solución 1. Crear la fecha después de la private Fecha fechaNcto; persona Persona(){ class X { fechaNcto = new Fecha(0,0,0); ...main(...){ } Persona p = new Persona(); ... p.setFecha(new Fecha(1,1,2000); } p.imprimir(); //CORRECTO class X { ...main(...){ } Persona p = new Persona(); p.imprimir(); //CORRECTO } } }Programación III Tema 1 - Introducción
    48. 48. Otros aspectos: Wrappers (envoltorios) • ¿Cómo tratar un primitivo como un objeto? – Wrappers (envoltorios) • Clase para cada tipo: Integer, Double, Char... • Constructores muy sencillos Integer i = new Integer(5) • Métodos conversores int j = i.intValue() • Conversiones desde string double r = Double.parseDouble( “185” ); • Métodos estáticos genéricos de tipo Double.isNaN(5.75) – Las últimas ver. de Java hacen conv. automática Integer i = 5; System.out.println( i + 3 );Programación III Tema 1 - Introducción
    49. 49. Otros aspectos: Comparación • Dos objetos se comparan por referencias – if (o1 == o2) ... • Para comparar por valores: – equals(Object o) – Definido en Object (todos lo tienen) – if (o1.equals(o2)) ... • ¿Comparación >,<? – Método int compareTo(Object o) • Devuelve -1, 0, +1 • No con todas las clases (ver interfaces)Programación III Tema 1 - Introducción
    50. 50. Otros aspectos: javadoc • Utilidad incluida en JDK • Permite integrar la documentación de una clase con el código de la misma • Basada en comentarios con sintaxis fija – Inicio en /** en lugar de /* • Utilidad: javadoc.exe – Genera .html integrable con doc. javaProgramación III Tema 1 - Introducción
    51. 51. Sintaxis comentarios • Justo antes de la clase o del método • Primera línea: descripción corta resumen (summary) • Comentarios de los parámetros con @param • Referencias a otras clases métodos @see • Retornos de párrafo con <p> • Otras posibilidades, como hiperenlaces ( {@link OtraCosa} )Programación III Tema 1 - Introducción
    52. 52. Javadoc - ejemplo /** Clase de ejemplo javadoc. Utiliza la clase {@link String}.<p> */ public class Ejemplo { /** Devuelve una palabra a partir de un num. dado y de un gestor de ejemplos. El parámetro pista debe referenciar a una cadena válida. <p> Este método devuelve, de todas las palabras del gestor indicado, aquéllos cuyo valor no es nulo, ordenados por su nombre. Si no hay ninguno, devuelve una lista vacía. @param numeroíndice válido de string (si no es válido, se devuelve string vacío) @param inicio gestor de ejemplos fuente de datos @return palabra índice del gestor de ejemplos @see #ponePalabra(String) @see GestorEjemplos @version 20090101 @since 0.3 */ public String devuelvePalabra( int numero, GestorEjemplos inicio ) { return ""; }Programación III Tema 1 - Introducción
    53. 53. Visión documentación (1)Programación III Tema 1 - Introducción
    54. 54. Visión documentación (2)Programación III Tema 1 - Introducción
    55. 55. Ejercicios propuestos (1/4) • Ejercicio 1: – Solucionar los problemas de la siguiente clase, reescribiéndola para que se compile correctamente. class HolaMundo2 { int cont; public static void main( String args[] ) { cont = 0; HolaMundo2 a = new HolaMundo2(); HolaMundo2 b = new HolaMundo2(); HolaMundo2 c = new HolaMundo2(); a.saludar(); b.saludar(); c.saludar(); } HolaMundo2() { cont++; } void saludar() { System.out.println(“Hola, soy la instancia " + cont ); } } – Modificarla para que cada instancia indique su número secuencial. No se puede cambiar el método main (excepto la primera sentencia, aunque no es necesario).Programación III Tema 1 - Introducción
    56. 56. Ejercicios propuestos (2/4) • Ejercicio 2: – Crear una clase Vaca que tenga: – Atributos: color de pelo (String), edad (entero), nombre (String) • Métodos: – debes elegir tres constructores diferentes – Muu: método que hace que la vaca muja y diga su nombre y color de pelo "Muuu...mi nombre es XXX y mi color de pelo es YYY" – CompararEdad: dadas las edades de dos vacas (la que envía el mensaje y otra como parámetro) saca el nombre de la vaca más antigua "La vaca XXX es más vieja que la vaca YYY" • Programa principal: – Crear tres instancias de la clase Vaca, llamadas miVaca1, miVaca2 y miVaca3. Para cada una de ellas utilizar un constructor diferente. – Hacer que las tres mujan. – Comparar la edad de miVaca1 y miVaca2. – Modificar el programa para que cada vez que se cree una instancia de la clase vaca salga un mensaje indicando el número de vaca creada: "Se ha creado la vaca 1", etc.Programación III Tema 1 - Introducción
    57. 57. Ejercicios propuestos (3/4) • Ejercicio 3: – Modificar la clase HolaMundo, llamándola HolaMundoAMedias: (Hacerlo utilizando los métodos más apropiados de String) • para que se parta de una variable String que contenga " ¡Esta es la cadena Hola Mundo... a medias! ". • posteriormente debe eliminar los espacios del inicio y del final. • finalmente, quitar el substring que sobra para dejar simplemente "¡Hola Mundo... a medias!", que debe ser el String visualizado. – Ayudas para la realización del ejercicio: – El método de instancia trim() de la clase String elimina espacios en blanco de los extremos de un String. – El método de instancia subString (inicio, fin) de la clase String devuelve los caracteres de inicio a fin del String. – El método de instancia indexOf(subString) de la clase String indica en qué posición se encuentra la primera ocurrencia del subString en el String que llama al método. • Ejercicio 4: – Describe con tus palabras todos los pasos desde la edición hasta la ejecución, los problemas que pueden surgir y cómo solucionarlos. – ¿Qué ficheros y programas son necesarios en cada etapa? – ¿Cuál es el conjunto mínimo de ficheros y programas necesarios para la ejecución final de un programa Java?Programación III Tema 1 - Introducción
    58. 58. Ejercicios Propuestos (4/4) • Ejercicio 5: – Escribir un programa que coja todos los parámetros de la línea de comandos, si los hay, y los muestre por pantalla, uno en cada línea, indicando con un solo asterisco después de cada uno si está repetido (es decir, si algún otro parámetro previo es un String igual) • Ejercicio 6: – ¿Por qué el siguiente trozo de código produce un error de compilación? ¿Cuál es la diferencia entre a y c? class Inicializacion { static int a; public static void main(String[] args) { int c; int b=17; if ( b!= 0) System.out.println(b); else { System.out.println(a); System.out.println(c); } } }Programación III Tema 1 - Introducción

    ×