Programación
orientada a objetos
Objetivos de este
módulo
   Definir los conceptos de la programación
    orientada a objetos
   Utilizar los modificadores de acceso private y
    public (encapsulamiento)
   Invocar un método de un objeto
Historia del Software
La Fase de Análisis y
Diseño
   El análisis describe qué hace el sistema:
      Modelado del mundo real: actores y actividades,

       objetos y comportamientos

   El diseño describe cómo lo hace:
     Modelado de relaciones e iteraciones entre objetos y

       actores en el sistema
     Detectar abstracciones útiles para simplificar el

       problema o la solución
Abstracción
   Funciones – Escribir el algoritmo una vez para usarlo
    muchas veces
   Objetos – Agrupar un conjunto de atributos relacionados
    y comportamientos en una clase
   Frameworks y APIs – Grandes grupos de objetos que
    dan soporte a una actividad compleja
     Los Frameworks pueden ser utilizados “tal como

       están” o se pueden extender sus comportamientos
Clases como Diseño de
    En una fábrica, el diseño de un dispositivo describe como se
    van a construir muchos dispositivos físicos.

   En software, una clase es la descripción de un objeto:
       Una clase describe los datos que cada objeto incluye
       Una clase describe el comportamiento que cada objeto exhibe
   En la tecnología Java, las clases cumplen tres
    características claves de la POO:

       Herencia
    
        Encapsulamiento
        Polimofirmo
Declarar clases en Java
    Sintaxis básica de una clase Java:
    <modificador> class < nombre_clase> {
     [< declaraciones_de_atributos>]
     [< declaraciones_de_constructores>]
     [< declaraciones_de_métodos>]
     }

• Ejemplo:
   public class Vehicle {
   private double maxLoad;
   public void setMaxLoad(double value) {
   maxLoad = value;
   }}
Declarar atributos
    Sintaxis básica de un atributo:
    [< modificadores>] < tipo> <nombre> [ = <valor_inicial>];

   Ejemplo
    public class Foo {
    private int x;
    private float y = 10000.0F;
    private String name = "Bates Motel";
    }
Declarar métodos
   Sintaxis básica de métodos:
  [< modificadores >] < tipo_de_retorno> <nombre>([<
    lista_de_argumentos>]) {
            [< sentencias>]}
 Ejemplo

public class Dog {
private int weight;
public int getWeight() {
    return weight;
}
public void setWeight(int newWeight) {
    weight = newWeight;
}
}
Acceder a miembros de
un Objeto
   La notación “punto”: <objeto>.<miembro>

   Esto es utilizado para acceder a miembros de objetos,
    como los atributos y métodos

   Ejemplos:
   d.setWeight(42);

   d.weight = 42; // sólo permitido si weight tiene alcance
    public
Ocultamiento de
Información
   El problema:
     El código del cliente tiene acceso a los datos
       internos
      d.day = 32;
      // día no válido
      d.month = 2; d.day = 30;
      //posible pero erróneo
      d.day = d.day + 1;
      // no realiza chequeo sobre el mes
Ocultamiento de
Información
   La solución:
    El código del cliente debe utilizar
       los métodos setters/getters para
       acceder a los datos internos:

    MyDate d = new MyDate();
    d.setDay(32);

    d.setMonth(2);
    d.setDay(30);

    d.setDay(d.getDay() + 1);
Encapsulamiento
   Oculta los detalles de
    implementación de una
    clase
   Obliga al usuario a utilizar
    una interfase para
    acceder a los datos
   Hace el código más
    mantenible
Declarar constructores
   Sintaxis básica de un constructor:

[< modificador>] < nombre_de_clase> ([<
   lista_de_argumentos>]) {
        [< sentencias>]
}
Declarar constructores
Ejemplo
1 public class Dog {
2 private int weight;
3
4 public Dog() {
5 weight = 42;
6}
7
8 public int getWeight() {
9 return weight;
10 }
11 public void setWeight(int newWeight) {
12 weight = newWeight;
13 }}
El constructor por defecto
   Existe por lo menos un constructor en cada clase.
   Si el programador no escribe ningún constructor, el
    constructor por defecto esta presente
    automáticamente:
     El constructor por defecto no recibe parámetros

     El cuerpo del constructor es vacío

     Permite al programador construir objetos con new

       Xxx() sin tener que escribir un constructor.
Diseño de archivo fuente
   Sintaxis básica de un archivo Java:
    [< declaración_de_package>]
    [< declaraciones_de_import>]
    < declaración_de_clase>+

   Ejemplo del archivo VehicleCapacityReport.java :

    package shipping.reports;
    import shipping.domain.*;
    import java.util.List;
    import java.io.*;
    public class VehicleCapacityReport {
    private List vehicles;
    public void generateReport(Writer output) {...}
    }
Paquetes de Software
   Los paquetes permiten
    un mejor manejo de
    sistemas de software
    grandes
   Los paquetes pueden
    contener clases y sub-
    paquetes
La sentencia package
   Sintaxis básica de la sentencia package:
    package < nombre_de_paquete_padre>[.< nombre_de_sub-
    paquete>]*;
   Ejemplo:
    package shipping.reports;
   Especifique la declaración del package al comienzo del archivo
    fuente.
   Solamente una declaración de paquete por archivo fuente.
   Si ningún paquete es declarado, entonces la clase pertenece
    al paquete por defecto.
   Los nombres de los paquetes debe ser jerárquico y separado
    por punto.
La sentencia import
   Sintaxis básica de la sentencia import:

import < nombre_pkg> [.<nombre_sub_pkg>].<
  nombre_clase>;

O

import < nombre_pkg>[.< nombre_sub_pkg>].*;
La sentencia import
   Ejemplo:
    import shipping.domain.*;
    import java.util.List;
    import java.io.*;

   Precede a todas las declaraciones de clases

   Le indica al compilador dónde encontrar las clases que
    se utilizan
Diseño de paquetes y
directorios
   Los paquetes son
    guardados en el árbol
    de directorio que
    contenga el nombre del
    paquete.
   Ejemplo, los paquetes
    de la aplicación
    “shipping” :
Desarrollo
   Compilar usando -d
    javac -d ../class banking/domain/*.java
Repaso de la Terminología
   Clase – Código fuente que diseña los objetos de tiempo
    de ejecución
   Objeto – Instancia de una clase
    También conocido como instancia
   Atributo – Elemento con información de un objeto
    También conocido como dato miembro, variable de
    instancia, campo de dato
   Método – Elemento que define el comportamiento de un
    objeto. También conocido como algoritmo, función,
    procedimiento
   Constructor – Es “como un método” constructor
    utilizado para inicializar un objeto nuevo
   Package – Grupo de clases agrupada y/o sub paquetes
Utilizando la
documentación de Java
(API)
   Conjunto de archivos HTML que provee información de
    las API
   Un frame describe un paquete y contiene enlaces a
    páginas que describen la información de cada clase en
    ese paquete.
   El documento de cada clase incluye la jerarquía de
    clases a la cuál pertenece, una descripción de la clase,
    una lista de variables miembro, una lista de
    constructores, una lista de métodos, etc
Ejercicio
   En este ejercicio hay que crear una
    versión simple de la clase Account.
    Tiene que poner el archivo fuente en
    el paquete banking. Un programa de
    testeo, llamado TestBanking, va a ser
    escrito en el paquete por defecto y va
    a crear una cuenta. El mismo inicializa
    el balance de la cuenta y realiza
    algunas transacciones simples.
    Finalmente, el programa de testeo
    muestra el balance final de la cuenta.
Ejercicios de Ocultamiento

               Vehicle
   +load : double
   +maxLoad : double
   +Vehicle(entrada maxLoad : double)
   +getLoad() : double
   +getMaxLoad() : double
Ejercicios de Ocultamiento

                  Vehicle
   -
   +load : double
   -
   +maxLoad : double
   +Vehicle(entrada maxLoad : double)
   +getLoad() : double
   +getMaxLoad() : double
   +addBox(entrada weight : double) : bool
Ejercicios de Ocultamiento

                    Vehicle
  -
  +load : double
  +maxLoad : double
  -
  +Vehicle(entrada maxLoad : double)
  +getLoad() : double
  +getMaxLoad() : double
  +addBox(entrada weight : double) : bool
  -
  +newtsToKilo(entrada weight : double) : double
  -
  +kiloToNewts(entrada weight : double) : double

1 -programacion_oo

  • 1.
  • 2.
    Objetivos de este módulo  Definir los conceptos de la programación orientada a objetos  Utilizar los modificadores de acceso private y public (encapsulamiento)  Invocar un método de un objeto
  • 3.
  • 4.
    La Fase deAnálisis y Diseño  El análisis describe qué hace el sistema:  Modelado del mundo real: actores y actividades, objetos y comportamientos  El diseño describe cómo lo hace:  Modelado de relaciones e iteraciones entre objetos y actores en el sistema  Detectar abstracciones útiles para simplificar el problema o la solución
  • 5.
    Abstracción  Funciones – Escribir el algoritmo una vez para usarlo muchas veces  Objetos – Agrupar un conjunto de atributos relacionados y comportamientos en una clase  Frameworks y APIs – Grandes grupos de objetos que dan soporte a una actividad compleja  Los Frameworks pueden ser utilizados “tal como están” o se pueden extender sus comportamientos
  • 6.
    Clases como Diseñode En una fábrica, el diseño de un dispositivo describe como se van a construir muchos dispositivos físicos.   En software, una clase es la descripción de un objeto:  Una clase describe los datos que cada objeto incluye  Una clase describe el comportamiento que cada objeto exhibe  En la tecnología Java, las clases cumplen tres características claves de la POO:  Herencia  Encapsulamiento Polimofirmo
  • 7.
    Declarar clases enJava  Sintaxis básica de una clase Java: <modificador> class < nombre_clase> { [< declaraciones_de_atributos>] [< declaraciones_de_constructores>] [< declaraciones_de_métodos>] } • Ejemplo: public class Vehicle { private double maxLoad; public void setMaxLoad(double value) { maxLoad = value; }}
  • 8.
    Declarar atributos  Sintaxis básica de un atributo: [< modificadores>] < tipo> <nombre> [ = <valor_inicial>];  Ejemplo public class Foo { private int x; private float y = 10000.0F; private String name = "Bates Motel"; }
  • 9.
    Declarar métodos  Sintaxis básica de métodos: [< modificadores >] < tipo_de_retorno> <nombre>([< lista_de_argumentos>]) { [< sentencias>]}  Ejemplo public class Dog { private int weight; public int getWeight() { return weight; } public void setWeight(int newWeight) { weight = newWeight; } }
  • 10.
    Acceder a miembrosde un Objeto  La notación “punto”: <objeto>.<miembro>  Esto es utilizado para acceder a miembros de objetos, como los atributos y métodos  Ejemplos:  d.setWeight(42);  d.weight = 42; // sólo permitido si weight tiene alcance public
  • 11.
    Ocultamiento de Información  El problema:  El código del cliente tiene acceso a los datos internos d.day = 32; // día no válido d.month = 2; d.day = 30; //posible pero erróneo d.day = d.day + 1; // no realiza chequeo sobre el mes
  • 12.
    Ocultamiento de Información  La solución: El código del cliente debe utilizar los métodos setters/getters para acceder a los datos internos: MyDate d = new MyDate(); d.setDay(32); d.setMonth(2); d.setDay(30); d.setDay(d.getDay() + 1);
  • 13.
    Encapsulamiento  Oculta los detalles de implementación de una clase  Obliga al usuario a utilizar una interfase para acceder a los datos  Hace el código más mantenible
  • 14.
    Declarar constructores  Sintaxis básica de un constructor: [< modificador>] < nombre_de_clase> ([< lista_de_argumentos>]) { [< sentencias>] }
  • 15.
    Declarar constructores Ejemplo 1 publicclass Dog { 2 private int weight; 3 4 public Dog() { 5 weight = 42; 6} 7 8 public int getWeight() { 9 return weight; 10 } 11 public void setWeight(int newWeight) { 12 weight = newWeight; 13 }}
  • 16.
    El constructor pordefecto  Existe por lo menos un constructor en cada clase.  Si el programador no escribe ningún constructor, el constructor por defecto esta presente automáticamente:  El constructor por defecto no recibe parámetros  El cuerpo del constructor es vacío  Permite al programador construir objetos con new Xxx() sin tener que escribir un constructor.
  • 17.
    Diseño de archivofuente  Sintaxis básica de un archivo Java: [< declaración_de_package>] [< declaraciones_de_import>] < declaración_de_clase>+  Ejemplo del archivo VehicleCapacityReport.java : package shipping.reports; import shipping.domain.*; import java.util.List; import java.io.*; public class VehicleCapacityReport { private List vehicles; public void generateReport(Writer output) {...} }
  • 18.
    Paquetes de Software  Los paquetes permiten un mejor manejo de sistemas de software grandes  Los paquetes pueden contener clases y sub- paquetes
  • 19.
    La sentencia package  Sintaxis básica de la sentencia package: package < nombre_de_paquete_padre>[.< nombre_de_sub- paquete>]*;  Ejemplo: package shipping.reports;  Especifique la declaración del package al comienzo del archivo fuente.  Solamente una declaración de paquete por archivo fuente.  Si ningún paquete es declarado, entonces la clase pertenece al paquete por defecto.  Los nombres de los paquetes debe ser jerárquico y separado por punto.
  • 20.
    La sentencia import  Sintaxis básica de la sentencia import: import < nombre_pkg> [.<nombre_sub_pkg>].< nombre_clase>; O import < nombre_pkg>[.< nombre_sub_pkg>].*;
  • 21.
    La sentencia import  Ejemplo: import shipping.domain.*; import java.util.List; import java.io.*;  Precede a todas las declaraciones de clases  Le indica al compilador dónde encontrar las clases que se utilizan
  • 22.
    Diseño de paquetesy directorios  Los paquetes son guardados en el árbol de directorio que contenga el nombre del paquete.  Ejemplo, los paquetes de la aplicación “shipping” :
  • 23.
    Desarrollo  Compilar usando -d javac -d ../class banking/domain/*.java
  • 24.
    Repaso de laTerminología  Clase – Código fuente que diseña los objetos de tiempo de ejecución  Objeto – Instancia de una clase También conocido como instancia  Atributo – Elemento con información de un objeto También conocido como dato miembro, variable de instancia, campo de dato  Método – Elemento que define el comportamiento de un objeto. También conocido como algoritmo, función, procedimiento  Constructor – Es “como un método” constructor utilizado para inicializar un objeto nuevo  Package – Grupo de clases agrupada y/o sub paquetes
  • 25.
    Utilizando la documentación deJava (API)  Conjunto de archivos HTML que provee información de las API  Un frame describe un paquete y contiene enlaces a páginas que describen la información de cada clase en ese paquete.  El documento de cada clase incluye la jerarquía de clases a la cuál pertenece, una descripción de la clase, una lista de variables miembro, una lista de constructores, una lista de métodos, etc
  • 26.
    Ejercicio  En este ejercicio hay que crear una versión simple de la clase Account. Tiene que poner el archivo fuente en el paquete banking. Un programa de testeo, llamado TestBanking, va a ser escrito en el paquete por defecto y va a crear una cuenta. El mismo inicializa el balance de la cuenta y realiza algunas transacciones simples. Finalmente, el programa de testeo muestra el balance final de la cuenta.
  • 27.
    Ejercicios de Ocultamiento Vehicle +load : double +maxLoad : double +Vehicle(entrada maxLoad : double) +getLoad() : double +getMaxLoad() : double
  • 28.
    Ejercicios de Ocultamiento Vehicle - +load : double - +maxLoad : double +Vehicle(entrada maxLoad : double) +getLoad() : double +getMaxLoad() : double +addBox(entrada weight : double) : bool
  • 29.
    Ejercicios de Ocultamiento Vehicle - +load : double +maxLoad : double - +Vehicle(entrada maxLoad : double) +getLoad() : double +getMaxLoad() : double +addBox(entrada weight : double) : bool - +newtsToKilo(entrada weight : double) : double - +kiloToNewts(entrada weight : double) : double