Clases - PowerPoint PPT Presentation

1 / 64
About This Presentation
Title:

Clases

Description:

Existen modificadores de miembros, y ... Todos los datos se inicializan autom ticamente a valores por ... Parses the string argument as a signed ... – PowerPoint PPT presentation

Number of Views:22
Avg rating:3.0/5.0
Slides: 65
Provided by: arantx
Category:
Tags: clases | parses

less

Transcript and Presenter's Notes

Title: Clases


1
Clases
2
CLASES
  • Una clase contiene miembros que son datos y
    métodos. Existen modificadores de miembros, y
    modificadores de clase
  • Datos análogos a estructuras en C. Los objetos en
    Java son equivalentes a punteros a estructuras en
    C.
  • Todos los datos se inicializan automáticamente a
    valores por defecto (por ejemplo, datos numéricos
    a 0 y datos de referencia a null). Se puede dar
    otro valor al declarar la variable
  • Lo mismo ocurre con elementos de arrays (porque
    son también objetos)

3
Ejemplo
  • class Ejemplo
  • public static void main (String args)
  • VectorPlano v new VectorPlano()
  • // constructor por defecto
  • System.out.println("Vector creado ("
  • v.origenX ","
  • v.origenY ","
  • v.extremoX ","
  • v.extremoY ")")
  • class VectorPlano
  • double extremoX, extremoY
  • double origenX1, origenY2

4
Modif. de miembros de una clase
  • En el siguiente orden se suelen especificar los
    modificadores
  • 1) quién puede acceder a este miembro?
  • 2) es miembro de clase o de instancia (u
    objeto)?
  • 3) es modificable?

5
Miembros no modificables
  • La palabra final indica que una variable no es
    modificable (o un método no es redefinible en
    subclases)
  • public class Prueba
  • public static void main (String args)
  • Alfa anew Alfa()
  • // ilegal a.x4
  • //También posible
  • final int y 7
  • class Alfa
  • final int x4

6
Datos miemb. de instancia (u objeto) o de clase
  • static especifica que un dato es un miembro de
    clase. Se utiliza sólo un hueco de memoria en la
    clase (Ejemplo número de miembros de una clase)
  • ltnombre-clasegt.ltdatogt se utiliza para acceder un
    dato de clase
  • Si no se utiliza static, se considera un dato es
    miembro de instancia. Se crea un hueco de memoria
    para cada objeto creado de la clase
  • ltnombre-objetogt.ltdatogt se utiliza para acceder un
    dato de objeto

7
Ejemplo
  • class Ejemplo
  • public static void main (String args)
  • Punto p1 new Punto(),
  • p2 new Punto()
  • System.out.println("Precision "
  • Punto.precision)
  • // p1.precision tambien es valido (pero
  • // no habitual)
  • System.out.println(Valor de x en p2"
  • p2.x)
  • class Punto
  • double x, y
  • static double precision

8
Métodos miembro de objeto o de clase
  • static especifica que un método es un miembro
    de la clase.
  • ltnombre-clasegt.ltmétodogt se utiliza para ejecutar
    un método de clase
  • Si no se utiliza static, se considera que es un
    método de objeto
  • ltnombre-objetogt.ltmétodogt se utiliza para ejecutar
    un método de objeto
  • En un método de objetos se accede al código
    definido en la clase (no se duplica para cada
    objeto como en datos de objeto)

9
Llamadas permitidas en métodos
  • Variables
  • Parámetros del método
  • Variables locales del método
  • Para métodos de objeto se puede utilizar la
    variable this que representa al mismo objeto
  • Datos miembro (para métodos static, sólo es
    posible el uso de datos static)
  • Métodos
  • Métodos miembro (para métodos static, sólo es
    posible el uso de métodos static)

10
Ejemplo
  • class Ejemplo
  • public static void main (String args)
  • Punto p1 new Punto(), p2new Punto()
  • System.out.println("Valor de y para p1 "
    p1.y)
  • double zPunto.cubo(2)
  • // tambien valido p1.cubo(2), pero no habitual
  • p1.transladar(2, z)
  • System.out.println("Valor de y para p1 "
    p1.y)
  • class Punto
  • double x, y
  • void transladar(double a, double b)
  • xa // tambien valido this.x (incluso
    Punto.this.x)
  • yb // tambien valido this.y
  • static double cubo(double n)
  • return nnn

11
Modific. de acceso a miemb. de una clase
  • public, private, ninguno, protected uso en
    variables (estáticas o no), métodos (estáticos o
    no) y constructores
  • public accesible por cualquier clase (una
    estructura de C es una clase con todos sus
    miembros datos públicos)
  • private accesible sólo dentro de la clase
  • ninguno accesible para clases dentro del mismo
    paquete
  • protected sería accesible dentro de una clase C
    si
  • la clase C está en el mismo paquete
  • la clase C está en otro paquete, pero es
    descendiente
  • Observación (caso de variable no estática) sería
    válido this.miembro, super.miembro o
    objeto.miembro, donde objeto sería de tipo C
    o descendiente (caso anómalo no valdría si el
    tipo de objeto fuera la clase en donde se
    definió la variable protected),
  • La variable super no es totalmente equivalente
    a this. Por ejemplo super no se puede asignar
    a un objeto. Sólo se puede utilizar
    super.ltmétodo-o-variablegt. Es sólo una
    referencia a la llamada a la superclase.
  • Observación (caso de variable estática) sería
    válido clase.miembro para cualquier clase
    descendiente de la clase donde se definió la
    variable protected

12
Ejemplo
  • class Ejemplo
  • public static void main (String args)
  • Beta bnew Beta()
  • b.metodoDeAcceso()
  • class Alfa
  • private int x
  • public int y
  • private void f()
  • System.out.println("Metodo privado")
  • class Beta
  • void metodoDeAcceso ()
  • Alfa a new Alfa()
  • a.y20 // legal porque y es publico
  • // a.x 10 ilegal porque x es
    privado
  • // a.f() illegal porque f es
    privado

13
Modificador vacío de acceso a miembros
  • Acceso para clases de un paquete (un conjunto de
    clases relativas a un tema en común, y que están
    contenidas en el mismo directorio)
  • class Ejemplo
  • public static void main (String args)
  • Beta bnew Beta()
  • b.metodoDeAcceso()
  • class Alfa
  • int x
  • class Beta
  • void metodoDeAcceso ()
  • Alfa a new Alfa()
  • a.x 10 // legal porque x no tiene
    modificador
  • System.out.println("Metodo de acceso en
    beta")

14
Ejemplo
  • out es una variable static (de clase) y public
    de la clase System. System.out es un objeto
    predefinido en Java que es el standard output
  • println es un método de objeto que se puede
    aplicar al standard output
  • Son equivalentes
  • La ejecución del intérprete
  • c\gtjava Ejemplo alfa beta
  • La ejecución de las instrucciones
  • String argsalfa, beta
  • Ejemplo.main(args)

15
Constantes en Java
  • Variables públicas, estáticas y finales
  • public class Prueba
  • public static void main (String args)
  • System.out.println("Valor de pi "
  • Alfa.CONSTANTE_PI)
  • class Alfa
  • public static final double CONSTANTE_PI
    3.14

16
Modificadores de clase
  • En el siguiente orden se suelen especificar
  • 1) quién puede acceder a esta clase?
  • public (cualquier clase)
  • Vacío (clases en el mismo paquete)
  • 2) es una clase abstracta (no admite
    instancias)? (abstract)
  • 3) se le pueden crear subclases? (final)

17
Sobrecarga (overloading) de métodos
  • class Ejemplo
  • int a
  • int suma (int b)
  • return a b
  • int suma (byte b)
  • return a b 100
  • double suma(double b)
  • return this.a b
  • int suma(int x, int y)
  • return this.axy
  • public static void main(String args)
  • Ejemplo j new Ejemplo() byte u34
  • System.out.println("sumando un byte "
    j.suma(u))
  • // en casos ambiguos se elige método más
    especializado
  • System.out.println("sumando un double "
  • j.suma(34.22))
  • System.out.println("sumando dos enteros
    "
  • j.suma(45, 6))

18
Constructores
  • Toda clase tiene un constructor por defecto sin
    argumentos (si no hay definido ningún otro
    constructor)
  • Se puede crear un nuevo constructor sin
    argumentos
  • Se puede hacer sobrecarga de constructores
  • La llamada a un constructor de una clase se puede
    realizar dentro de esa clase mediante
    this(...). Esta llamada sólo se puede realizar
    desde otro constructor de la clase y debe ser la
    primera instrucción.
  • Los únicos modificadores que admite un
    constructor son los de privacidad public,
    private, protected, o vacío.

19
Ejemplo
  • class Ejemplo
  • public static void main(String args)
  • Punto p1new Punto(), p2new Punto(2,3)
  • , p3new Punto()
  • System.out.println("Punto p1 " p1)
  • class Punto
  • double x, y
  • Punto () this.x2
    this.y3
  • Punto (double x, double y)
  • this('c', x, y)
  • Punto (char sistemaCoordenadas, double a,
    double b)
  • switch (sistemaCoordenadas)
  • case 'p' // coordenadas polares
  • this.xaMath.cos(b)
  • this.yaMath.sin(b)
  • break
  • case 'c' // coordenadas
    cartesianas
  • this.xa
  • this.yb

20
Código de inicialización static
  • Código de inicialización que se ejecuta una sola
    vez por cada clase
  • class Ejemplo
  • public static void main(String args)
  • String s"abc"3
  • System.out.println("Valor de s " Alfa.s)
  • class Alfa
  • static int x
  • static String s
  • static
  • x3
  • s"Ejemplo"

21
Invocación de métodos
  • Los parámetros siempre se pasan por valor (clases
    son tipos referencia, o punteros)
  • class PasoPorValorDeTiposPrimitivos
  • public static void main(String args)
  • double uno 1.0
  • System.out.println(antes uno uno)
  • // Se obtiene antes uno 1.0
  • dividir(uno)
  • System.out.println(despues uno uno)
  • // Se obtiene despues uno 1.0
  • public static void dividir(double arg)
  • arg / 2.0
  • System.out.println(dividido arg arg)

22
Invocación de métodos (cont)
  • class PasoPorValorDeTiposReferencia
  • public static void main(String args)
  • Astro sirius new Astro("Sirius")
  • System.out.println("antes " sirius.nombre)
  • // Se obtiene antes Sirius
  • f(sirius)
  • System.out.println("despues "
    sirius.nombre)
  • // Se obtiene antes Uranus
  • public static void f (Astro a)
  • a.nombre "Uranus"
  • a null
  • class Astro
  • String nombre
  • Astro (String nombre)
  • this.nombrenombre

23
Otros modificadores para métodos
  • public private ...
  • static ...
  • abstract (código vacío a definir en subclases)
  • native (código nativo escrito en otro lenguaje,
    como C, ...)
  • synchronized (mismo método actuando sobre los
    mismos datos)
  • tipo de retorno
  • nombre del método
  • parametros del método
  • Excepciones que puede lanzar

24
Excepciones
  • Objetos que se generan cuando surge algún tipo de
    situación anómala (como por ejemplo un error)
  • Son descendientes de la clase Exception
  • Excepciones en tiempo de ejecución descendientes
    de clase RuntimeException (hija de Exception)
  • En la cabecera de un método se declara que un
    método puede lanzar una serie de excepciones
  • f (argumentos) throws Excepcion1, Excepcion2, ...
    Excepcionn

25
Ejemplo
  • Clase Integer

  • public static int parseInt(String s) throws
    NumberFormatException
  • Parses the string argument as a signed
    decimal integer. The characters in the string
    must all be
  • decimal digits, except that the first
    character may be an ASCII minus sign '-' to
    indicate a negative
  • value.
  • Parameters
  • s - a string.
  • Returns
  • the integer represented by the argument
    in decimal.
  • Throws NumberFormatException
  • if the string does not contain a
    parsable integer.
  • Observación NumberFormatException es
    descendiente
  • de RuntimeException

26
Ejemplo
  • class Ejemplo
  • public static void main(String args)
  • String numero "32A4"
  • int n Integer.parseInt(numero)
  • System.out.println("El numero es " n)
  • Build Successful
  • java.lang.NumberFormatException 32a4
  • at java.lang.Integer.parseInt(Integer.java240)
  • at java.lang.Integer.parseInt(Integer.java278)
  • at Prueba.main(Ejemplo.java5)
  • at MainThread.run(Agent.java57)
  • Application terminated

27
Excepc. que no son de tiempo de ejecución
  • Si se tiene un método f con cabecera
  • ... f (ltargumentosgt) throws Excepcion1
  • en donde Excepcion1 no es de tiempo de ejecución
  • entonces cualquier otro método g que llame a f
    debe hacer alguna de las dos cosas siguientes
  • ... g (ltargumentosgt) throws Excepcion1
  • O cualquier excepción ascendiente de Exception1
  • Capturar la excepción

28
Ejemplo
  • Clase BufferedReader
  • public String readLine() throws IOException

  • import java.io.
  • class Ejemplo
  • public static void main(String args) throws
    IOException
  • BufferedReader teclado new BufferedReader(
  • new InputStreamReader(System.in))
  • System.out.print("Nombre ")
  • String steclado.readLine()
  • System.out.println("Nombre introducido
    " s)

29
Ejemplo de robot
  • Clase Robot. Un objeto situado en el plano con
    coordenadas enteras. Interfaz publica
  • Constructores
  • public Robot (int)
  • public Robot (int, int)
  • Datos ninguno
  • Métodos
  • public static int robotsCreados ()
  • public int posicionX()
  • public int posicionY()
  • public void avanzar (int, int)
  • public void avanzar (int)
  • public void situar ()

30
Ejemplo de robot (cont)
  • class Ejemplo
  • public static void main(String args)
  • Robot r1new Robot(1), r2new Robot(2,3)
  • r1.avanzar(3) r2.avanzar(3,5)
  • System.out.println("Numero de robot
    creados "
  • Robot.robotsCreados())
  • r1.situar()
  • r2.situar()
  • public class Robot
  • private int x, y
  • private static int numeroRobots0
  • public static int robotsCreados ()
  • return numeroRobots

31
Ejemplo de robot (cont)
  • public int posicionX ()
  • return this.x
  • public int posicionY ()
  • return this.y
  • public Robot (int z)
  • numeroRobots1
  • this.xz this.yz
  • public Robot (int x, int y)
  • numeroRobots1
  • this.xx this.yy
  • public void avanzar (int a, int b)
  • this.xa this.yb
  • public void avanzar (int a)
  • this.xa this.ya
  • public void situar ()
  • System.out.print("Coord. horizontal "
    this.x)
  • System.out.println("Coord. vertical "
    this.y)

32
Paquetes
  • Un paquete es un conjunto de clases contenidas en
    un directorio
  • Un classpath es un conjunto de directorios y de
    ficheros comprimidos de clases. Sirve para
    acceder a clases en diferentes paquetes (en
    compilación o en ejecución).
  • Ejemplo de un classpath puede ser el valor de
    la variable de entorno CLASSPATH (al compilar y
    ejecutar desde línea de comandos)
  • CLASSPATH
  • . c\ejemplos\robots\
  • c\java\classes\classes.zip
  • classes.zip (o .jar) \java\io\BufferedReade
    r.class
  • \java\lang\System.class
  • ...

33
Paquetes (cont)
  • Instrucción import permite acceder a una clase
    situada en otro paquete
  • Ejemplo import java.io., import
    java.io.BufferedReader
  • Camino de búsqueda se especifica en el CLASSPATH
    (busca en ficheros comprimidos y en directorios
    concatenando el nombre del paquete como
    directorio)
  • Se puede llamar también a la clase
    java.io.BufferedReader sin utilizar
    explícitamente import
  • Los únicos paquetes importados por defecto en
    cualquier programa son java.lang. (clase
    System, String, ...) y el paquete en uso

34
Paquetes (cont)
  • Instrucción package define la ubicación (el
    paquete) de una clase
  • Ejemplo
  • package ejemplos.robots
  • public class Robot ...
  • El fichero Robot.java (y el Robot.class)
    pueden estar ubicados en un ltdgt\ejemplos\robots\
    , en donde ltdgt es un directorio contenido en el
    CLASSPATH
  • Al no especificar un paquete para una clase, se
    introduce en un default package

35
Algunos paquetes en J2SE, 5.0
  • package java.applet
  • package java.awt
  • package java.awt.event
  • package java.beans
  • package java.io
  • package java.lang
  • package java.lang.reflect
  • package java.math
  • package java.net
  • package java.rmi
  • package java.security
  • package java.sql
  • package java.text
  • package java.util
  • package java.util.zip
  • package javax.swing
  • package org.xml.sax

36
Clases de java.lang
  • Tipos primitivos encapsulados en clases Boolean,
    Byte, Character, Double, Float, Integer, Long,
    Short, Void
  • Ejemplo Integer (interfaz pública)
  • public final class Integer extends Number
  • Variables
  • MAX_VALUE (valor mayor de int)
  • MIN_VALUE (valor mínimo de int)
  • Constructores
  • Integer(int)
  • Integer(String)
  • Métodos
  • Conversión a otros tipos doubleValue(),
    floatValue(), intValue(), parseInt(String),
    toString(), valueOf(String)
  • Obtención de valor como un int intValue()

37
Clases de java.lang (cont)
  • Clases para cadenas de caracteres
  • clase String conjunto de caracteres no
    modificable
  • clase StringBuffer conjunto de caracteres
    modificable
  • public final class String extends Object
    implements Serializable, ComparableltStringgt,
    CharSequence
  • Constructores
  • String(byte)
  • String(char)
  • String(String)
  • Ejemplos
  • char chars a,b,c
  • String s new String(chars)
  • String s1 Hello
  • String s2 new String(s1)

38
Métodos de la clase String
  • Métodos de manipulación de strings
  • length() , concat(String), indexOf(String),
    lastIndexOf(String) , toUpperCase(), ...
  • Métodos de conversión desde otros tipos
  • valueOf(double), valueOf(int), ...
  • Operador en strings está sobrecargado
    (overloaded)
  • 3abc3.4
  • Igualdad equals(Object)
  • char arr 'a','b','c'
  • String s1abc, s2abc,
  • s3new String(arr)
  • s1s2 (verdadero) (por eficiencia) s1.equals(s2)
    (verdadero)
  • s1s3 (falso)
    s1.equals(s3) (verdadero)

39
Clase StringBuffer
  • Cadena de caracteres modificable. Existe una
    capacidad inicial (si se sobrepasa,
    automáticamente aumenta)
  • public final class StringBuffer extends Object
    implements Serializable
  • Constructores
  • StringBuffer() -gt capacidad inicial de 16
    caracteres
  • StringBuffer(int c) --gt c capacidad inicial
  • StringBuffer(String s) --gt capacidad
    inicials.length()16 caracteres
  • Métodos de manipulación
  • append (String), charAt(int), length(),
    insert(int, String), reverse(), toString(),
    setLength(int)
  • Son equivalentes
  • x "a" 4 "c
  • x new StringBuffer().append("a").append(4).appen
    d("c") .toString()

40
Otras clases de java.lang
  • Clase Math
  • Constantes E, PI
  • Métodos abs(double), acos(double), asin(double),
    atan, cos, exp, log, max(double, double),
    pow(double, double), round (float)
  • Clase System
  • Variables (estáticas)
  • in "standard input stream. Normalmente es el
    teclado
  • out "standard output stream. Normalmente es
    ventana de mensajes
  • err "standard" error output stream. Normalmente
    es ventana de mensajes
  • Métodos getProperties(), gc() que fuerza a hacer
    garbage collection

41
Otros paquetes y clases
  • Package java.util
  • Clase Date, HashMap, StringTokenizer
  • Package java.text
  • Clases DateFormat, DecimalFormat, ... Sirven para
    variantes de formato
  • Package java.math
  • Clases BigDecimal, BigInteger. Arbitraria
    precisión y capacidad

42
Número variable argumentos (versión 1.5)
  • En llamadas se permiten también tipos primitivos
    (en cuyo caso se generan objetos de sus tipos
    wrappers asociados)
  • class C
  • public static void f (int x, Object ... args)
  • System.out.println("Valor"
  • args0.getClass())
  • System.out.println("Valor"
  • args1.getClass())
  • public class Main
  • public static void main(String args)
  • C.f(3, 4, "hola")
  • Valorclass java.lang.Integer
  • Valorclass java.lang.String
  • - Implícitamente se está haciendo
  • argsnew Integer(4), hola
  • - Es un proceso similar a la asignación de
    argumentos de un programa al argumento del método
    main

43
System.out.printf (versión 1.5)
  • printf(String format, Object... args)
  • Número variable de argumentos (admite tipos
    primitivos también)
  • Equivalentes
  • System.out.format(String format, Object... args)
  • public static String String.format (...)
  • Un string de formato
  • System.out.printf("La raiz cuadrada de d es
    010.4fn", 2, Math.sqrt(2))
  • La raiz cuadrada de 2 es 0001,4142
  • n ? salto línea 0 (muestra el y rellena
    con 0)
  • Formato

44
Generics (versión 1.5)Ejemplos
  • class A ltT1, T2gt // A es una clase genérica
    con
  • // parámetros T1 y T2
  • A () // error poner AltT1,T2gt
  • T1 f () return null T2 g() return
    null
  • // Error porque no se permite hacer new
  • // T2 g() return new T2()
  • // Error porque en llamadas estáticas no es
    accesible T1
  • // (la alternativa sería usar un método
    générico)
  • // static T1 h() return null
  • static void h()
  • class B // f y g son métodos genéricos con
    parámetros T1y T2
  • static ltT1, T2gt T1 f () return null
  • static ltT1, T2gt T2 g () return null
  • public class Main
  • public static void main(String args)
  • // Invocación de una clase genérica
  • AltString,StringBuffergt x new
    AltString,StringBuffergt()

45
Generics (versión 1.5) (II)
  • Dos tipos
  • Clases genéricas
  • Las parámetros son accesibles en variables y
    métodos de objeto. Se invocan dando valores a los
    parámetros (no pueden ser tipos primitivos)
    mediante NombreClaseltparámetros-con-valores
    gt
  • Métodos (de clase o de objeto) genéricos
  • Invocación sin dar valores directos a los
    parámetros
  • Otros posibles usos en parámetros
  • En la definición del parámetro también se puede
    utilizar (en lugar del parámetro C, a secas) por
    ejemplo
  • ltC extends Agt
  • En una invocación a una clase genérica, se puede
    utilizar el comodín ? y también super
    (ascendiente, incluyendo la clase) y extends
    (descendiente, incluyendo la clase). Ejemplo
  • Listlt? super Numbergt
  • Listlt? extends Numbergt

46
Clase java.util.ArrayListltEgt
  • Representa un conjunto variable de objetos
    (análogo a StringBuffer)
  • Existe una capacidad (variable con el tiempo,
    creciente o decreciente)
  • Es una alternativa al uso de arrays
  • Constructores
  • ArrayList() ? vacío con capacidad inicial de 10
  • ArrayList(int initialCapacity)

47
Clase java.util.ArrayListltEgt (cont)
  • Métodos
  • public void add(int index,
    E element)
  • boolean contains(Object)
  • Utilizando equals
  • E get(int index)
  • public E remove(int index)
  • void set(int index, E element)
  • int size()
  • IteratorltEgt iterator()

48
Ejemplo
  • Import java.util.
  • class Ejemplo
  • public static void main(String args)
  • String s1 "elemento1", s2 "elemento2",
  • s3 "elemento3"
  • String array s1, s2, s3
  • ArrayListltStringgt lista new
    ArrayListltStringgt()
  • lista.add(s1)
  • lista.add(s2)
  • lista.add(s3)
  • System.out.println("Las componentes del
    array son ")
  • for(int i0 ilt3 i)
  • System.out.println(arrayi)
  • System.out.println("Las componentes de
    la lista son ")
  • for (int i0 iltlista.size() i)
  • System.out.println(lista.get(i))
  • // También es posible lo siguiente

49
Combinación versiones 1.4 y 1.5 con generics (I)
  • ALGUNOS/AS EJEMPLOS/REGLAS DE COMPILACIÓN
  • Son una combinación de reglas clásicas de
    compilación incorporando reglas para casos de
    clases genéricas
  • ArrayListltStringgt l1new ArrayListltStringgt()
  • ArrayListltStringgt l2new ArrayList()
  • ArrayList l3new ArrayListltStringgt()
  • l1.add("hola") l2.add("hola") l3.add("hola")
  • String s1 l1.get(0) String s2 l2.get(0)
  • // String s3 l3.get(0) Error de
    compilación
  • System.out.println("Clase1" l1.getClass())
  • System.out.println("Clase2" l2.getClass())
  • System.out.println("Clase3" l3.getClass())
  • Clase1class java.util.ArrayList
  • Clase2class java.util.ArrayList
  • Clase3class java.util.ArrayList
  • Observación1 la clase utilizada es la misma.
    Sólo hay diferencias en tiempo de compilación

50
Análisis de problema (diseño de clases)
  • Clase Punto2D (concepto un punto en dos
    dimensiones)
  • Interfaz pública
  • Constructores
  • public Punto2D (double x, double y)
  • Métodos
  • public double datoX()
  • public double datoY()
  • public String comoString ()
  • public boolean pertenece (Recta2D recta)
  • Clase Recta2D (concepto una recta en dos
    dimensiones)
  • Interfaz pública
  • Constructores
  • public Recta2D (Punto2D p1, Punto2D p2)
  • public Recta2D (double a, double b, double
    c)
  • Métodos
  • public Punto2D primerPunto()
  • public Punto2D segundoPunto()
  • public String comoString ()
  • public boolean pertenece (Punto2D p)

51
Ejemplo (cont)
  • public class Ejemplo
  • public static void main(String args)
  • Punto2D p1 new Punto2D(1, 1),
  • p2 new Punto2D(2, 2)
  • Recta2D r1 new Recta2D(p1, p2),
  • // r2 es la recta xy-10
  • r2 new Recta2D(1, 1, -1)
  • Punto2D inters r1.interseccion(r2)
  • System.out.println("La interseccion de la
    recta "
  • r1.comoString()
  • " y de la recta "
  • r2.comoString()
  • " es el punto "
  • inters.comoString())
  • // La interseccion de
  • // la recta RectaPunto (1.0, 1.0), Punto (2.0,
    2.0) y
  • // de la recta RectaPunto (0.0, 1.0), Punto
    (1.0, 0.0) es
  • // el punto Punto (0.5, 0.5)

52
Ejemplo (cont)
  • public class Punto2D
  • private double x, y
  • public Punto2D (double x, double y)
  • this.xx
  • this.yy
  • public double datoX()
  • return this.x
  • public double datoY()
  • return this.y
  • public String comoString ()
  • return "Punto (" this.x ", " this.y
    ")"
  • public boolean pertenece (Recta2D recta)
  • return recta.pertenece(this)

53
Ejemplo (cont)
  • public class Recta2D
  • private Punto2D p1, p2
  • // Recta a partir de dos puntos
  • public Recta2D (Punto2D p1, Punto2D p2)
  • this.p1p1
  • this.p2p2
  • // Recta axbyc0
  • public Recta2D (double a, double b, double c)
  • this(new Punto2D(0, -c/b), new
    Punto2D(-c/a, 0))
  • public Punto2D primerPunto()
  • return this.p1
  • public Punto2D segundoPunto()
  • return this.p2
  • public String comoString ()
  • return "Recta"

54
Ejemplo (cont)
  • public boolean pertenece (Punto2D p)
  • return (p.datoX()-this.p1.datoX())
  • /(this.p2.datoX()- this.p1.datoX())
  • (p.datoY()-this.p1.datoY())
  • /(this.p2.datoY()-this.p1.datoY())
  • public Punto2D interseccion (Recta2D recta)
  • double x1this.primerPunto().datoX(),
  • y1this.primerPunto().datoY(),
  • x2this.segundoPunto().datoX()
    ,
  • y2this.segundoPunto().datoY()
    ,
  • x1_recta.primerPunto().datoX(
    ),
  • y1_recta.primerPunto().datoY(
    ),
  • x2_recta.segundoPunto().datoX
    (),
  • y2_recta.segundoPunto().datoY
    (),
  • ay2-y1, bx1-x2,
    cx1(y2-y1)y1(x1-x2),
  • dy2_-y1_, ex1_-x2_,
  • fx1_(y2_-y1_)y1_(x1_-x2_),
  • detae-bd

55
Un nuevo diseño de clases
  • clase ClaseAlumnos (contiene un conjunto de
    alumnos)
  • Interfaz pública
  • Constructor
  • public ClaseAlumnos (String nombre)
  • Métodos
  • public String nombreClase ()
  • public void matricular (Alumno a)
  • public String descripcion ()
  • Método de clase
  • public static int numeroDeClasesCreadas ()
  • clase Alumno (representa un alumno asignado a una
    sola clase de alumnos)
  • Interfaz pública
  • Constructor
  • public Alumno (String nombre, int edad)
  • Métodos
  • public ClaseAlumnos obtenerClase ()
  • public void asignarClase (ClaseAlumnos c)

56
Ejemplo (cont)
  • public class Ejemplo
  • public static void main(String args)
  • ClaseAlumnos c1new ClaseAlumnos("Tercero"),
  • c2new ClaseAlumnos("Segundo
    ")
  • Alumno a1new Alumno("Juan", 21),
  • a2new Alumno("Ana", 22),
  • a3new Alumno("Luis", 23),
  • a4new Alumno("Sonia", 23)
  • c1.matricular(a1) c1.matricular(a2)
  • c2.matricular(a3) c2.matricular(a4)
  • System.out.println("Numero de clases de
    alumnos "
  • ClaseAlumnos.numeroDeClasesC
    readas())
  • System.out.println(c1.descripcion())
  • System.out.println(c2.descripcion())

57
Ejemplo (cont)
  • Numero de clases de alumnos 2
  • Clase Tercero (alumnos 2)
  • Alumno Juan (21 años, clase Tercero)
  • Alumno Ana (22 años, clase Tercero)
  • Clase Segundo (alumnos 2)
  • Alumno Luis (23 años, clase Segundo)
  • Alumno Sonia (23 años, clase Segundo)

58
Ejemplo (cont)
  • public class ClaseAlumnos
  • private int numAlumnos
  • private static int numClases0
  • private String nombre
  • private ArrayListltAlumnogt alumnos
  • new ArrayListltAlumnogt()
  • public ClaseAlumnos (String nombre)
  • this.nombrenombre
  • numClases
  • public String nombreClase ()
  • return this.nombre
  • public static int numeroDeClasesCreadas ()
  • return numClases
  • public void matricular (Alumno a)
  • a.asignarClase(this)
  • numAlumnos

59
Ejemplo (cont)
  • public String descripcion ()
  • StringBuffer snew StringBuffer("Clase "

  • this.nombre " (alumnos "

  • this.numAlumnos ")")
  • for (int i0 iltthis.alumnos.size() i)
  • Alumno alumnothis.alumnos.get(i)
  • s.append("\n "
    alumno.descripcion())
  • return s.toString()

60
Ejemplo (cont)
  • public class Alumno
  • private String nombre
  • private int edad
  • private ClaseAlumnos clase
  • public Alumno (String nombre, int edad)
  • this.nombrenombre
  • this.edadedad
  • public ClaseAlumnos obtenerClase ()
  • return this.clase
  • public void asignarClase (ClaseAlumnos c)
  • this.clasec
  • public String descripcion ()
  • return "Alumno " this.nombre " ("
    this.edad
  • " años, clase "
    this.clase.nombreClase()
  • ")"

61
Versión con generics, I, (ver tras herencia)
  • public class Main
  • public static void main(String args)
  • ClaseltAlumnogt c1new ClaseltAlumnogt("Tercero")
    ,
  • c2new ClaseltAlumnogt("Segund
    o")
  • Alumno a1new Alumno("Juan", 21),
  • a2new Alumno("Ana", 22),
  • a3new Alumno("Luis", 23),
  • a4new Alumno("Sonia", 23)
  • c1.matricular(a1) c1.matricular(a2)
  • c2.matricular(a3) c2.matricular(a4)
  • System.out.println("Numero de clases de
    alumnos "
  • Clase.numeroDeClasesCreadas(
    ))
  • System.out.println(c1.descripcion())
  • System.out.println(c2.descripcion())

62
Versión con generics, II
  • class ClaseltT extends Alumnogt
  • private int numElementos
  • private static int numClases0
  • private String nombre
  • private ArrayListltTgt elementos
  • new ArrayListltTgt()
  • public Clase (String nombre)
  • this.nombrenombre
  • numClases
  • public String nombreClase ()
  • return this.nombre
  • public static int numeroDeClasesCreadas ()
  • return numClases
  • public void matricular (T a)
  • a.asignarClase(this)

63
Versión con generics, III
  • public String descripcion ()
  • StringBuffer snew StringBuffer("Clase "

  • this.nombre " (elementos "

  • this.numElementos ")")
  • for (T elem elementos)
  • s.append("\n "
    elem.descripcion())
  • return s.toString()
  • // Hace falta ltT extends Alumnogt para poder
    utilizar descripcion()

64
Versión con generics, IV
  • class Alumno
  • private Claselt? extends Alumnogt clase
  • private String nombre
  • private int edad
  • public void asignarClase (Claselt? extends
    Alumnogt c)
  • this.clasec
  • public Alumno (String nombre, int edad)
  • this.nombrenombre
  • this.edadedad
  • public String descripcion ()
  • return "Alumno " this.nombre " ("
    this.edad
  • " años, clase "
    this.clase.nombreClase()
  • ")"
Write a Comment
User Comments (0)
About PowerShow.com