Clase2 ejemplosdeenumpoo

  • View
    240

  • Download
    1

Embed Size (px)

Transcript

  • SCJP 6 Clase 1.5 Ejemplos de

    enum

    Ezequiel Aranda

    Sun Microsystems Campus

    Ambassador

  • Disclaimer & Acknowledgments

    >!Even though Ezequiel Aranda is a full-time employee of Sun Microsystems, the contents here are created as his own personal endeavor and thus does not reflect any official stance of Sun Microsystems.

    >!Sun Microsystems is not responsible for any inaccuracies in the contents.

    >!Acknowledgments The slides of this presentation are made from SCJP Unit 2 by Warit Wanwithu and Thanisa Kruawaisayawan and SCJP Workshop by P. Srikanth.

    >!This slides are Licensed under a Creative Commons Attribution Noncommercial Share Alike 3.0 >!http://creativecommons.org/licenses/by-nc-sa/3.0/

  • Pre Java 5.0

    >!Antes de Java 5, la forma estndar de representar una enumeracin, era utilizar el pattern int Enum

    public static final int SEASON_WINTER = 0;

    public static final int SEASON_SPRING = 1;

    public static final int SEASON_SUMMER = 2;

    public static final int SEASON_FALL = 3;

    >!Este pattern tena muchos problemas (no tenan namespace, no eran typesafe, brittleness, informacin nula al imprimirlos).

  • Java 5.0

    >!Soporta enums como un tipo.

    >!Son una clase.

    >!Por lo tanto, pueden tener mtodos y variables, implementar interfaces, y ms.

    >!Proveen implementaciones de los mtodos heredados de Object.

    >!Son Comparables y Serializables.

  • Ejemplo Mazo de cartas

    import java.util.*;

    public class Card {

    public enum Rank { DEUCE, THREE, FOUR, FIVE, SIX,

    SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE }

    public enum Suit { CLUBS, DIAMONDS, HEARTS, SPADES }

    private final Rank rank;

    private final Suit suit;

    private Card(Rank rank, Suit suit) {

    this.rank = rank;

    this.suit = suit;

    }

  • public Rank rank() { return rank; }

    public Suit suit() { return suit; }

    public String toString() { return rank + " de" + suit; }

    private static final List protoDeck = new ArrayList();

    // Initializa el mazo

    static {

    for (Suit suit : Suit.values())

    for (Rank rank : Rank.values())

    protoDeck.add(new Card(rank, suit));

    }

    public static ArrayList newDeck() {

    return new ArrayList(protoDeck); // Retorna una copia del mazo.

    }

    }

  • Ejemplo Mazo de cartas (II)

    >!toString() de Card toma ventaja de toString de Rank y Suit.

    >!El constructor de Card toma un Rank y un Suit.

    >!values() retorna un array que contiene los elementos del enum.

  • Ejemplo Repartir las cartas import java.util.*;

    public class Deal {

    public static void main(String args[]) {

    int numHands = Integer.parseInt(args[0]);

    int cardsPerHand = Integer.parseInt(args[1]);

    List deck = Card.newDeck();

    Collections.shuffle(deck);

    for (int i=0; i < numHands; i++)

    System.out.println(deal(deck, cardsPerHand));

    }

    public static ArrayList deal(List deck, int n) {

    int deckSize = deck.size();

    List handView = deck.subList(deckSize-n, deckSize);

    ArrayList hand = new ArrayList(handView);

    handView.clear();

    return hand;

    }

    }

  • Ejecucin de Deal

    $ java Deal 4 5

    [FOUR of HEARTS, NINE of DIAMONDS, QUEEN of SPADES, ACE of SPADES, NINE of SPADES]

    [DEUCE of HEARTS, EIGHT of SPADES, JACK of DIAMONDS, TEN of CLUBS, SEVEN of SPADES]

    [FIVE of HEARTS, FOUR of DIAMONDS, SIX of DIAMONDS, NINE of CLUBS, JACK of CLUBS]

    [SEVEN of HEARTS, SIX of CLUBS, DEUCE of DIAMONDS, THREE of SPADES, EIGHT of CLUBS]

  • Agregar operaciones public enum Planet {

    MERCURY (3.303e+23, 2.4397e6),

    VENUS (4.869e+24, 6.0518e6),

    EARTH (5.976e+24, 6.37814e6),

    MARS (6.421e+23, 3.3972e6),

    JUPITER (1.9e+27, 7.1492e7),

    SATURN (5.688e+26, 6.0268e7),

    URANUS (8.686e+25, 2.5559e7),

    NEPTUNE (1.024e+26, 2.4746e7),

    PLUTO (1.27e+22, 1.137e6);

    private final double mass; // in kilograms

    private final double radius; // in meters

    Planet(double mass, double radius) {

    this.mass = mass;

    this.radius = radius;

    }

  • public double mass() { return mass; }

    public double radius() { return radius; }

    // universal gravitational constant (m3 kg-1 s-2)

    public static final double G = 6.67300E-11;

    public double surfaceGravity() {

    return G * mass / (radius * radius);

    }

    public double surfaceWeight(double otherMass) {

    return otherMass * surfaceGravity();

    }

    }

  • Calcular nuestro peso en cualquier planeta public static void main(String[] args) {

    double earthWeight = Double.parseDouble(args[0]);

    double mass = earthWeight/EARTH.surfaceGravity();

    for (Planet p : Planet.values())

    System.out.printf("Your weight on %s is %f%n",

    p, p.surfaceWeight(mass));

    }

    $ java Planet 175

    Your weight on MERCURY is 66.107583

    Your weight on VENUS is 158.374842

    Your weight on EARTH is 175.000000

    Your weight on MARS is 66.279007

    Your weight on JUPITER is 442.847567

    Your weight on SATURN is 186.552719

    Your weight on URANUS is 158.397260

    Your weight on NEPTUNE is 199.207413

    Your weight on PLUTO is 11.703031

  • SCJP 6 Clase 2 POO

  • AGENDA

    >!Encapsulamiento

    >!Herencia (es un / tiene un)

    >!Polimorfismo

    >!Interfaces

    >!Valores de retorno legales

    >!Constructores

    >!Mtodos y variables estticas

  • Encapsulamiento

    >!Oculta ciertos elementos de la implementacin de una clase proveyendo una interfaz pblica para los clientes.

    >!Mantiene las variables de instancia protegidas (private).

    >!Se utilizan mtodos de accesos pblicos, forzando su utilizacin en vez de el acceso directo a las variables de instancia (set, get).

  • Encapsulamiento

    Datos Objeto A

    Datos Objeto B

    ObjetoB.Metodo1()

    Valor de retorno

  • Herencia

    >!El lenguaje Java permite que una clase herede funcionalidad de una nica clase.

    >!Esto se conoce como herencia simple.

    Scanner Impresora

    Fotocopiadora Ftbol Rugby

    Deporte

    !"

  • Relaciones es un

    >!En POO, el concepto de es un se basa en la herencia de clases o implementacin de interfaces. Es un es una forma de decir Esta cosa es un tipo de esa otra.

    Auto

    Auto Deportivo

  • Relaciones Tiene un

    >!Estn basadas en el uso, ms que en la herencia. En otras palabras, la clase A tiene un B si el cdigo en la clase A tiene una referencia a una instancia de la clase B.

    >!Por ejemplo: un caballo ES UN animal y TIENE UN cabestro. Escrito en Java, sera algo como:

    public class Animal {}

    public class Caballo extends Animal {

    private Cabestro miCabestro;

    }

  • Polimorfismo

    >!Las invocaciones polimorficas a mtodos slo aplican a mtodos de instancia.

    >!Siempre podremos referirnos a un objeto con una variable de un tipo ms general (una superclase o interfaz).

    >!Por lo tanto, podemos hacer cosas como:

    Auto a = new AutoDeportivo();

  • Pregunta

    public class Employee{

    public void printDetail(){

    system.out.println(Employee);

    }

    }

    public class Manager extends Employee{

    public String department = Marketing;

    public void printDetail(){

    system.out.println(Manager);

    }

    }

    >!Si hiciramos Employee e = new Manager(), podramos usar la variable department? y que resultado tendra la llamada a e.printDetail()?

  • Sobrescritura de mtodos

    >!Siempre que tengamos una clase que herede un mtodo de una superclase, tendremos la posibilidad de sobrescribir dicho mtodo.

    >!Salvo que tal mtodo sea final o static.

    >!El nmero y el tipo de los argumentos DEBEN ser iguales.

  • Sobrescritura de mtodos (II)

    >!El tipo a retornar debe ser el mismo (desde Java 5.0, puede ser un subtipo del tipo retornado por el mtodo sobrescrito tipos covariantes).

    >!No puede ser menos accesible. Un modificador ms amplio s es valido.

    >!No debe arrojar nuevas excepciones o excepciones ms amplias que las declaradas por el mtodo sobrescrito.

  • Invocar la versin presente en la superclase de un mtodo sobrescrito

    public class Animal {

    public void eat() { }

    public void printYourself() {

    // cdigo de impresin

    }

    }

    class Horse extends Animal {

    public void printYourself() {

    super.printYourself(); // Invocamos el cdigo

    //presente en Animal

    // Luego agregamos cdigo especfico debajo

    }

    }

  • Sobrecarga de mtodos

    >!La sobrecarga de mtodos permite reusar el mismo nombre de un mtodo en una clase, pero con una lista de argumentos diferente.

    >!Un mtodo sobrecargado DEBE cambiar la lista de argumentos respec