SlideShare una empresa de Scribd logo
1 de 81
Descargar para leer sin conexión
Orientación a Objetos, una técnica
para mejorar la calidad del software


    Programación Orientada a Objetos
Desarrollo de software OO

Método de desarrollo de software que basa la
 arquitectura del sistema en módulos deducidos
 de los tipos de objetos que se manipulan (en
 lugar de basarse en la función o funciones a las
 que el sistema está destinado a asegurar).
Desarrollo de software OO
Encontrar los objetos relevantes
Encontrar las operaciones para los tipos
de objetos
Describir los tipos de objetos
Encontrar relaciones entre objetos
Utilizar los tipos de objetos y las
relaciones para estructurar el software
Ejemplo: objeto coche
                         Funciones que puede realizar:
                           •Ir
                           •Parar
                           •Girar a la derecha
                           •Girar a la izquierda
                           •Arrancar
id: número de bastidor
                         Tiene las características:
                            •Color
                            •Velocidad
                            •Tamaño
                            •Carburante
Clases de objetos
Los objetos con estados similares y el mismo
comportamiento se agrupan en clases
Clase Coche
            Coche

    color
    velocidad
    tamaño
    carburante

    ir
    parar
    girarDerecha
    girarIzquierda
    arrancar
Relaciones entre objetos
B es un cliente de A si todo objeto de B puede contener
información sobre uno o mas objetos de A

                 B                          A
               A at
B hereda de A si B denota una versión especializada de
A
                                        A

                                        B
Relación de cliente




         propietario
 Coche                 Persona
Relación de Herencia

          TRANSPORTE
Estructura del software

          Publicacion                            Autor




Revista      Libro         Actas                 Congreso



          “Libro es una especialización de Publicacion”
          “Publicacion usa servicios de Autor”
Modelo de objetos
  Programación Orientada a Objetos            Métodos de Análisis y Diseño OO




                           Modelo de Objetos
                                  Abstracción
                                 Encapsulación
                                  Modularidad
                                   Herencia
                                  Polimorfismo
                                                          Bases de Datos OO
Otros desarrollos se asientan en el paradigma OO

 Desarrollo basado en componentes
 Tecnología de objetos distribuidos
Abstracción
                                                   “Supresión intencionada, u
                                                   ocultamiento,    de   algunos
                                                   detalles de un proceso o
                                                   artefacto, con el objeto de
                                                   destacar de manera más clara
                                                   otros aspectos, detalles o
                                                   estructuras”
                                                   Tipos de abstracción:
                                                        Datos, procedural
                                                   Métodos de abstracción:
                                                        Parametrización
                                                        Especificación


[Booch’96] Booch, G. Análisis y Diseño Orientado Sofware y con Aplicaciones. Addison-Wesley. 1996
  Curso 2009/2010                    Calidad del a Objetos OO                                57
Encapsulación
“Proceso de almacenar en un mismo compartimento los
elementos de una abstracción que constituyen su
estructura y su comportamiento”
El enfoque de la POO

Programa OO            Colección estructurada
                              de clases

   Clase               Implementación de un
                       Tipo Abstracto de Datos (TAD)

  Objeto               Una instancia de una clase


  Los objetos se comunican mediante mensajes
Clases
DEFINICIÓN: Implementación total o parcial de un TAD
Entidad sintáctica que describen objetos que van a
tener la misma estructura y el mismo
comportamiento.
Doble naturaleza: Módulo + Tipo de Datos
  Módulo (concepto sintáctico)
     Mecanismo para organizar el software
  Tipo (concepto semántico)
     Mecanismo de definición de nuevos tipos de datos: describe
     una estructura de datos (objetos) y las operaciones
     aplicables.
Componentes de un clase
Atributos:
    Determinan una estructura de almacenamiento para cada
    objeto de la clase
Métodos:
    Operaciones aplicables a los objetos
    Único modo de acceder a los atributos

Ejemplo : En una aplicación bancaria, encontramos objetos
 “cuenta”. Todos los objetos “cuenta” tienen propiedades comunes:
    atributos: saldo, titular, ...
    operaciones: reintegro, ingreso, …


     Definimos una clase CUENTA
Ejemplo: Clase Cuenta
             Cuenta
                                 Definición de la clase
 titular: String;
                                  Atributos
 saldo: double;
 reintegro(valor:double);
 ingreso (valor:double);           Métodos


Tiempo de ejecución
                            “José Martínez” titular
                                1200.0      saldo
                            Objeto Cuenta
Clase Cuenta en Java
class Cuenta{
     String titular;             ATRIBUTOS
     double saldo;

      void ingreso (double cantidad){
           saldo = saldo + cantidad;
      }
      void reintegro (double cantidad){
           if (cantidad <= saldo)
                saldo = saldo – cantidad;
      }                           MÉTODOS
}
Ocultación de Información
A las características de una clase (atributos y
métodos) se les puede asignar un modificador
de visibilidad:
  public:
     Característica pública, accesible desde todas las clases
  private:
     Característica privada, accesible sólo dentro de la clase
     donde se define
Principio de diseño:
  Todos los atributos de una clase son privados
  Los métodos pueden tener distintos niveles de
  visibilidad
Clase Cuenta en Java
class Cuenta{
       private String titular;
       private double saldo;

      public void ingreso (double cantidad){
             saldo = saldo + cantidad;
      }
      public void reintegro (double cantidad){
             if (puedoSacar(cantidad))
                    saldo = saldo – cantidad;
      }
      private boolean puedoSacar(double cantidad){
             return cantidad <= saldo;
      }
}
Acceso y modificación de atributos
La única forma de acceder a los atributos es a
través de métodos públicos
  Métodos get   para consultar el valor del
              atributo
  Métodos set   para establecer el valor del
              atributo
La implementación de los métodos set/get
depende del nivel de acceso de los atributos.
Se aísla al cliente de los cambios en la
estructura de datos.
Clase Cuenta en Java
class Cuenta{
       private String titular;
       private double saldo;

      public String getTitular(){
             return titular;
      }
      //No setTitular porque es inmutable

      public double getSaldo(){
             return saldo;
      }
      /* No setSaldo porque se modifica con ingresos
         y reintegros */
}
Paquetes
Unidad modular del lenguaje que permite agrupar
clases que están relacionadas
Además de public y private, se puede establecer
que una característica de la clase tiene visibilidad a
nivel de paquete
A las clases también se les puede especificar un nivel
de visibilidad:
   public: la clase es visible desde cualquier paquete
   A nivel de paquete: la clase sólo es visible en el paquete al que
   pertenece.
Paquetes
La pertenencia de una clase a un paquete se
debe especificar antes de la declaración
(package)
Para utilizar una clase definida en un paquete
distinto:
  Se utiliza el nombre cualificado de la clase
     Ejemplo: java.util.LinkedList unaLista;
  Se importa la clase o el paquete al comienzo de la
  declaración
     Se puede utilizar el nombre de la clase sin cualificar
     import java.util.LinkedList; o bien
     import java.util.*;
Clase Cuenta en Java
package banco;
import java.util.LinkedList;
public class Cuenta{
     String titular;
     double saldo;
     LinkedList ultimasOperaciones;

      void ingreso (double cantidad){…
      }
      void reintegro (double cantidad){…
      }
}
Objetos
Un objeto es una instancia de una clase,
creada en tiempo de ejecución
Es una estructura de datos formada por tantos
campos como atributos tiene la clase.
El estado de un objeto viene dado por el valor
de los campos.
Los métodos permiten consultar y modificar el
estado del objeto.
Objetos dominio vs. Objetos aplicación
   Ejemplo: Aplicación Correo electrónico
Objetos externos:
  Procedentes del dominio de la aplicación:
    “carpeta”, “buzón”, “mensaje”

Objetos software:
  Procedentes del ANALISIS: todos los externos
  Procedentes del DISEÑO/IMPLEMENTACION:
    “lista enlazada”, “ventana”,...
cuentaAhorro                         Cuenta                         Persona

    empleado
                                               CuentaCorriente   CuentaAhorro         Empleado   Cliente

  cuentaCorriente         cliente
                                                                           Sistema Software (Clases)
     Objetos del mundo real




                                           O
                                        EÑ
                                         S
                                      DI
                                                                           EJECUCIÓN
               AN
                    AL
                      ISI
                          S



                                                            empleado       cuentaAhorro
“Cada objeto es
   instancia                                             cuentaCorriente    cliente

    directa
                                                  Instancias de las clases (objetos software)
 de una clase”
Tipos de los atributos
Tipos de datos primitivos:
  Enteros: byte, short, int, long
  Reales: float, double
  Carácter: char
  Booleano: boolean
Referencias:
  Sus valores son objetos de tipos no básicos, otras
  clases.
  Enumerados: son clases que representan un
  conjunto finito de valores
Enumerados
enum EstadoCuenta{
  OPERATIVA, INMOVILIZADA, NUM_ROJOS;
}

public class   Cuenta{
     private   String titular;
     private   double saldo;
     private   EstadoCuenta estado;
     …
}
Relación cliente
Cuando en una clase A establecemos que el
tipo de un atributo es otra clase B, decimos que
A es cliente de B.

Por ejemplo:
  Definimos la clase Persona
  Declaramos el tipo del atributo titular (en la clase
  Cuenta) como Persona.
  La clase Cuenta es cliente de la clase Persona
Relación de cliente
           Cuenta                             Persona
titular: Persona;                       nombre: String;
saldo: double;                          dni: String;
reintegro(valor:double);
ingreso (valor:double);

                        Referencia a otro objeto!!

           titular                          “José Martínez”
           saldo 1200.0                      “34789567R”
               Objeto Cuenta                 Objeto Persona
Semántica referencia
Una referencia es un valor que en tiempo de ejecución
está o vacío (null) o conectado.
Si está conectado, una referencia identifica a un único
objeto.
Mientras exista, cada objeto posee una identidad única,
independiente de su estado     identificador de
objeto (oid):
  Dos objetos con diferentes oids pueden tener los mismos
  valores en sus campos.
  Los valores de los campos de un objeto pueden cambiar, pero
  su oid es inmutable.
Cuando se asigna un objeto a una variable no se asigna
la estructura de datos del objeto sino el oid.
Igualdad vs. identidad
                  b
                                 d
a       “uno”           “uno”             “dos”
         23              23                23
c
    Igualdad entre referencias       Identidad
      a == c          {true}
      a == b          {false}
    Igualdad entre objetos
      Podemos utilizar el método equals
Copia de objetos
Si la asignación no implica copia de
objetos ¿cómo se pueden copiar?
  copia = obj.clone();
  Constructor de copia:
    Se pasa como parámetro un objeto de la misma
    clase
    Se inicializan los campos del nuevo objeto con los
    mismos valores de los campos del objeto que se
    pasa como parámetro.
Semántica referencia
Ventajas de las referencias:
  Compartición de objetos integridad referencial
  Permite definir estructuras recursivas (auto-
  referencias)
  Más eficiente manejo objetos complejos
  Los objetos se crean cuando se necesitan
  Soporte para el polimorfismo
Semántica referencia

miCuenta
                 titular              J. Gomez nombre
                 codigo    123456     87654321 dni

                  saldo    100000     Objeto Persona

      ultimasOperaciones

                                    -5000       10000
                                            Objeto Array
Semántica referencia
             Compartición                        Autorreferencias
           Objeto Cuenta     Objeto Cuenta
                                                 nombre      M. Martinez
 titular                             titular     categoria       Fijo
codigo      123456            876234 codigo
                                                 salario      100000000
 saldo      100000            50000   saldo
                                                   jefe
ultOper                                ultOper
                                                             Objeto Empleado
           -5000                   55000
           10000                   -5000
                     J. Gómez nombre
                     87654321 dni
                      Objeto Persona
Métodos y mensajes
Un método está compuesto por:
  Cabecera: Identificador y Parámetros
  Cuerpo: Secuencia de instrucciones
Mensaje:
  Mecanismo básico de la computación OO.
  Invocación de la aplicación de un método sobre un
  objeto.
Un mensaje está formado por tres partes
  Objeto receptor
  Selector o identificador del método a aplicar
  Argumentos
Ejemplo método vs. mensaje
    Método reintegro en la clase Cuenta:

public double reintegro (double cantidad) {
       if (puedoSacar(cantidad))
            saldo = saldo – cantidad;
}


    Mensaje, aplica el método reintegro sobre un
    objeto cuenta:
       cuenta.reintegro(600.0);
Definición de Métodos
Todo método tiene un valor de retorno
  Si no devuelve nada se indica con void
Para cada método se establece el nivel de
visibilidad
¿Qué instrucciones podemos incluir en el
cuerpo de un método?
  Asignación
  Estructuras condicionales
  Iteración
  Invocación a otro método = Mensajes
  Creación de objetos
Sentencias de control de flujo
                           switch(expresión) {
                               case valor1:
if( expresión-booleana )
                                  sentencias;
{
                                  break;
      sentencias;
}                              case valor2:

[else {                           sentencias;
      sentencias;                 break;

}]                             [default:
                                  sentencias;]
                           }
Ejemplos
int saldo;
…
if (saldo<0)
   estadoCuenta = Estado.NUMEROS_ROJOS;

int dia;
…
switch (dia){
    case 1: System.out.println(“Lunes”); break;
    case 2: System.out.println(“Martes”); break;
    …
   case 7: System.out.println(“Domingo”); break;
}
Ejemplo
Método reintegro teniendo en cuenta el estado de la
cuenta:
public boolean reintegro (double cantidad){
    switch (estadoCuenta) {
        case INMOVILIZADA:
        case NUMEROS_ROJOS: return false;
        case OPERATIVA: if (puedoSacar(cantidad))
                             saldo = saldo - cantidad;
                       return true;
        default: return false;
    }
}
Bucles (1/2)
[inicialización;]
do {
       sentencias;
       [iteración;]

}while (expresión-booleana );

[inicialización;]
while( expresión-booleana ) {
       sentencias;
       [iteración;]
}
Ejemplos
public class Cuenta{
       …
       private double[] ultimasOperaciones;

      public double getSaldo(){
         int index = 0;
         double saldo = 0;
         while (index < ultimasOperaciones.length){
             saldo = saldo + ultimasOperaciones[index];
             ++index;
         }
         return saldo;
      }
}
Bucles (2/2)
for( inicialización; exp-booleana; iteración ) {
        sentencias;
}


Bucle ForEach
for(Tipo valor : nombreColeccion){
        //hacer algo con “valor”
    }
Ejemplos
public double getSaldo(){
    double saldo = 0;
    for (int index=0; i<ultimasOperaciones.length; index++)
       saldo = saldo + ultimasOperaciones[index];
    return saldo;
}

public double getSaldo(){
    double saldo = 0;
    for (double operacion : ultimasOperaciones)
             saldo = saldo + operacion;
    return saldo;
}
Sobrecarga de métodos
 Java soporta sobrecarga de métodos
   el mismo nombre pero con DIFERENTE lista de tipos de
   argumentos.
   No pueden diferenciarse únicamente en el tipo de retorno.

//Pago de una compra en una vez
public boolean cobrar(Compra ticket){
       return reintegro(ticket.getTotal());
}

//Pago a plazos    devuelve el número de plazos
public int cobrar(Compra ticket, boolean aplazado){
        …
}
Paso de parámetros
Sea el método
  met (T1 p1,…, Tn pn)
  Donde p1 … pn son los parámetros formales
y la invocación (mensaje)
  obj.met (a1,…,an)
  Donde a1 … an son los parámetros reales

Debemos responder a las siguientes preguntas:
  ¿Cuál es la correspondencia entre parámetros reales y
  formales?
  ¿Qué operaciones se permiten sobre los parámetros formales?
  ¿Qué efecto tendrán las operaciones aplicadas sobre los
  parámetros formales sobre los parámetros reales
  correspondientes?
Paso de parámetros
El efecto del paso de parámetros es una asignación
pi = ai
  En el caso de las referencias, el argumento formal referencia al
  mismo objeto referenciado por el argumento real
  En el caso de los tipos primitivos pi es una copia de ai

Paso de parámetros siempre por valor
  Al parámetro real no le afectan los cambios en el parámetro
  formal

Cuando trabajamos con referencias el efecto de una
operación sobre el parámetro formal implica que se
modifique el estado del parámetro real.
Paso de parámetros
No existe ninguna restricción sobre las
operaciones aplicables sobre los parámetros
formales

Es posible modificar el parámetro formal

El parámetro real no se cambia porque el
parámetro formal era una copia de la
referencia o del tipo primitivo.
Paso de parámetros
public void transferencia(Cuenta emisor, Cuenta receptor,
                          double cantidad) {

      emisor.reintegro(cantidad);         Cambia el estado
      receptor.ingreso(cantidad);         de los dos objetos
      emisor = null;
}
                                            No afectaría a la
                                           variable cuenta1
…
banco.transferencia(cuenta1, cuenta2, 3000.0);
Instancia actual
  Cada operación de una computación OO es
  relativa a cierto objeto, la instancia actual,
  en el momento de la ejecución de la operación
  ¿A qué objeto Cuenta se refiere el texto de la
  rutina reintegro?
El cuerpo de una rutina se refiere a la instancia
   sobre la que se aplica
  La instancia actual es el receptor de la llamada
  actual, el objeto receptor del mensaje
Ejemplo: c1.reintegro(300)
    c1
               titular               J. Gomez nombre
                codigo   123456      87654321 dni

saldo-300        saldo    600         Objeto Persona

    ultimasOperaciones               -5000        10000
                                              Objeto Array

public double reintegro (double cantidad) {
      if (puedoSacar(cantidad))
            saldo = saldo – cantidad;
}
Instancia actual
Si se aplica un método y no se especifica
el objeto receptor, se asume que es la
instancia actual.
public double reintegro (double cantidad) {
      if (puedoSacar(cantidad))
            saldo = saldo – cantidad;
}

El objeto receptor de puedoSacar será
el objeto receptor del reintegro
Referencia this

El lenguaje Java proporciona la palabra clave
this que referencia a la instancia actual.

Utilidad:
  Distinguir los atributos de los parámetros y variables
  locales dentro de la implementación de un método.
  Aplicar un mensaje a otro objeto estableciendo como
  parámetro la referencia al objeto actual.
Referencia this

        public void trasladar(Sucursal sucursal){

                  this.sucursal.eliminar(this);

                  sucursal.añadir(this);
        }


                Se refiere al parámetro   Se refiere a la instancia actual, la cuenta
                                                    que se va a trasladar
Se refiere al atributo de la clase
Creación de Objetos
La declaración de una variable cuyo tipo sea
una clase no implica la creación del objeto.
Se necesita un mecanismo explícito de creación
de objetos: new
¿Por qué?
  Evitar cadena de creaciones antes de empezar a
  hacer nada útil
  Estructuras recursivas
  Los objetos se crean cuando se necesitan
  (referencias vacías, compartir objeto)
Declaración vs. Creación
Cuenta c;                 //declaración
    c       Estado null


 c = new Cuenta(…) //creación explícita

                           • Estado “conectado”
c                          • c contiene la referencia al objeto

                           • c almacena el oid asignado al
        objeto CUENTA
                             objeto al crearse
Constructores
Método encargado de inicializar correctamente los
objetos
Métodos con el mismo nombre de la clase pero sin valor
de retorno
No se pueden invocar una vez que el objeto se ha
creado
Permite sobrecarga para especificar formas distintas
de inicializar los objetos
Toda clase tiene que tener al menos un constructor
Si no se define ningún constructor, el compilador crea
uno por defecto sin argumentos, vacío, que inicializa
los atributos a los valores por defecto.
Inicialización por defecto
Tipo                  Valor Inicial
boolean               false
char                  Carácter 0 (‘u000’)
byte,short,int,       0
long
float                 +0.0f
double                +0.0d
Referencia a objeto   null
Constructores para la clase Cuenta

public Cuenta(Persona quien){
//Utilizamos this para invocar al otro constructor
//    reutilización de código
    this(quien, 100);
}

public Cuenta(Persona quien, double saldoInicial){
    titular = quien;
    saldo = saldoInicial;
    ultimasOperaciones = new double[20];
}
                            El array hay que crearlo!!!
Creación de objetos
La construcción de un objeto consta de tres
etapas:
  Se reserva espacio en memoria para la estructura de
  datos que define la clase.
  Inicializa los campos de la instancia con los valores
  por defecto
     Garantiza que cada atributo de una clase tenga un valor
     inicial antes de la llamada al constructor
  Se aplica sobre la instancia el constructor que se
  invoca
Creación de objetos
    Cuenta cta = new Cuenta (persona, 300.0);



cta                                Objeto
           titular   null
                                   Persona
             saldo   300.0
                      0.0
            codigo     01
ultimasOperaciones   null           …
Atributos finales
Java permite especificar que el valor de un
atributo no podrá variar una vez construido el
objeto
Un atributo se declara de sólo consulta
anteponiendo el modificador final a su
declaración
Los atributos finales sólo pueden ser
inicializados en la declaración o en el
constructor
Atributo final
public class Cuenta {

      //Los atributos se pueden inicializar
      //en el momento de la declaración
      private double saldo = 100;

      private final Persona titular;

      public Cuenta(Persona persona) {
             titular = persona;
      }
                            Error en tiempo de compilación
      …
      public void setTitular(Persona persona){
             titular = persona;
      }
}
Atributos de clase
Representa una propiedad cuyo valor es
compartido por todos los objetos de una misma
clase
Ejemplo:
  Añadimos a las cuentas un atributo para el código de
  cuenta.
  Es necesario una variable que almacene el último
  código de cuenta asignado.
En un lenguaje imperativo se declararía una
variable global.
Java es un lenguaje OO puro que no permite
declaraciones fuera del ámbito de una clase.
Atributos de clase
public class Cuenta {
       private static int ultimoCodigo = 0;

        private    int codigo;
        private    double saldo;
        private    final Persona titular;
        private    double [] ultimasOperaciones;

        public Cuenta(Persona nombre, double saldoInicial) {
               codigo = ++ultimoCodigo;
               titular = nombre;
               saldo = saldoInicial;
               ultimasOperaciones = new double[20];
        }
   …

A los atributos de clase se tiene acceso desde cualquier método de la clase
Constantes
En Java no hay una declaración específica
para las constantes.
Se consigue el mismo resultado definiendo un
atributo de clase y final.
Las constantes no pueden ser modificadas.
    No tiene sentido definir métodos de acceso y
modificación.
El nivel de acceso es controlado por su
visibilidad.
Constantes
public class Cuenta {
       private static final int MAX_OPERACIONES = 20;
       private static final double SALDO_MINIMO = 100;

      private static int ultimoCodigo = 0;

      private   int codigo;
      private   double saldo;
      private   final Persona titular;
      private   double[] ultimasOperaciones;

      public Cuenta(Persona persona) {
             codigo = ++ultimoCodigo;
             titular = persona;
             saldo = SALDO_MINIMO;
             ultimasOperaciones = new double[MAX_OPERACIONES];
      }…
}
      Tema 2                   Clases y Objetos             68
Métodos de clase
¿Cómo definimos operaciones que manejan
atributos de clase?
Un método se define de clase anteponiendo el
identificador static a su declaración
En el cuerpo del método de clase sólo se
puede acceder a los atributos de clase
Para la aplicación de un método de clase no
se hace uso de ningún objeto receptor, sino del
nombre de la clase
Métodos de clase
public class Cuenta {

    private static int ultimoCodigo = 0;
        …

    public static int getNumeroCuentas() {

              return ultimoCodigo;
    }
}



Cuenta.getNumeroCuentas();
Destrucción de objetos


En Java los objetos no se destruyen
explícitamente
Recolección automática de memoria de los
objetos no referenciados (Garbage Collector)
Existe un método finalize()
  Este método se invocará justo antes de la
  recolección de basura
  Interesa para liberar recursos (ej. conexión bases de
  datos).
Modelo de ejecución OO
Para obtener un código ejecutable se deben ensamblar
las clases para formar sistemas (cerrado).
Un sistema viene dado por:
  Un conjunto de clases
  La clase raíz
  El procedimiento de creación de la clase raíz.

La ejecución de un programa OO consiste en:
  Creación dinámica de objetos
  Envío de mensajes entre los objetos creados, siguiendo un
  patrón impredecible en tiempo de compilación
Modelo de ejecución OO
¿Cómo empieza la ejecución de un programa OO?
  Creación de un “objeto raíz”
  Aplicar mensaje sobre “objeto raíz”
En tiempo de ejecución, el flujo de ejecución siempre
se encuentra:
  aplicando una operación sobre un objeto (instancia actual) o
  ejecutando una operación que no es un mensaje (asignación,
  creación).
En un instante dado bien se aplica un mensaje sobre la
instancia actual o sobre un objeto accesible desde él.
Un mensaje siempre formará parte del cuerpo de una
rutina de una clase
Modelo de ejecución OO
RAIZ                   obj2
                                            obj7




                                             obj1




                              obj4
       ACTUAL

                                     obj5


                                                          obj9

                obj3
                                                   obj8
El método main
Debemos proporcionar el nombre de la clase
que conduzca la aplicación

Cuando ejecutamos un programa, el sistema
localizará esta clase y ejecutará el main que
contenga

El método main es un método de clase que
recibe como parámetro un array de cadenas de
texto que son los parámetros del programa
El método main

  Definición del método main

public class Eco{
  public static void main(String[] args){
      for(int i=0; i < args.length; i++)
            System.out.println(args[i]+” ”);
  }
}

  Parámetros del programa:
    c: java Eco estamos aquí --> SALIDA: estamos aquí
Principios de diseño de clases
Favorecer la legibilidad del código:
  Asignar nombres significativos para los identificadores de
  atributos, variables y métodos
  Inicializar los atributos

Favorecer la extensibilidad:
  Utilizar constantes simbólicas significativas
  Seguir los principios de diseño modular
Principios de diseño de clases
Ocultación de la Información
   Los atributos de una clase deben ser privados y ofrecer los métodos
   de consulta necesarios dependiendo de su nivel de acceso (set y/o
   get)
   Diferenciar entre métodos públicos (interfaz de la clase) y métodos
   privados (métodos auxiliares)
   Para acceder a una constante, ésta debe ser pública en lugar de
   ofrecer un método de consulta.
Alta Cohesión
   Fragmentar clases que tengan demasiadas responsabilidades
Bajo Acoplamiento
   Ley de Demeter: “Habla sólo con tus amigos” para un método m de
   una clase C sólo deberían invocarse los métodos: de la clase C, de
   los parámetros que recibe el método m, de cualquier objeto creado
   en el método m, de cualquier atributo (variable de instancia) de la
   clase C

Más contenido relacionado

La actualidad más candente

PROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOPROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOAnabel Jaramillo
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaAngel Vázquez Patiño
 
Analisis y Diseño de Sistemas II Orientado a objetos
Analisis y Diseño de Sistemas II Orientado a objetosAnalisis y Diseño de Sistemas II Orientado a objetos
Analisis y Diseño de Sistemas II Orientado a objetosGloria Gonzales
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosGladys Castillejos
 
Clase3 Programación Orientada a Objetos
Clase3 Programación Orientada a ObjetosClase3 Programación Orientada a Objetos
Clase3 Programación Orientada a Objetosdesimartinez
 
Modelo objeto semántico
Modelo objeto semánticoModelo objeto semántico
Modelo objeto semánticoReicerBlanco
 
Fundamentos de POO
Fundamentos de POOFundamentos de POO
Fundamentos de POOgueritamala
 
Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Josue Lara Reyes
 
Modelos de objetos semanticos
Modelos de objetos semanticosModelos de objetos semanticos
Modelos de objetos semanticosMarelvis_inf
 
Programacion orientada-a-objetos
Programacion orientada-a-objetosProgramacion orientada-a-objetos
Programacion orientada-a-objetosDon Augusto
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetospontifica
 
Introducción a Programación Orientada a Objetos (OOP): Clases y Objetos
Introducción a  Programación Orientada a Objetos (OOP): Clases y ObjetosIntroducción a  Programación Orientada a Objetos (OOP): Clases y Objetos
Introducción a Programación Orientada a Objetos (OOP): Clases y ObjetosKudos S.A.S
 
Diagramas Analisis
Diagramas AnalisisDiagramas Analisis
Diagramas Analisisinnovalabcun
 

La actualidad más candente (19)

Clases y Objetos
Clases y ObjetosClases y Objetos
Clases y Objetos
 
Diagramadeclase 20090223
Diagramadeclase 20090223Diagramadeclase 20090223
Diagramadeclase 20090223
 
PROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETOPROGRAMACION ORIENTADA A OBJETO
PROGRAMACION ORIENTADA A OBJETO
 
Tutorial uml
Tutorial umlTutorial uml
Tutorial uml
 
Programación 3: Clases y objetos en Java
Programación 3: Clases y objetos en JavaProgramación 3: Clases y objetos en Java
Programación 3: Clases y objetos en Java
 
Analisis y Diseño de Sistemas II Orientado a objetos
Analisis y Diseño de Sistemas II Orientado a objetosAnalisis y Diseño de Sistemas II Orientado a objetos
Analisis y Diseño de Sistemas II Orientado a objetos
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Diagrama de clases
Diagrama de clasesDiagrama de clases
Diagrama de clases
 
Componentes en-poo
Componentes en-pooComponentes en-poo
Componentes en-poo
 
Clase3 Programación Orientada a Objetos
Clase3 Programación Orientada a ObjetosClase3 Programación Orientada a Objetos
Clase3 Programación Orientada a Objetos
 
Modelo objeto semántico
Modelo objeto semánticoModelo objeto semántico
Modelo objeto semántico
 
Fundamentos de POO
Fundamentos de POOFundamentos de POO
Fundamentos de POO
 
Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)Conceptos de POO (Programacion Orientada a Objetos)
Conceptos de POO (Programacion Orientada a Objetos)
 
Modelos de objetos semanticos
Modelos de objetos semanticosModelos de objetos semanticos
Modelos de objetos semanticos
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Programacion orientada-a-objetos
Programacion orientada-a-objetosProgramacion orientada-a-objetos
Programacion orientada-a-objetos
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
Introducción a Programación Orientada a Objetos (OOP): Clases y Objetos
Introducción a  Programación Orientada a Objetos (OOP): Clases y ObjetosIntroducción a  Programación Orientada a Objetos (OOP): Clases y Objetos
Introducción a Programación Orientada a Objetos (OOP): Clases y Objetos
 
Diagramas Analisis
Diagramas AnalisisDiagramas Analisis
Diagramas Analisis
 

Similar a Poo java v fin

programacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic netprogramacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic netpp mm
 
Modelo de Objeto Semantico
Modelo de Objeto SemanticoModelo de Objeto Semantico
Modelo de Objeto SemanticoF
 
Analisis y diseño de sistemas
Analisis y diseño de sistemasAnalisis y diseño de sistemas
Analisis y diseño de sistemasjoalmerca6
 
Analisis Y Diseño De Sistemas Orientado A Objetos
Analisis Y Diseño De Sistemas Orientado A ObjetosAnalisis Y Diseño De Sistemas Orientado A Objetos
Analisis Y Diseño De Sistemas Orientado A Objetosjoalmerca6
 
Analisis y diseño de sistemas
Analisis y diseño de sistemasAnalisis y diseño de sistemas
Analisis y diseño de sistemasjoalmerca6
 
Resumen Programación Orientada a Objetos 20_06_2023 (1).pptx
Resumen Programación Orientada a Objetos 20_06_2023 (1).pptxResumen Programación Orientada a Objetos 20_06_2023 (1).pptx
Resumen Programación Orientada a Objetos 20_06_2023 (1).pptxDELIAMARINAHERAZOTUI
 
Modelado Orientado a Objetos
Modelado Orientado a ObjetosModelado Orientado a Objetos
Modelado Orientado a Objetosmenavi
 
Bases De Datos Orientadas A Objetos2
Bases De Datos Orientadas A Objetos2Bases De Datos Orientadas A Objetos2
Bases De Datos Orientadas A Objetos2Cristina Huerta
 
DiseñO De Sitemas
DiseñO De SitemasDiseñO De Sitemas
DiseñO De Sitemaslincoln25
 
Introduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosIntroduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosFabian Dorado
 
Base de datos 2(tema 3)
Base de datos 2(tema 3)Base de datos 2(tema 3)
Base de datos 2(tema 3)Edwin Arias
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetosjent46
 
2clasesdeprogramacion
2clasesdeprogramacion2clasesdeprogramacion
2clasesdeprogramacionAmado Arcaya
 

Similar a Poo java v fin (20)

Diseño oo
Diseño ooDiseño oo
Diseño oo
 
programacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic netprogramacion orientada a objetos en visual basic net
programacion orientada a objetos en visual basic net
 
Modelo de Objeto Semantico
Modelo de Objeto SemanticoModelo de Objeto Semantico
Modelo de Objeto Semantico
 
Analisis y diseño de sistemas
Analisis y diseño de sistemasAnalisis y diseño de sistemas
Analisis y diseño de sistemas
 
Analisis Y Diseño De Sistemas Orientado A Objetos
Analisis Y Diseño De Sistemas Orientado A ObjetosAnalisis Y Diseño De Sistemas Orientado A Objetos
Analisis Y Diseño De Sistemas Orientado A Objetos
 
Analisis y diseño de sistemas
Analisis y diseño de sistemasAnalisis y diseño de sistemas
Analisis y diseño de sistemas
 
3_Orientación a objeto
3_Orientación a objeto3_Orientación a objeto
3_Orientación a objeto
 
Resumen Programación Orientada a Objetos 20_06_2023 (1).pptx
Resumen Programación Orientada a Objetos 20_06_2023 (1).pptxResumen Programación Orientada a Objetos 20_06_2023 (1).pptx
Resumen Programación Orientada a Objetos 20_06_2023 (1).pptx
 
Modelado Orientado a Objetos
Modelado Orientado a ObjetosModelado Orientado a Objetos
Modelado Orientado a Objetos
 
Bases De Datos Orientadas A Objetos2
Bases De Datos Orientadas A Objetos2Bases De Datos Orientadas A Objetos2
Bases De Datos Orientadas A Objetos2
 
DiseñO De Sitemas
DiseñO De SitemasDiseñO De Sitemas
DiseñO De Sitemas
 
Introduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetosIntroduccion a la programacion orientada a objetos
Introduccion a la programacion orientada a objetos
 
Base de datos 2(tema 3)
Base de datos 2(tema 3)Base de datos 2(tema 3)
Base de datos 2(tema 3)
 
Exponer yony y estefany
Exponer  yony y estefanyExponer  yony y estefany
Exponer yony y estefany
 
5poo
5poo5poo
5poo
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
2clasesdeprogramacion
2clasesdeprogramacion2clasesdeprogramacion
2clasesdeprogramacion
 
FPJUCE - Capitulo2
FPJUCE - Capitulo2FPJUCE - Capitulo2
FPJUCE - Capitulo2
 
Base de Datos Orientada a Objetos
Base de Datos Orientada a ObjetosBase de Datos Orientada a Objetos
Base de Datos Orientada a Objetos
 
Bases de datos
Bases de datosBases de datos
Bases de datos
 

Más de Rafael Lizcano

Diseño de Actividades educativas en Educación Virtual (Elearning)
Diseño de Actividades educativas en Educación Virtual (Elearning)Diseño de Actividades educativas en Educación Virtual (Elearning)
Diseño de Actividades educativas en Educación Virtual (Elearning)Rafael Lizcano
 
Formador Moodle - Guia semana 4 - Uso de Recursos didácticos
Formador Moodle - Guia semana 4 - Uso de Recursos didácticosFormador Moodle - Guia semana 4 - Uso de Recursos didácticos
Formador Moodle - Guia semana 4 - Uso de Recursos didácticosRafael Lizcano
 
Instructivo para publicar actividades "HotPotatoes" en Moodle
Instructivo para publicar actividades "HotPotatoes" en MoodleInstructivo para publicar actividades "HotPotatoes" en Moodle
Instructivo para publicar actividades "HotPotatoes" en MoodleRafael Lizcano
 
Instructivo para utilizar HotPotatoes
Instructivo para utilizar HotPotatoesInstructivo para utilizar HotPotatoes
Instructivo para utilizar HotPotatoesRafael Lizcano
 
Proyecto:SIMAS y FREESTYLER
Proyecto:SIMAS y FREESTYLERProyecto:SIMAS y FREESTYLER
Proyecto:SIMAS y FREESTYLERRafael Lizcano
 
EvaluacióN Diagnostica POO
EvaluacióN Diagnostica POOEvaluacióN Diagnostica POO
EvaluacióN Diagnostica POORafael Lizcano
 
EvaluacióN Diagnostica POO
EvaluacióN Diagnostica POOEvaluacióN Diagnostica POO
EvaluacióN Diagnostica POORafael Lizcano
 
Direcciones Macromedia
Direcciones MacromediaDirecciones Macromedia
Direcciones MacromediaRafael Lizcano
 
Circular 43 - Inscripciones segundo trimestre 2009
Circular 43 - Inscripciones segundo trimestre 2009Circular 43 - Inscripciones segundo trimestre 2009
Circular 43 - Inscripciones segundo trimestre 2009Rafael Lizcano
 
Afiche Colombian Skills Etapa B
Afiche Colombian Skills   Etapa BAfiche Colombian Skills   Etapa B
Afiche Colombian Skills Etapa BRafael Lizcano
 
Automatización y control
Automatización y controlAutomatización y control
Automatización y controlRafael Lizcano
 
Informacion General de Internet
Informacion General de InternetInformacion General de Internet
Informacion General de InternetRafael Lizcano
 

Más de Rafael Lizcano (13)

Diseño de Actividades educativas en Educación Virtual (Elearning)
Diseño de Actividades educativas en Educación Virtual (Elearning)Diseño de Actividades educativas en Educación Virtual (Elearning)
Diseño de Actividades educativas en Educación Virtual (Elearning)
 
La web 20
La web 20La web 20
La web 20
 
Formador Moodle - Guia semana 4 - Uso de Recursos didácticos
Formador Moodle - Guia semana 4 - Uso de Recursos didácticosFormador Moodle - Guia semana 4 - Uso de Recursos didácticos
Formador Moodle - Guia semana 4 - Uso de Recursos didácticos
 
Instructivo para publicar actividades "HotPotatoes" en Moodle
Instructivo para publicar actividades "HotPotatoes" en MoodleInstructivo para publicar actividades "HotPotatoes" en Moodle
Instructivo para publicar actividades "HotPotatoes" en Moodle
 
Instructivo para utilizar HotPotatoes
Instructivo para utilizar HotPotatoesInstructivo para utilizar HotPotatoes
Instructivo para utilizar HotPotatoes
 
Proyecto:SIMAS y FREESTYLER
Proyecto:SIMAS y FREESTYLERProyecto:SIMAS y FREESTYLER
Proyecto:SIMAS y FREESTYLER
 
EvaluacióN Diagnostica POO
EvaluacióN Diagnostica POOEvaluacióN Diagnostica POO
EvaluacióN Diagnostica POO
 
EvaluacióN Diagnostica POO
EvaluacióN Diagnostica POOEvaluacióN Diagnostica POO
EvaluacióN Diagnostica POO
 
Direcciones Macromedia
Direcciones MacromediaDirecciones Macromedia
Direcciones Macromedia
 
Circular 43 - Inscripciones segundo trimestre 2009
Circular 43 - Inscripciones segundo trimestre 2009Circular 43 - Inscripciones segundo trimestre 2009
Circular 43 - Inscripciones segundo trimestre 2009
 
Afiche Colombian Skills Etapa B
Afiche Colombian Skills   Etapa BAfiche Colombian Skills   Etapa B
Afiche Colombian Skills Etapa B
 
Automatización y control
Automatización y controlAutomatización y control
Automatización y control
 
Informacion General de Internet
Informacion General de InternetInformacion General de Internet
Informacion General de Internet
 

Último

Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadAlejandrino Halire Ccahuana
 
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwe
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtweBROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwe
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwealekzHuri
 
Flores Nacionales de América Latina - Botánica
Flores Nacionales de América Latina - BotánicaFlores Nacionales de América Latina - Botánica
Flores Nacionales de América Latina - BotánicaJuan Carlos Fonseca Mata
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...JAVIER SOLIS NOYOLA
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdfOswaldoGonzalezCruz
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialpatriciaines1993
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfromanmillans
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxOscarEduardoSanchezC
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024IES Vicent Andres Estelles
 
Movimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en VenezuelaMovimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en Venezuelacocuyelquemao
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PCCesarFernandez937857
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzprofefilete
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosCesarFernandez937857
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para eventoDiegoMtsS
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptxJunkotantik
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.DaluiMonasterio
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPELaura Chacón
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinavergarakarina022
 

Último (20)

Lecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdadLecciones 04 Esc. Sabática. Defendamos la verdad
Lecciones 04 Esc. Sabática. Defendamos la verdad
 
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwe
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtweBROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwe
BROCHURE EXCEL 2024 FII.pdfwrfertetwetewtewtwtwtwtwtwtwtewtewtewtwtwtwtwe
 
Flores Nacionales de América Latina - Botánica
Flores Nacionales de América Latina - BotánicaFlores Nacionales de América Latina - Botánica
Flores Nacionales de América Latina - Botánica
 
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
LA ECUACIÓN DEL NÚMERO PI EN LOS JUEGOS OLÍMPICOS DE PARÍS. Por JAVIER SOLIS ...
 
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
5° SEM29 CRONOGRAMA PLANEACIÓN DOCENTE DARUKEL 23-24.pdf
 
Earth Day Everyday 2024 54th anniversary
Earth Day Everyday 2024 54th anniversaryEarth Day Everyday 2024 54th anniversary
Earth Day Everyday 2024 54th anniversary
 
Día de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundialDía de la Madre Tierra-1.pdf día mundial
Día de la Madre Tierra-1.pdf día mundial
 
Estrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdfEstrategia de Enseñanza y Aprendizaje.pdf
Estrategia de Enseñanza y Aprendizaje.pdf
 
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptxPPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
 
Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024Metabolismo 3: Anabolismo y Fotosíntesis 2024
Metabolismo 3: Anabolismo y Fotosíntesis 2024
 
Movimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en VenezuelaMovimientos Precursores de La Independencia en Venezuela
Movimientos Precursores de La Independencia en Venezuela
 
Identificación de componentes Hardware del PC
Identificación de componentes Hardware del PCIdentificación de componentes Hardware del PC
Identificación de componentes Hardware del PC
 
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyzel CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
el CTE 6 DOCENTES 2 2023-2024abcdefghijoklmnñopqrstuvwxyz
 
Informatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos BásicosInformatica Generalidades - Conceptos Básicos
Informatica Generalidades - Conceptos Básicos
 
programa dia de las madres 10 de mayo para evento
programa dia de las madres 10 de mayo  para eventoprograma dia de las madres 10 de mayo  para evento
programa dia de las madres 10 de mayo para evento
 
La Función tecnológica del tutor.pptx
La  Función  tecnológica  del tutor.pptxLa  Función  tecnológica  del tutor.pptx
La Función tecnológica del tutor.pptx
 
EXPECTATIVAS vs PERSPECTIVA en la vida.
EXPECTATIVAS vs PERSPECTIVA  en la vida.EXPECTATIVAS vs PERSPECTIVA  en la vida.
EXPECTATIVAS vs PERSPECTIVA en la vida.
 
Plan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPEPlan Año Escolar Año Escolar 2023-2024. MPPE
Plan Año Escolar Año Escolar 2023-2024. MPPE
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
codigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karinacodigos HTML para blogs y paginas web Karina
codigos HTML para blogs y paginas web Karina
 

Poo java v fin

  • 1. Orientación a Objetos, una técnica para mejorar la calidad del software Programación Orientada a Objetos
  • 2. Desarrollo de software OO Método de desarrollo de software que basa la arquitectura del sistema en módulos deducidos de los tipos de objetos que se manipulan (en lugar de basarse en la función o funciones a las que el sistema está destinado a asegurar).
  • 3. Desarrollo de software OO Encontrar los objetos relevantes Encontrar las operaciones para los tipos de objetos Describir los tipos de objetos Encontrar relaciones entre objetos Utilizar los tipos de objetos y las relaciones para estructurar el software
  • 4. Ejemplo: objeto coche Funciones que puede realizar: •Ir •Parar •Girar a la derecha •Girar a la izquierda •Arrancar id: número de bastidor Tiene las características: •Color •Velocidad •Tamaño •Carburante
  • 5. Clases de objetos Los objetos con estados similares y el mismo comportamiento se agrupan en clases
  • 6. Clase Coche Coche color velocidad tamaño carburante ir parar girarDerecha girarIzquierda arrancar
  • 7. Relaciones entre objetos B es un cliente de A si todo objeto de B puede contener información sobre uno o mas objetos de A B A A at B hereda de A si B denota una versión especializada de A A B
  • 8. Relación de cliente propietario Coche Persona
  • 10. Estructura del software Publicacion Autor Revista Libro Actas Congreso “Libro es una especialización de Publicacion” “Publicacion usa servicios de Autor”
  • 11. Modelo de objetos Programación Orientada a Objetos Métodos de Análisis y Diseño OO Modelo de Objetos Abstracción Encapsulación Modularidad Herencia Polimorfismo Bases de Datos OO Otros desarrollos se asientan en el paradigma OO Desarrollo basado en componentes Tecnología de objetos distribuidos
  • 12. Abstracción “Supresión intencionada, u ocultamiento, de algunos detalles de un proceso o artefacto, con el objeto de destacar de manera más clara otros aspectos, detalles o estructuras” Tipos de abstracción: Datos, procedural Métodos de abstracción: Parametrización Especificación [Booch’96] Booch, G. Análisis y Diseño Orientado Sofware y con Aplicaciones. Addison-Wesley. 1996 Curso 2009/2010 Calidad del a Objetos OO 57
  • 13. Encapsulación “Proceso de almacenar en un mismo compartimento los elementos de una abstracción que constituyen su estructura y su comportamiento”
  • 14. El enfoque de la POO Programa OO Colección estructurada de clases Clase Implementación de un Tipo Abstracto de Datos (TAD) Objeto Una instancia de una clase Los objetos se comunican mediante mensajes
  • 15. Clases DEFINICIÓN: Implementación total o parcial de un TAD Entidad sintáctica que describen objetos que van a tener la misma estructura y el mismo comportamiento. Doble naturaleza: Módulo + Tipo de Datos Módulo (concepto sintáctico) Mecanismo para organizar el software Tipo (concepto semántico) Mecanismo de definición de nuevos tipos de datos: describe una estructura de datos (objetos) y las operaciones aplicables.
  • 16. Componentes de un clase Atributos: Determinan una estructura de almacenamiento para cada objeto de la clase Métodos: Operaciones aplicables a los objetos Único modo de acceder a los atributos Ejemplo : En una aplicación bancaria, encontramos objetos “cuenta”. Todos los objetos “cuenta” tienen propiedades comunes: atributos: saldo, titular, ... operaciones: reintegro, ingreso, … Definimos una clase CUENTA
  • 17. Ejemplo: Clase Cuenta Cuenta Definición de la clase titular: String; Atributos saldo: double; reintegro(valor:double); ingreso (valor:double); Métodos Tiempo de ejecución “José Martínez” titular 1200.0 saldo Objeto Cuenta
  • 18. Clase Cuenta en Java class Cuenta{ String titular; ATRIBUTOS double saldo; void ingreso (double cantidad){ saldo = saldo + cantidad; } void reintegro (double cantidad){ if (cantidad <= saldo) saldo = saldo – cantidad; } MÉTODOS }
  • 19. Ocultación de Información A las características de una clase (atributos y métodos) se les puede asignar un modificador de visibilidad: public: Característica pública, accesible desde todas las clases private: Característica privada, accesible sólo dentro de la clase donde se define Principio de diseño: Todos los atributos de una clase son privados Los métodos pueden tener distintos niveles de visibilidad
  • 20. Clase Cuenta en Java class Cuenta{ private String titular; private double saldo; public void ingreso (double cantidad){ saldo = saldo + cantidad; } public void reintegro (double cantidad){ if (puedoSacar(cantidad)) saldo = saldo – cantidad; } private boolean puedoSacar(double cantidad){ return cantidad <= saldo; } }
  • 21. Acceso y modificación de atributos La única forma de acceder a los atributos es a través de métodos públicos Métodos get para consultar el valor del atributo Métodos set para establecer el valor del atributo La implementación de los métodos set/get depende del nivel de acceso de los atributos. Se aísla al cliente de los cambios en la estructura de datos.
  • 22. Clase Cuenta en Java class Cuenta{ private String titular; private double saldo; public String getTitular(){ return titular; } //No setTitular porque es inmutable public double getSaldo(){ return saldo; } /* No setSaldo porque se modifica con ingresos y reintegros */ }
  • 23. Paquetes Unidad modular del lenguaje que permite agrupar clases que están relacionadas Además de public y private, se puede establecer que una característica de la clase tiene visibilidad a nivel de paquete A las clases también se les puede especificar un nivel de visibilidad: public: la clase es visible desde cualquier paquete A nivel de paquete: la clase sólo es visible en el paquete al que pertenece.
  • 24. Paquetes La pertenencia de una clase a un paquete se debe especificar antes de la declaración (package) Para utilizar una clase definida en un paquete distinto: Se utiliza el nombre cualificado de la clase Ejemplo: java.util.LinkedList unaLista; Se importa la clase o el paquete al comienzo de la declaración Se puede utilizar el nombre de la clase sin cualificar import java.util.LinkedList; o bien import java.util.*;
  • 25. Clase Cuenta en Java package banco; import java.util.LinkedList; public class Cuenta{ String titular; double saldo; LinkedList ultimasOperaciones; void ingreso (double cantidad){… } void reintegro (double cantidad){… } }
  • 26. Objetos Un objeto es una instancia de una clase, creada en tiempo de ejecución Es una estructura de datos formada por tantos campos como atributos tiene la clase. El estado de un objeto viene dado por el valor de los campos. Los métodos permiten consultar y modificar el estado del objeto.
  • 27. Objetos dominio vs. Objetos aplicación Ejemplo: Aplicación Correo electrónico Objetos externos: Procedentes del dominio de la aplicación: “carpeta”, “buzón”, “mensaje” Objetos software: Procedentes del ANALISIS: todos los externos Procedentes del DISEÑO/IMPLEMENTACION: “lista enlazada”, “ventana”,...
  • 28. cuentaAhorro Cuenta Persona empleado CuentaCorriente CuentaAhorro Empleado Cliente cuentaCorriente cliente Sistema Software (Clases) Objetos del mundo real O EÑ S DI EJECUCIÓN AN AL ISI S empleado cuentaAhorro “Cada objeto es instancia cuentaCorriente cliente directa Instancias de las clases (objetos software) de una clase”
  • 29. Tipos de los atributos Tipos de datos primitivos: Enteros: byte, short, int, long Reales: float, double Carácter: char Booleano: boolean Referencias: Sus valores son objetos de tipos no básicos, otras clases. Enumerados: son clases que representan un conjunto finito de valores
  • 30. Enumerados enum EstadoCuenta{ OPERATIVA, INMOVILIZADA, NUM_ROJOS; } public class Cuenta{ private String titular; private double saldo; private EstadoCuenta estado; … }
  • 31. Relación cliente Cuando en una clase A establecemos que el tipo de un atributo es otra clase B, decimos que A es cliente de B. Por ejemplo: Definimos la clase Persona Declaramos el tipo del atributo titular (en la clase Cuenta) como Persona. La clase Cuenta es cliente de la clase Persona
  • 32. Relación de cliente Cuenta Persona titular: Persona; nombre: String; saldo: double; dni: String; reintegro(valor:double); ingreso (valor:double); Referencia a otro objeto!! titular “José Martínez” saldo 1200.0 “34789567R” Objeto Cuenta Objeto Persona
  • 33. Semántica referencia Una referencia es un valor que en tiempo de ejecución está o vacío (null) o conectado. Si está conectado, una referencia identifica a un único objeto. Mientras exista, cada objeto posee una identidad única, independiente de su estado identificador de objeto (oid): Dos objetos con diferentes oids pueden tener los mismos valores en sus campos. Los valores de los campos de un objeto pueden cambiar, pero su oid es inmutable. Cuando se asigna un objeto a una variable no se asigna la estructura de datos del objeto sino el oid.
  • 34. Igualdad vs. identidad b d a “uno” “uno” “dos” 23 23 23 c Igualdad entre referencias Identidad a == c {true} a == b {false} Igualdad entre objetos Podemos utilizar el método equals
  • 35. Copia de objetos Si la asignación no implica copia de objetos ¿cómo se pueden copiar? copia = obj.clone(); Constructor de copia: Se pasa como parámetro un objeto de la misma clase Se inicializan los campos del nuevo objeto con los mismos valores de los campos del objeto que se pasa como parámetro.
  • 36. Semántica referencia Ventajas de las referencias: Compartición de objetos integridad referencial Permite definir estructuras recursivas (auto- referencias) Más eficiente manejo objetos complejos Los objetos se crean cuando se necesitan Soporte para el polimorfismo
  • 37. Semántica referencia miCuenta titular J. Gomez nombre codigo 123456 87654321 dni saldo 100000 Objeto Persona ultimasOperaciones -5000 10000 Objeto Array
  • 38. Semántica referencia Compartición Autorreferencias Objeto Cuenta Objeto Cuenta nombre M. Martinez titular titular categoria Fijo codigo 123456 876234 codigo salario 100000000 saldo 100000 50000 saldo jefe ultOper ultOper Objeto Empleado -5000 55000 10000 -5000 J. Gómez nombre 87654321 dni Objeto Persona
  • 39. Métodos y mensajes Un método está compuesto por: Cabecera: Identificador y Parámetros Cuerpo: Secuencia de instrucciones Mensaje: Mecanismo básico de la computación OO. Invocación de la aplicación de un método sobre un objeto. Un mensaje está formado por tres partes Objeto receptor Selector o identificador del método a aplicar Argumentos
  • 40. Ejemplo método vs. mensaje Método reintegro en la clase Cuenta: public double reintegro (double cantidad) { if (puedoSacar(cantidad)) saldo = saldo – cantidad; } Mensaje, aplica el método reintegro sobre un objeto cuenta: cuenta.reintegro(600.0);
  • 41. Definición de Métodos Todo método tiene un valor de retorno Si no devuelve nada se indica con void Para cada método se establece el nivel de visibilidad ¿Qué instrucciones podemos incluir en el cuerpo de un método? Asignación Estructuras condicionales Iteración Invocación a otro método = Mensajes Creación de objetos
  • 42. Sentencias de control de flujo switch(expresión) { case valor1: if( expresión-booleana ) sentencias; { break; sentencias; } case valor2: [else { sentencias; sentencias; break; }] [default: sentencias;] }
  • 43. Ejemplos int saldo; … if (saldo<0) estadoCuenta = Estado.NUMEROS_ROJOS; int dia; … switch (dia){ case 1: System.out.println(“Lunes”); break; case 2: System.out.println(“Martes”); break; … case 7: System.out.println(“Domingo”); break; }
  • 44. Ejemplo Método reintegro teniendo en cuenta el estado de la cuenta: public boolean reintegro (double cantidad){ switch (estadoCuenta) { case INMOVILIZADA: case NUMEROS_ROJOS: return false; case OPERATIVA: if (puedoSacar(cantidad)) saldo = saldo - cantidad; return true; default: return false; } }
  • 45. Bucles (1/2) [inicialización;] do { sentencias; [iteración;] }while (expresión-booleana ); [inicialización;] while( expresión-booleana ) { sentencias; [iteración;] }
  • 46. Ejemplos public class Cuenta{ … private double[] ultimasOperaciones; public double getSaldo(){ int index = 0; double saldo = 0; while (index < ultimasOperaciones.length){ saldo = saldo + ultimasOperaciones[index]; ++index; } return saldo; } }
  • 47. Bucles (2/2) for( inicialización; exp-booleana; iteración ) { sentencias; } Bucle ForEach for(Tipo valor : nombreColeccion){ //hacer algo con “valor” }
  • 48. Ejemplos public double getSaldo(){ double saldo = 0; for (int index=0; i<ultimasOperaciones.length; index++) saldo = saldo + ultimasOperaciones[index]; return saldo; } public double getSaldo(){ double saldo = 0; for (double operacion : ultimasOperaciones) saldo = saldo + operacion; return saldo; }
  • 49. Sobrecarga de métodos Java soporta sobrecarga de métodos el mismo nombre pero con DIFERENTE lista de tipos de argumentos. No pueden diferenciarse únicamente en el tipo de retorno. //Pago de una compra en una vez public boolean cobrar(Compra ticket){ return reintegro(ticket.getTotal()); } //Pago a plazos devuelve el número de plazos public int cobrar(Compra ticket, boolean aplazado){ … }
  • 50. Paso de parámetros Sea el método met (T1 p1,…, Tn pn) Donde p1 … pn son los parámetros formales y la invocación (mensaje) obj.met (a1,…,an) Donde a1 … an son los parámetros reales Debemos responder a las siguientes preguntas: ¿Cuál es la correspondencia entre parámetros reales y formales? ¿Qué operaciones se permiten sobre los parámetros formales? ¿Qué efecto tendrán las operaciones aplicadas sobre los parámetros formales sobre los parámetros reales correspondientes?
  • 51. Paso de parámetros El efecto del paso de parámetros es una asignación pi = ai En el caso de las referencias, el argumento formal referencia al mismo objeto referenciado por el argumento real En el caso de los tipos primitivos pi es una copia de ai Paso de parámetros siempre por valor Al parámetro real no le afectan los cambios en el parámetro formal Cuando trabajamos con referencias el efecto de una operación sobre el parámetro formal implica que se modifique el estado del parámetro real.
  • 52. Paso de parámetros No existe ninguna restricción sobre las operaciones aplicables sobre los parámetros formales Es posible modificar el parámetro formal El parámetro real no se cambia porque el parámetro formal era una copia de la referencia o del tipo primitivo.
  • 53. Paso de parámetros public void transferencia(Cuenta emisor, Cuenta receptor, double cantidad) { emisor.reintegro(cantidad); Cambia el estado receptor.ingreso(cantidad); de los dos objetos emisor = null; } No afectaría a la variable cuenta1 … banco.transferencia(cuenta1, cuenta2, 3000.0);
  • 54. Instancia actual Cada operación de una computación OO es relativa a cierto objeto, la instancia actual, en el momento de la ejecución de la operación ¿A qué objeto Cuenta se refiere el texto de la rutina reintegro? El cuerpo de una rutina se refiere a la instancia sobre la que se aplica La instancia actual es el receptor de la llamada actual, el objeto receptor del mensaje
  • 55. Ejemplo: c1.reintegro(300) c1 titular J. Gomez nombre codigo 123456 87654321 dni saldo-300 saldo 600 Objeto Persona ultimasOperaciones -5000 10000 Objeto Array public double reintegro (double cantidad) { if (puedoSacar(cantidad)) saldo = saldo – cantidad; }
  • 56. Instancia actual Si se aplica un método y no se especifica el objeto receptor, se asume que es la instancia actual. public double reintegro (double cantidad) { if (puedoSacar(cantidad)) saldo = saldo – cantidad; } El objeto receptor de puedoSacar será el objeto receptor del reintegro
  • 57. Referencia this El lenguaje Java proporciona la palabra clave this que referencia a la instancia actual. Utilidad: Distinguir los atributos de los parámetros y variables locales dentro de la implementación de un método. Aplicar un mensaje a otro objeto estableciendo como parámetro la referencia al objeto actual.
  • 58. Referencia this public void trasladar(Sucursal sucursal){ this.sucursal.eliminar(this); sucursal.añadir(this); } Se refiere al parámetro Se refiere a la instancia actual, la cuenta que se va a trasladar Se refiere al atributo de la clase
  • 59. Creación de Objetos La declaración de una variable cuyo tipo sea una clase no implica la creación del objeto. Se necesita un mecanismo explícito de creación de objetos: new ¿Por qué? Evitar cadena de creaciones antes de empezar a hacer nada útil Estructuras recursivas Los objetos se crean cuando se necesitan (referencias vacías, compartir objeto)
  • 60. Declaración vs. Creación Cuenta c; //declaración c Estado null c = new Cuenta(…) //creación explícita • Estado “conectado” c • c contiene la referencia al objeto • c almacena el oid asignado al objeto CUENTA objeto al crearse
  • 61. Constructores Método encargado de inicializar correctamente los objetos Métodos con el mismo nombre de la clase pero sin valor de retorno No se pueden invocar una vez que el objeto se ha creado Permite sobrecarga para especificar formas distintas de inicializar los objetos Toda clase tiene que tener al menos un constructor Si no se define ningún constructor, el compilador crea uno por defecto sin argumentos, vacío, que inicializa los atributos a los valores por defecto.
  • 62. Inicialización por defecto Tipo Valor Inicial boolean false char Carácter 0 (‘u000’) byte,short,int, 0 long float +0.0f double +0.0d Referencia a objeto null
  • 63. Constructores para la clase Cuenta public Cuenta(Persona quien){ //Utilizamos this para invocar al otro constructor // reutilización de código this(quien, 100); } public Cuenta(Persona quien, double saldoInicial){ titular = quien; saldo = saldoInicial; ultimasOperaciones = new double[20]; } El array hay que crearlo!!!
  • 64. Creación de objetos La construcción de un objeto consta de tres etapas: Se reserva espacio en memoria para la estructura de datos que define la clase. Inicializa los campos de la instancia con los valores por defecto Garantiza que cada atributo de una clase tenga un valor inicial antes de la llamada al constructor Se aplica sobre la instancia el constructor que se invoca
  • 65. Creación de objetos Cuenta cta = new Cuenta (persona, 300.0); cta Objeto titular null Persona saldo 300.0 0.0 codigo 01 ultimasOperaciones null …
  • 66. Atributos finales Java permite especificar que el valor de un atributo no podrá variar una vez construido el objeto Un atributo se declara de sólo consulta anteponiendo el modificador final a su declaración Los atributos finales sólo pueden ser inicializados en la declaración o en el constructor
  • 67. Atributo final public class Cuenta { //Los atributos se pueden inicializar //en el momento de la declaración private double saldo = 100; private final Persona titular; public Cuenta(Persona persona) { titular = persona; } Error en tiempo de compilación … public void setTitular(Persona persona){ titular = persona; } }
  • 68. Atributos de clase Representa una propiedad cuyo valor es compartido por todos los objetos de una misma clase Ejemplo: Añadimos a las cuentas un atributo para el código de cuenta. Es necesario una variable que almacene el último código de cuenta asignado. En un lenguaje imperativo se declararía una variable global. Java es un lenguaje OO puro que no permite declaraciones fuera del ámbito de una clase.
  • 69. Atributos de clase public class Cuenta { private static int ultimoCodigo = 0; private int codigo; private double saldo; private final Persona titular; private double [] ultimasOperaciones; public Cuenta(Persona nombre, double saldoInicial) { codigo = ++ultimoCodigo; titular = nombre; saldo = saldoInicial; ultimasOperaciones = new double[20]; } … A los atributos de clase se tiene acceso desde cualquier método de la clase
  • 70. Constantes En Java no hay una declaración específica para las constantes. Se consigue el mismo resultado definiendo un atributo de clase y final. Las constantes no pueden ser modificadas. No tiene sentido definir métodos de acceso y modificación. El nivel de acceso es controlado por su visibilidad.
  • 71. Constantes public class Cuenta { private static final int MAX_OPERACIONES = 20; private static final double SALDO_MINIMO = 100; private static int ultimoCodigo = 0; private int codigo; private double saldo; private final Persona titular; private double[] ultimasOperaciones; public Cuenta(Persona persona) { codigo = ++ultimoCodigo; titular = persona; saldo = SALDO_MINIMO; ultimasOperaciones = new double[MAX_OPERACIONES]; }… } Tema 2 Clases y Objetos 68
  • 72. Métodos de clase ¿Cómo definimos operaciones que manejan atributos de clase? Un método se define de clase anteponiendo el identificador static a su declaración En el cuerpo del método de clase sólo se puede acceder a los atributos de clase Para la aplicación de un método de clase no se hace uso de ningún objeto receptor, sino del nombre de la clase
  • 73. Métodos de clase public class Cuenta { private static int ultimoCodigo = 0; … public static int getNumeroCuentas() { return ultimoCodigo; } } Cuenta.getNumeroCuentas();
  • 74. Destrucción de objetos En Java los objetos no se destruyen explícitamente Recolección automática de memoria de los objetos no referenciados (Garbage Collector) Existe un método finalize() Este método se invocará justo antes de la recolección de basura Interesa para liberar recursos (ej. conexión bases de datos).
  • 75. Modelo de ejecución OO Para obtener un código ejecutable se deben ensamblar las clases para formar sistemas (cerrado). Un sistema viene dado por: Un conjunto de clases La clase raíz El procedimiento de creación de la clase raíz. La ejecución de un programa OO consiste en: Creación dinámica de objetos Envío de mensajes entre los objetos creados, siguiendo un patrón impredecible en tiempo de compilación
  • 76. Modelo de ejecución OO ¿Cómo empieza la ejecución de un programa OO? Creación de un “objeto raíz” Aplicar mensaje sobre “objeto raíz” En tiempo de ejecución, el flujo de ejecución siempre se encuentra: aplicando una operación sobre un objeto (instancia actual) o ejecutando una operación que no es un mensaje (asignación, creación). En un instante dado bien se aplica un mensaje sobre la instancia actual o sobre un objeto accesible desde él. Un mensaje siempre formará parte del cuerpo de una rutina de una clase
  • 77. Modelo de ejecución OO RAIZ obj2 obj7 obj1 obj4 ACTUAL obj5 obj9 obj3 obj8
  • 78. El método main Debemos proporcionar el nombre de la clase que conduzca la aplicación Cuando ejecutamos un programa, el sistema localizará esta clase y ejecutará el main que contenga El método main es un método de clase que recibe como parámetro un array de cadenas de texto que son los parámetros del programa
  • 79. El método main Definición del método main public class Eco{ public static void main(String[] args){ for(int i=0; i < args.length; i++) System.out.println(args[i]+” ”); } } Parámetros del programa: c: java Eco estamos aquí --> SALIDA: estamos aquí
  • 80. Principios de diseño de clases Favorecer la legibilidad del código: Asignar nombres significativos para los identificadores de atributos, variables y métodos Inicializar los atributos Favorecer la extensibilidad: Utilizar constantes simbólicas significativas Seguir los principios de diseño modular
  • 81. Principios de diseño de clases Ocultación de la Información Los atributos de una clase deben ser privados y ofrecer los métodos de consulta necesarios dependiendo de su nivel de acceso (set y/o get) Diferenciar entre métodos públicos (interfaz de la clase) y métodos privados (métodos auxiliares) Para acceder a una constante, ésta debe ser pública en lugar de ofrecer un método de consulta. Alta Cohesión Fragmentar clases que tengan demasiadas responsabilidades Bajo Acoplamiento Ley de Demeter: “Habla sólo con tus amigos” para un método m de una clase C sólo deberían invocarse los métodos: de la clase C, de los parámetros que recibe el método m, de cualquier objeto creado en el método m, de cualquier atributo (variable de instancia) de la clase C