PROGRAMACIÓN ORIENTADA A OBJETOS
PILARES-CARACTERISTICAS
1. ABSTRACCION: Extracción de características más relevantes de objetos del
   mundo real, es decir mira el mundo real y lo convierte a un mundo software.
       TOMAMOS DE LA REALIDAD:
   •    Identidad: Esta dado en sustantivos es decir nombres, en UML es
       denominado clase.
   •   Características: Tiene un estado que esta dado por los valores de sus
       características, en UML son denominados atributos.
   •   Comportamiento: Son dados por verbos es decir las acciones que realiza,
       en UML son denominados métodos.
                                     EJEMPLOS
       1. CLASE PERSONA
        Clase              Persona
                           idPersona
                           nombre
                           apellido
                           edad
        Atributos          genero
                           Dormir
                           Correr
                           Comer
                           Saltar
    Métodos
   CLASE ANIMAL
     Clase                   Animal
                  idAnimal
                  nombre
                  raza
                  edad
     Atributos    sexo
                  Dormir
                  Comer
                  Ladrar
Metodos
   CLASE CARRO
     Clase                   Carro
                  marca
                  modelo
                  numeroLlantas
                  cilindraje
                  arrancar
                  frenar
     Atributos
Metodos
   CLASE PROFESOR
     Clase                       Profesor
                    nombre
                    apellido
                    edad
                    genero
     Atributos      asignatura
                    enseñar
                    calificar
   CLASE COMPUTADOR
     Clase                      Computador
                    marca
                    procesador
                    memoria
                    monitor
     Atributos      teclado
                    mouse
                    procesar
                    almacenar
                    ejecutar
   Métodos
Existen cuatro tipos de modificadores de acceso que son:
   •   Publico: se identifican con un +
   •   Privado: se identifican con un –, vale destacar que todos loa atributos
       de una clase deben ser privados.
   •   Protegido: se identifican con #
   •   Default: no tiene identificación.
2. ENCAPSULAMIENTO: Los atributos de un objeto no deben ser visibles.
   Para esto utilizamos los métodos:
       •   Get: Analizadores y retornan métodos, permiten recuperar el valor
           de un atributo.
       •   Set: Modificadores y reciben métodos, y nos permiten cambiar el
           valor de un atributo.
3. HERENCIA: Relación entre clases en donde una se identifica como
   superclase y la otra como subclase.
   Superclase=papa
                            Persona
                                                       Subclase=hija
                        Nombre
                        Edad
                        genero
                                                       Existen dos clases
                                                       de herencia:
•   Simple: Cuando hereda de una clase
             Empleado                       Aprendiz
         Nombre                          Nombre
         Edad                            Edad
         cargo                           curso
•   Múltiple: Cuando hereda de varias clases.
                 Acuático
                                                Reptil
                                 Cocodrilo
    4. POLIMORFISMO: Cuando dos clases heredan de su padre el mismo
       método pero cada una de ellas la implementa de forma diferente.
       Existen dos tipos de polimorfismo:
          •   SOBREESCRITURA: Cuando la clase hija sobrescribe el método
              de la clase padre.
          •   SOBRECARGA: la sobrecarga generalmente se da dentro de la
              misma clase cuando un método de esta es firmado o declarado
                varias veces con diferentes tipos de datos y números de
                argumentos o parámetros. Ej.:
                                  APRENDIZ
                      Nombre
                      Apellido
                      Edad
                      Genero
                      Aprendiz(String nombre)
                      Aprendiz(String nombre, int edad)
                      Aprendiz(String genero)
La clase aprendiz declara dos veces el método aprendiz, la primera declaración
recibe un argumento de tipo String llamado nombre, la segunda declaración recibe
dos argumentos una llamado nombre y otro edad; al agregar la siguiente
declaración del método aprendiz String genero estaríamos duplicando la
declaración de la primera.
“la sobrecarga se da sobre la misma clase”
                                   SINTAXIS
                                     Persona
                    -idPersona
                    -Nombre
                    -Edad
                    -Genero
                    +Persona(double idPersona, String
                    nombre, int edad)
                    +Persona()
                    +Persona(double idPersona, String
                    nombre, int edad, String genero)
1. Declaramos la clase:
     Public class Persona{
         Private double idPersona;
         Private String nombre;
         Private int edad;
         Private String genero;
2. Declaramos los métodos: hay cuatro tipos de métodos:
  2.1.   Constructor: se denomina igual que la clase y no tiene retorno, sirven
         para inicializar los atributos; es lo primero que se ejecuta cuando se
         instancia una clase, estos pueden ser sobrecargados.
  2.2.   Analizadores: Get
  2.3.   Modificadores: Set
  2.4.   Propios de la Clase
METODO CONSTRUCTOR:
      Public Persona (double idPersona, String nombre, int edad){
             setIdPersona(idPersona);
             setNombre(nombre);
             setEdad(edad);
                 }
      Public Persona (){}
      Public Persona (double idPersona, String nombre, int edad, String
      genero){
                 setIdPersona(idPersona);
                 setNombre(nombre);
                 setEdad(edad);
                 setGenero(genero);
             }
METODO SET: Existen dos reglas de negocio en este caso que son: edad<55 y
genero “F” o “M”.
      Public void setGenero(String valor){
                if(valor.equals("F") || valor.equals("M"))
                {
                this.genero=valor;
                }
               else
               {
               System.out.println("el genero debe ser F o M");
               }
           }
    Public void setEdad(int valor){
              if(valor<55)
              {
              this.edad=valor;
              }
              else
              {
              System.out.println("la edad debe ser menor a 55");
           }
           }
    public void setIdPersona(double valor){
               this.idPersona=valor;
               }
    public void setNombre(String valor){
               this.nombre=valor;
               }
METODO GET:
    public double getIdPersona(){
              return this.idPersona;
              }
    public String getNombre(){
               return this.nombre;
               }
    public int getEdad(){
                return this.edad;
                }
     public String getGenero(){
                return this.genero;
                }
3. iniciamos con la codificacion de TestPersona el cual incluye al metodo
   principal:
                Public static void main(String[]args)
                Public = siempre es publico
                Static = general para todos los objetos de esa clase.
                Void = no retorna.
                Main = principal
     public class TestPersona{
     public static void main(String[]arreglo){
                Persona p=new Persona();
                Persona p1=new Persona(22,"Marcos",54);
                Persona p2=new Persona(21,"Lucia",55,"F");
                System.out.println(p1.getIdPersona()+" "+p1.getNombre()+"
        "+p1.getEdad());
                System.out.println(p2.getIdPersona()+" "+p2.getNombre()+"
        "+p2.getEdad()+" "+p2.getGenero());
                }
     }