Diapositivas de la Universidad Politécnica de Madrid sobre Programación Orientada a Objetos (POO). El Pdf explora las relaciones entre clases, tipos genéricos y colecciones en Java, con ejemplos de código. Es un recurso útil para estudiantes universitarios de Informática.
Ver más15 páginas


Visualiza gratis el PDF completo
Regístrate para acceder al documento completo y transformarlo con la IA.
POLITÉCNICA CAMPUS DE EXCELENCIA INTERNACIONAL "Ingeniamos el futuro 22/09/2024 D POL Programación Orientada a Objetos -POO- IVERSI 2. Programación basada en objetos TECHNICA NATIONI IMPENDI Jesús Bernal BermúdezPOO :: Programación basada en objetos 2
Relaciones entre clases Dependencia · Si una Clase A se relaciona de cualquier forma con la Clase B, A depende de B. · ¿ PROHIBIDO& dependencias cíclicas Relación de Uso. Menor intensidad · La clase A usa la clase B esporádicamente en el tiempo, por la ejecución de algún método. · Normalmente se le pasa la referencia por parámetro del método. · También se podría crear una instancia en el cuerpo del método. ID use Class1 R class2.use(); +method( class2 : Class2 ) G +method2() new Class2().use(); 17 «use» Class2 2 NATIONI - TECH ICA D PO IMPENDI3
POO :: Programación basada en objetos Relaciones entre clases Relación de Asociación · La clase A se relaciona conceptualmente con la clase B. · Es estable en el tiempo y es a través de un atributo. · La referencia se le pasa como parámetro en el constructor o se le inyecta por el método set Atributo. · El ciclo de vida no coincide, el objeto B existe de forma independiente del objeto A. · Debería reflejarse la multiplicidad. · ¿ PROHIBIDO& dependencias cíclicas YD Client R private Server server, +Client( server : Server ... public Client (Server server) { this.server = server; 0 ..* -server Server NICA NATIONI 1 IMPENDI D *PO association ...POO :: Programación basada en objetos 4
Relaciones entre clases AD*POL Relación de Agregación · La clase A tiene una relación de asociación con la clase B, y además ... · La clase B es parte de la clase A. · Un objeto B pudiera ser parte de varios objetos A. · ¿ PROHIBIDO dependencias cíclicas aggregation P Order private Customer customer; +Order( customer : Customer ) public Order (Customer customer) { this.customer = customer; } 0 ..* customer Customer 1 IMPENDI5
POO :: Programación basada en objetos Relaciones entre clases Relación de Composición · La clase A tiene una relación de asociación con la clase B, y además ... · La clase B es parte de la clase A. · Un objeto B solo puede ser parte de un objeto A. · No tiene sentido el objeto B sin el objeto A. El ciclo de vida de ambos coincide. · Normalmente, el objeto A crea el objeto B. · ¿ PROHIBIDO& dependencias cíclicas composition User ... private Phone[] phone; private Email email; +User() ... public User () { 1 1 this.phones = {new Phone(), new Phone( this.email = new Email(); } phones Phone 0 ..* -email HN NATIONI Email CA. 1 IMDENDI D POPOO :: Programación basada en objetos Relaciones entre clases
Shopping Cart 1 «key »-id : Integer -user : String -address : String ShoppingLine -creationDate : LocalDate Time -amount : Integer -discount : BigDecimal +add( articleltem ) +total() : BigDecimal +totalUnit() : BigDecimal P 0 .* 0 .* Tag 0. * «key »-id : Integer «unique»-name : String -description : String 0 ..* 1 1,1 User «key »-id : Integer «unique»-barcode : String «key »-id : Integer «unique»-mobile : Integer -name : String -address : String HNICA -price : BigDecimal ATIONI -registrationDate : LocalDate -provider : String 6 POI 1,0 ..* Article -summary : StringAPI de Java
POO :: Programación basada en objetos 7 D PO https://docs.oracle.com/en/java/javase/19/docs/api/allclasses-index.html Wrappers, Math https://gitlab.etsisi.upm.es/jbernal/poo api Integer.MAX_VALUE; Integer.MIN_VALUE; Double.NEGATIVE_INFINITY; Double.POSITIVE_INFINITY; Double.NaN; double num1 = 9.7; double num2 = - 15.3; INOX Math.round(num1); Math.abs(num2); Math.max(num1, num2); Math.min(num1, num2); Math.pow(2, 3)); // 2^3 = 8 Math.sqrt(num1); Math.random(); Math.toDegrees(Math.PI); Math.toRadians(180); Math.sin(Math.PI / 2); Math.cos(0)); NATIONI IAPI de Java
POO :: Programación basada en objetos 8 LocalDate & LocalDateTime PO · Es la fecha actual del sistema. · Es una clase inmutable. Una vez creado no se modifica. Cualquier operación devuelve una nueva instancia https://gitlab.etsisi.upm.es/jbernal/poo api LocalDate today = LocalDate.now(); LocalDate customDate = LocalDate.of(2023, 9, 15); LocalDate nextWeek = today.plusDays(7); TECHNICA NATIONI IMPENDIPOO :: Programación basada en objetos 9
Enumerados Caracteristicas · Es una clase especial que define un conjunto de constantes predefinidas, limitando las posibles instancias a esas constantes https://gitlab.etsisi.upm.es/jbernal/poo enumerated. public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY } Day day = Day.MONDAY; Day.values(); Day.valueOf("FRIDAY")); TECHNICA NATIONI IMPENDIPOO :: Programación basada en objetos 10
Enumerados Caracteristicas D · Permite asociar valores a las diferentes constantes. public enum Month { JANUARY(31), FEBRUARY(28), MARCH(31), APRIL(30), MAY(31), JUNE(30), JULY(31), AUGUST(31), SEPTEMBER(30), OCTOBER(31), NOVEMBER(30), DECEMBER(31); private final int days; Month(int days) { this.days = days; } public int getDays() { return this.days; } } CA NATIONI IMPENDIPOO :: Programación basada en objetos 11
Genericos Tipos Genéricos · Los tipos genéricos, también llamados tipos parametrizados, permiten definir un tipo mediante un parámetro, que se le dará valor concreto cuando se utilice. · Aunque podemos utilizar cualquier nombre de parámetros para contener tipos, se recomienda: E: elemento, K: clave, N: número, T: tipo, S, U, V ... tipos. https://gitlab.etsisi.upm.es/jbernal/poo generics public class Box { private E element; Box box = new Box<>(); box.put(10); Integer integer = box.get(); public void put(E element) { this.element = element; } TECHNICA NATIONI IMPENDI public E get() { return this.element; } }POO :: Programación basada en objetos 12
Colecciones Interface List · Es una lista, no ordenada, en que se mantiene el orden de los elementos, pudiendo acceder a su contenido según la posición. Esta lista crece según las necesidades. · Para clases propias se debe sobrescribir: equals () & hashcode(). Implementaciones: · ArrayList. Esta implementación mantiene la lista compactada en un array. Tiene la ventaja de realizar lecturas muy rápidas, el problema está en borrar elementos intermedios. No está preparada para trabajar con varios hilos (concurrencia). · Vector. Muy parecida al anterior, pero con la diferencia de estar preparada para trabajar con hilos. · LinkedList. Esta lista se implementa mediante una lista entrelazada, formada por nodos que apuntan al elemento siguiente y el elemento anterior. Esta implementación favorece las inserciones y el borrado, pero hacen muy lento el recorrido. https://gitlab.etsisi.upm.es/jbernal/poo collections List list1 = List.of("0", "1", "2"); //Immutable List List list2 = new ArrayList<>(); //mutable list list2.add("zero"); list2.add("one"); list2.set(1, "1"); // se sustituye el elemento list2.add(0, "-1"); // se desplazan los elementos list2.remove(0); JA list1.get(1) TECHNICA NATIONI IMPENDI13
POO :: Programación basada en objetos Colecciones Interface Set · Es una lista, no ordenada, que no contiene elementos repetidos. Se apoya en el método equals. Esta lista crece según las necesidades. · Para clases propias se debe sobrescribir: equals () & hashcode(). Implementaciones: · HashSet. Basada en una tabla hash. No se garantiza el orden de los elementos. Soporta valores null. No está preparada para trabajar con varios hilos (concurrencia). https://gitlab.etsisi.upm.es/jbernal/poo collections IICA NATIONI14
POO :: Programación basada en objetos Colecciones Interface Map · Es una colección de duplas de clave valor, también conocido como diccionario. Las claves no pueden estar repetidas, si dos elementos tienen la misma clave se considera que es el mismo Implementaciones: · HashMap. Es la más común. No garantiza un orden. No es seguro con hilos. · Hashtable. Parecido pero soporta la programación multihilo · TreeMap. Almacena los pares clave-valor en un árbol binario de búsqueda equilibrado. Mantiene un orden de las claves, lo que significa que los elementos se almacenan y recuperan en orden ascendente según las claves. https://gitlab.etsisi.upm.es/jbernal/poo collections Map map = new HashMap<>(); map.put(2, "two"); map.put(5, "five"); map.put(1, "one"); map.keySet(); map.values(); map.remove(1); map.get(1); map.replace(5, "FIVE"); TECHNICA NATIONI IMPENDIAPI de Java
POO :: Programación basada en objetos 15 Optional. Optional · Reemplaza los valores null, evitando la excepción NullPointer Exception por mala programación. · En lugar de devolver null, se devuelve Optional.empty(). · El código se vuelve más legible, se obliga al consumidor manejar la posibilidad que no haya resultado, evitando el error. https://gitlab.etsisi.upm.es/jbernal/poo api Optional point = Optional.of(new Point()); point = Optional.empty(); if (point.isPresent()) { System.out.println("Esta presente:" + point.get()); } Point aPoint = point.orElse(new Point()); if (point.isEmpty()) { System.out.println("Esta vacio"); } aPoint = point.orElseThrow(); //Throws: NoSuchElementException aPoint = point.orElseThrow(() -> new RuntimeException()); TECHNICA NATIONI IMPENDI