miércoles, 25 de abril de 2018

Introducción al Paradigma de Objetos

Clase 1:

- Paradigmas y Paradigmas de programación.
- Concepto de modelo y modelo Orientado a Objetos.
- Concepto de clase y detección.
- Concepto de instancia u objeto.
- Atributos y métodos.

Paradigma: Es una forma de solucionar un problema.

Que es un objeto?
Es una representación de algo concreto. Para ser un objeto, el mismo tiene que estar definido.El nombre es la propiedad que define la identificación del objeto.
Los atributos definen el objeto y sus caracteristicas.

Entorno / Ambiente
Los objetos interactuan en un ambiente mediante mensajes.
Los objetos tienen metodos. Los metodos definen las acciones que los objetos pueden realizar.

Modelado de objetos:
Se definen el nombre, atributos y metodos del objeto. En programación, se suelen usar algunos términos como UX (User eXperience) y Prototipo para ayudar en el proceso de modelado de objetos.

Ejemplo:
Objeto: 
Mesa

Atributos:
- Cant_patas
- Ancho
- Largo
- Alto
- Color
- Material
- Forma

Metodos:
Los metodos envian y reciben mensajes. En programación, los mensajes van a través de los paréntesis.
Por ejemplo, una mesa plegable:

- Plegar()

Los atributos tienen valores:

Cant_patas=4
Ancho=1.20m
Largo=1.20m
Alto=0.78
Color=Verde
Material= ..
etc..

Creación del objeto:
Cuando el objeto ya se ha definido (nombre, atributos, metodos), se implementa. Las instancias definen la cantidad de implementaciones de un objeto. (Ejemplo: cuantas mesas se van a fabricar).

En este proceso se puede hacer Multiplicidad y Reutilización. Los objetos deben ser escalables. La escalabilidad permitirá la evolución y crecimiento del sistema.

En programación (Java), el Objeto, lo llamamos Clase

Mesa -> Cant_patas  //Clase Mesa.

mesita = nueva Mesa //Mesita es una instancia de la clase Mesa

mesita.Cant_patas=4


Las instancias heredan atributos. 
Si al objeto nuevo le faltan atributos, se pueden generar nuevos atributos. (Polimorfismo)


Ejercicio:
Modelar un objeto Ascensor.

Objeto: Ascensor

Atributos:
- Alto
- Ancho
- Largo
- Capacidad
- Piso

Métodos:
AbrirP()
CerrarP()
Parar()
Alarma()
Ir_Piso()
Llamar_ascensor()



1. Dado el siguiente texto, detectar las clases existentes atributos y métodos.

Sea una empresa dedicada al alquiler de CD-ROMs de audio. Dicha empresa tiene un local de atención al público donde están expuestas las carátulas de los CDs más demandados y las últimas novedades, aunque también existen listados en papel de todos los títulos que se podrían alquilar. Cuando un cliente solicita en alquiler un título, se comprueba si hay ejemplares disponibles y si el cliente no tiene problemas por ejemplares no devueltos, quedando constancia de la fecha de alquiler y la fecha máxima de entrega; de forma que cuando el cliente devuelva el ejemplar se podrá comprobar si se le tiene que imponer una sanción. Cada cliente puede solicitar una relación de los CDs que ha alquilado previamente.

Clase: Local

Atributos:
- CDs_demandados
- Novedades
- Titulos

Metodos:
- Listar_todos_titulos
- Comprobar_disponible



Clase: CD

Atributos:
- Titulo_Artista
- Estado

Metodos:
- Listar_todos_titulos
- Comprobar_disponible


Clase: Cliente

Atributos:
- Nombres
- Identificación
- Estado_Cliente 
- Titulos_alquilados
- Fecha_alquilados
- Fecha_entrega

Metodos:
- Ver_datos_cliente
- Ver_Estado_cliente
- Comprobar_devolución
- Comprobar_sanción
- Reporte_relación_alquilados
 
2. Dado el siguiente texto, detecta las clases existentes atributos y métodos:

Se tienen CLIENTES de los que se guarda un número de cliente, nombre, apellidos, lista de teléfonos, fax y correo electrónico. Los clientes realizan PEDIDOS. (Un pedido no puede ser realizado por dos clientes simultáneamente). Cada pedido tiene un número de pedido, una fecha asociada y una persona de contacto. Cada pedido aglutina varias LÍNEAS DE DETALLE, cada una con una cantidad y una referencia a un artículo. Los ARTÍCULOS tienen un descriptor, un identificador de familia y un identificador de modelo. Varias líneas de detalle correspondientes a uno o varios pedidos (bien en su totalidad, bien en parte) constituyen un ALBARÁN. Los albaranes contienen una fecha de entrega, una dirección de entrega y el nombre y apellido del receptor. Varias líneas de detalle correspondientes a uno o varios albaranes (bien en su totalidad, bien en parte) constituyen una FACTURA, la cual contiene un número de factura, una fecha de cobro y un modo de pago.
class Cliente{
// Atributos aquí 
Long número_de_cliente; 
String nombre;
String apellidos;
String telefono;
String fax;
String email;

// Métodos aquí
}

class Pedido{
// Atributos aquí
Long número_de_pedido;
Date Fecha_asociada;
String Persona_contacto;

// Métodos aquí
 }
 
class Lineas de Detalle{
// Atributos aquí 
Int Cantidad; 
String Referencia;


// Métodos aquí
 
class ARTÍCULOS{
// Atributos aquí
String descriptor;
String identificador_de_familia;
String iidentificador_de_modelo;


// Métodos aquí
}
class ALBARAN{
// Atributos aquí
Date fecha_entrega;
String direccion_entrega;
String nombre_apellido_receptor;

// Métodos aquí
class FACTURA{
// Atributos aquí
Int numero_factura;
Date fecha_cobro;
String modo_pago;

// Métodos aquí 
}

etc...
Clase 2:

Resumen:
- Visibilidad y encapsulamiento.
- Métodos constructores y sobrecarga de constructores.
- Métodos getters y setters.
 
Ejemplo:  

Clase IDENTIDAD

Atributos
    -Idioma


Métodos
    - Mostrar()
    - Imprimir()
    - Encriptar()

Instancia
Clase _ Nombre = new IDENTIDAD();
Clase_Apellido = new IDENTIDAD(); // donde IDENTIDAD es la CLASE

Como funciona la herencia?Cuando creo una clase, puedo definir si el atributo es heredable
La herencia puede O NO ser herencia múltiple. Es decir: Objetos que hereden más de una clase.

Al usar clases de tipo Abstract, no estoy obligado a heredar atributos ni métodos de otra clase.
Clase tipo “Interface”: Usado para crear otras clases en donde las siguientes clases van a tener los mismos métodos y atributos.

Lenguajes como PHP y JAVA, no tiene herencia múltiple.
Visibilidad y Encapsulamiento
Los métodos pueden hacerse visibles para los objetos. Esto se llama visibilidad.

Visibilidad PRIVADA
Visibilidad PUBLICA

Cuando los métodos se declaran, por defecto, son PUBLICOS.
Cuando un método o un atributo es PRIVADO, solo puede ser usado por la clase

Esto es ENCAPSULAMIENTO. Encapsular atributos o métodos dentro de una clase u objeto Privado.
Si yo quiero acceder a un metodo o atributo privado, probablemente el lenguaje arrojará un warning o un error. El encapsulamiento debe tener atributos privados y los métodos de acceso deben ser públicos.
Que son SETTERS y GETTERS?  
Son rutinas que permiten establecer reglas. Se llaman Métodos de acceso
Los métodos de acceso son el medio de acceder a los atributos privados del objeto. Son métodos públicos del objeto.
GETTER: 
El método para acceder a los atributos en forma de solo lectura se los denomina "getters". Son los métodos que retornan el valor de los atributos. El NetBeans, como la mayoría de los entornos de desarrollo, permite generarlos de forma automática.
 
SETTER:
El método para acceder a los atributos en forma de escritura se los denomina "setters". Son los métodos que establecen el valor de los atributos. También se los genera de forma automática en los entornos de desarrollo. 

Ejemplo:

se define una clase/objeto:

Objeto_Alumno
———————
Priv Edad;
Priv DNI;
Public set_Edad(edad)
    Edad=edad;

Public get Edad()
    mostrar(Edad)


En este caso, el atributo Edad no se puede escribir directamente, Por que es Privado.
Se puede usar mediante Public set_Edad(edad)

Si quisiera poner una edad a un alumno llamado Pedro:

Alumno Pedro;
pedro.Edad = 23; // no funciona.
pedro.set_Edad(23); //si funciona.


Si quisiera mostrar la edad, supongamos que tengo un método para mostrar:

mostrar(pedro.Edad) // No funciona
pedro.get Edad();
Otro ejemplo de encapsulamiento:
public class Persona{

    // Atributos
    private int altura;

    // Metodos
    public int getAltura(){
          return this.altura;
        }

        public void setAltura(int unaAltura){
          this.altura = unaAltura;
    }
  }
 
Que son los constructores?
Los constructores son métodos pertenecientes a la clase. Se utilizan para construir o instanciar una clase. Pueden haber varios constructores, de acuerdo a las necesidades del usuario.

  public class Persona{

    //Atributos
    private int altura;

    // Constructores
    public Persona{
    }

    public Persona(int unaAltura){
      this.altura = unaAltura;
    }

  }
 
Destructores:
El destructor se utiliza para destruir una instancia de una clase y liberar memoria. En Java no hay destructores, ya que la liberación de memoria es llevada a cabo por el Garbage Collector cuando las instancias de los objetos quedan desreferenciadas. El método dispose() de cada objeto se llama previo a ser "recolectado".

POLIMORFISMO:
Es una especie de “sobre escritura” de métodos.
- Pasa de Padre a Hijo. El hijo no puede cambiar los atributos del padre.
Básicamente, se cambian las características de los herederos. Esto hace que el objeto nuevo sea distinto al objeto original.

Como se sobre-escriben los métodos?

si tengo el método A()

A()
a+b=c
print c


Herencia:
A()
a+b=c
raiz_de c = d
print d/2

La clase hijo, hereda todos los atributos de a clase padre.

QUE ES SOBRE CARGA DE OPERACIONES:
Es la aparición de métodos dentro de una misma clase que se llaman igual, pero realizan acciones (levemente) diferentes
Normalmente varían en cantidad y/o tipo de parámetros
Ejemplo:


A(cuit)
devuelve cliente donde
Cliente.cuit=cuit

A(razon_social)
devuelve cliente donde
Cliente.razonsocial=razonsocial

El nombre del método es el mismo, pero el resultado del método depende del mensaje que se le envía.

Puedo tener un objeto en donde se pueden definir cosas (atributos, métodos) que se heredan,
Si se declara un objeto FINAL, no puede heredarse. Sus atributos y/o métodos no serían heredables.

Ejemplo en Java:

Si tengo un método:

public boolean validacionCUIT(cuit)
{

return estado
}

estado = validacionCUIT(“209999996”)

(devolvería un boleano, verdadero o falso)

Si quiero que los objetos / clases siguientes, NO hereden el objeto:

public boolean final validacionCUIT(cuit)
{

}


Si quiero que los objetos / clases siguientes, NO devuelva nada:

public void boolean final validacionCUIT(cuit)
{

}



Laboratorio 1:
Dada las siguientes clases, encapsularla, generar los métodos getters y setters, y sobrecargue por lo menos un método. 
    class electrodomestico{
                String nombre;
                int voltaje;
                float precio;
                String origen;
              
                encender(){
                }
                usar(){
                }
                apagar(){
                }
                aumentarprecio(){
                }
                bajarprecio(){
                }
        }

Encapsular y Generar métodos getters y setters y sobrecargar un método

class electrodomestico{
                Private String nombre;
                Private int voltaje;
                Private float precio;
                Private String origen;
              
       
//set es una acción. Se envía un mensaje y enciende.
        Public void setnombre(String nombre){
        this.nombre = nombre;  //this hace referencia a la clase actual. a “esta” clase.
                return;
        }
       
        Public void getNombre(){
        String nombre = this.nombre;  //this hace referencia a la clase actual. a “esta” clase.
                return nombre;
        }
       
        //igual para todos los atributos. Ejemplo:

        Public void setvoltaje(int voltaje){

        this.voltaje = voltaje;  //this hace referencia a la clase actual. a “esta” clase.
                return;
        }
        Public int getVoltaje(){
        int voltaje = this.voltaje;  //this hace referencia a la clase actual. a “esta” clase.
                return voltaje;
        }
        Public void setprecio(float precio){
        this.precio = precio;  //this hace referencia a la clase actual. a “esta” clase.
                return;
        }
        Public float getprecio(){
        float precio = this.precio;  //this hace referencia a la clase actual. a “esta” clase.
                return precio;
        }
        etc… 

        Crear una instancia nueva de la clase electrodomestico
       
        electrodomestico batidora = new electrodoméstico();
        batidora.setNombre(“Batidora”)
        System.out.println(Batidora.getNombre());
       
        //definir un método para aumentar el precio:
                Public void aumentarPrecio(float aumento){
        float precioOriginal=this.getprecio();
        float precioAumentado=precioOriginal+(precioOriginal*aumento);

        this.setPrecio = precioAumentado;

        return;
        }
       
// si quisiera usar el método para aumentar precio desde afuera de la clase:
        batidora.aumentarPrecio(0.05);
        //sobrecarga:
        Public set_aumentarprecio(float porcentaje){
                electrodomestico.set_aumentarprecio(precio=precio*porcentaje);
        }   
    }

 
Clase 3:

Resumen:
- Mecanismo de herencia.
- Polimorfismo sin redefinición y Polimorfismo con redefinición.
- Atributos de instancia o de clase (static).
- Introducción a UML.
Hay un software de modelado recomendado (UML) disponible en https://www.yworks.com/products/yed

No hay comentarios:

Publicar un comentario