Asesoría y capacitación en informática

Características de OO

Encapsulamiento: Permite la protección de ciertas partes de un objeto del acceso desde otros objetos externos

Herencia: Jerarquía de clases basada en la agrupación de atributos o métodos comunes

Polimorfismo: Tratamiento generalizado a todas las clases pertenecientes a una jerarquía de herencia.

Encapsulamiento

  • El encapsulamiento consiste en la agrupación de datos y su tratamiento en una misma estructura.
  • Permite la protección de la manipulación externa de algunas partes de los objetos.
  • Un objeto suele tener datos y métodos privados, de acceso restringido.
  • Fuerza al usuario a usar una interfaz para acceder a los datos.
  • Hace que el código sea más fácil de mantener

     Modificaciones para restringir un acceso

  • La definición de los miembros de una clase se puede ampliar añadiendo modificadores al principio.:

               [modificador]<tipo> <identificador>;

               [modificador]<tipo> <nombre>(<args>)‏

               {…}

  • Los modificadores permiten acceder a los datos o métodos de manera restringida

public

El miembro de la clase es accesible desde cualquier parte del código

private

El miembro de la clase sólo es accesible desde código perteneciente a la propia clase

protected(o friendly)

Sólo las subclases de la clase y nadie más pueden acceder a las variables y métodos

Herencia

  • Jerarquía de clases basada en agrupar atributos y/o métodos comunes
  • Las clases descendientes se llaman subclases.
  • Las clases ascendientes se llaman superclases.
  • Las subclases heredan características y métodos de las superclases (excepto los constructores)‏
  • Supongamos que tenemos la clase Jefe y la clase Secretaria definidas como:

        -Jefe {<int><numEmpleado>, <String><nombre>, <int><numDepart>, <int><numSupervisados>}

        -Secretaria {<int><numEmpleado>, <String><nombre>, <int><numDepart>, <Jefe><trabajaPara>}

  • Las partes comunes se pueden agrupar en una misma clase, manteniendo las otras dos con las partes no comunes y heredando de esta nueva clase con la palabra reservada extends.

Ejemplo

        public class Articulo {   // clase padre

          public float precio=0;

            …

          public void setPrecio(float elPrecio) {

            precio = elPrecio;

          }

            …

          public float getPrecio() {

            return precio;

          }

        }

        //los métodos y atributos de Articulo son heredados a Pelicula

        public class Pelicula extends Articulo {// clase hijo

              public void setDescripcion(String descrip) {

                descripcion = descrip;

              }

               … 

              public string getDescripcion() {

                return descripcion;

              }  }

     Relación de Contenido

  • Una clase puede tener referencias a objetos de otras clases.
  • Se diferencia de la herencia en que es necesario instanciarlos por separado.
  • Responde afirmativamente a la pregunta:  <contenedor> tiene un <contenido>?

     Métodos Virtuales

  • Una subclase puede modificar los métodos que ha heredado de las superclase, manteniendo los mismos nombres, tipos de retorno y listas de argumentos.

        class Empleado {

          int calcularVacaciones() {…}

        }

        class Jefe extends Empleado {

          int numSupervisados,

          int calcularVacaciones() {…}

        }

Polimorfismo

  • Un método con el mismo nombre, tipo de retorno y lista de parámetros puede ser aplicado a objetos de diferentes clases.
  • Uso, trabajar con la clase más general:

        -Parámetros polimórficos

        -Colecciones heterogéneas

             Empleado e1 = new Empleado();

             Empleado e2 = new Jefe();

             Empleado e1 = new Secretaria();

             e2.numSupervisados = 15; // ERROR((Jefe)e2).numSupervisados = 15;