• Fundamentos de Internet

  • ¿Que es Internet?
  • Vocablos de Internet
  • Internet en la actualidad
  • Fundamentos de Programacion

  • Fundamentos de programacion
  • Formas DFD Graficos
  • Programacion en Java Netbeans
  • Repaso Programacion

  • Repaso Programacion
  • Formas DFD Graficos
  • Programacion en Java Netbeans
  • Programacion Uno

  • Programacion Uno
  • Consultas
  • Estructura de Datos

  • Repaso Programacion Uno
  • Graficacion 2D
  • Repaso Consultas
  • Arreglos
  • Colecciones y Ordenamientos
  • Programacion Orientado a Objetos

  • ¿Fundamentos de Progamacion?
  • Objetos Clases e Herencia
  • Constructores en Java
  • (P.O.O)– Objetos, Clases y Herencia Simple

    La programación orientada a objetos (POO) ofrece elementos que facilitan el desarrollo de software en aspectos tales como modularización, reutilización de piezas de código (no copy/paste) y encapsulamiento (ocultar el estado de los objetos) Objetos:

    Se puede decir que un objeto es todo aquello que pueda ser identificable dentro de una especificación de requerimientos o problema y tenga las siguiente características:

    • Tenga estados definibles (abierto, cerrado).

    • Posea comportamientos asociados (puede correr, saltar, volar, etc). Éstos son denominados métodos.

    • Son capaces de interactuar/comunicarse con otros objetos por medio de sus métodos

    Una característica propia de este paradigma, es la transparencia entre la implementación a nivel de código y la funcionalidad que provee un método (no me interesa cómo lo haga, sólo que lo haga).

    Clases:

    Las clases son plantillas que agrupan comportamiento (métodos) y estados (atributos) de los futuros objetos. Los objetos son instancias de una clase. Usando el símil “variable – tipo” de la programación estructurada, se entiendo que un objeto es una variable que tiene el comportamiento y estados del tipo (objeto) Veamos la creación de la clase Persona

    public class Persona {

    public String nombre;

    public int edad;

    public void correr(){

    }

    }

    y dentro del cuerpo del programa instanciamos una nueva Persona denominada Esteban:

    public class Main {

    public static void main(String[] args) {

    Persona esteban = new Persona();

    }

    }

    Herencia

    hasta el momento no se ha visto nada más interesante que una forma más cómoda de escribir Estructura de datos, pero ¿qué pasa si por ejemplo, necesitamos extender el comportamiento de un objeto que posee las mismas características de comportamiento y estado que la Clase Persona y además tiene otras características propias?. Como ya se dijo la reutilización de código es fundamental en este paradigma y en casos como estos se expresa como Herencia, cuya estructura jerárquica nos permite extender clases heredando todo (comportamientos y estados) desde una clase padre o Super Clase. las clases que hereden de una Super Clase se denominan Clases Hijas o Sub Clases. Ejemplo: Imaginemos que una Persona ha sido expuesta a una extraña radiación y ahora tiene super poderes, por lo que no deja de ser persona, pero ahora tiene nuevos comportamientos y estados, por lo que diremos que la nueva clase SuperHeroe hereda de la clase Persona: Veamos el siguiente código en Java

    public class SuperHeroe extends Persona{

    //Atributos:

    public String nombreDeFiccion;

    //Metodos:

    public void correrMuyRapido(){

    //TODO: implementar

    }

    public void volar(){

    //TODO: implementar

    }

    }

    Nota: La palabra clave extends nos indica que SuperHeroe está heredando o extendiendoa la super clase Persona. Ahora veamos como se comporta esta nueva clase dentro del cuerpo del programa principal:

    public class Main {

    public static void main(String[] args) {

    // Instanciar al nuevo SuperHeroe:

    SuperHeroe superPersona = new SuperHeroe();

    //Estas son propiedades de Persona:

    superPersona.nombre = "Carlos Kent";

    superPersona.edad = 37;

    //Esta es propiedad de SuperHeroe:

    superPersona.nombreDeFiccion = "Super Carlos";

    //Estos son metodos de SuperHeroe:

    superPersona.volar();

    superPersona.correrMuyRapido();

    }

    Con esto termino esta primera entrega, en la siguiente escribiré acerca de clases abstractas, interfaces y herencia múltiple.

    Ejemplo

    Instanciación

    Concepto de clase/Instancia. Como hemos comentado una clase es el tipo que tendrán nuestros objetos, también llamados instancias de esa clase, es decir, la clase es la forma que tendrán los objetos empleados por nuestra aplicación. Un ejemplo puede ser el plano de una casa, el plano sería nuestra clase, pero con ese mismo plano podremos contruir diversas casas que serían los objetos. El plano en sí no es nada es sólamente la especificación de lo que será una casa una vez construida. Alcance de los miembros: de instancia o de clase.

    • Cuando creamos una instancia de la clase en ejecución tendremos las variables de instancia, una por cada atributo, y todas integradas dentro de la misma instancia. Todas las instancias de la misma clase tendrán los mismos atributos (nombre y tipo), pero cada una de ellas irá tomando distintos valores para ellos. Es decir, tendremos una copia de los atributos por cada objeto de una clase que creemos. Por ejemplo, tuCoche sería una instancia de la clase Coche y daremos a la variable de instancia velocidadMaxima el valor 180. Mientras que la instancia cocheDeNigell tiene su propia variable velocidadMaxima con el valor 300.

    Hay otro tipo de atributos, las llamadas variables de clase, que son los atributos que sólo existen una vez para cada clase. Es decir este tipo de atributos será compartido por todos los objetos que creemos de una clase, de modo que si cambio el valor del atributo en un objeto se verá reflejado en todos los demás. Por ejemplo, el atributo numDeCoches de nuestra clase Coche, de tipo entero, pensado para contar los coches que vamos teniendo en nuestro sistema, sólo debería existir una vez: no tiene sentido que esta variable sea distinta en tuCoche y en cocheDeNigell. Es la misma (única) variable para toda la clase Coche. El comportamiento, la funcionalidad de la clase, es la concreción de qué puede hacer cada una de las instancias de la clase, cómo cambian su estado, o cómo se relaciona con otras.

    Por ejemplo, en la clase Coche podríamos determinar la siguiente funcionalidad:

    • Arrancar

    • Parar (el motor)

    • Acelerar

    • Decelerar

    • Girar

    • Frenar

    • Cambiar la marcha…

    Para definir el comportamiento de los objetos definiremos métodos, que no serán más que funciones o procedimientos definidas dentro de la clase que se ejecutan y operan sobre instancias de esa clase. Notar que estos métodos se encapsulan dentro de la clase, es decir, encapsulamos conjuntamente datos y funcionalidad relativa a un mismo objeto, cada objeto debe proveer el mecanismo de almacenamiento y gestión de sus datos, y la funcionalidad relativa a dicho objeto como una entidad cerrada. Igual que los atributos, también hay métodos de instancia (se aplican sobre una instancia: son los más comunes, sobre un objeto concreto) y métodos de clase (se aplican sobre la propia clase). Lo veremos. Mensajes y métodos.

    A menudo se habla de mensaje en terminología de orientación a objetos. Aunque pueda parecer un concepto extraño, concretando es realmente fácil de entender: cuando alguien llama al método X de un objeto se dice que le está pasando el mensaje X. Y algo hay que entender y es muy importante. No sólo el programador llama a los métodos (pasa mensajes) de los objetos. También el sistema puede ejecutar algunos métodos. Por ejemplo, cuando el usuario mueve el ratón el sistema llamará a algún método determinado con ciertos parámetros (por ejemplo, coordenadas) para indicar que el ratón ha sido movido.

    Público, default, privado o protegido

    Métodos estáticos o de clase

    Se cargan en memoria en tiempo de compilación y no a medida que se ejecutan las líneas de código del programa. Van precedidos del modificador static. Para invocar a un método estático no se necesita crear un objeto de la clase en la que se define:

    • Si se invoca desde la clase en la que se encuentra definido, basta con escribir su nombre.

    • Si se le invoca desde una clase distinta, debe anteponerse a su nombre, el de la clase en la que se encuentra seguido del operador punto (.) .metodoEstatico

    Suelen emplearse para realizar operaciones comunes a todos los objetos de la clase. No afectan a los estados de los mismos (a los valores de sus variables de instancia). Por ejemplo, si se necesita un método para contabilizar el número de objetos creados de una clase, tiene sentido que sea estático ya que su función (aumentar el valor de una variable entera) se realizaría independientemente del objeto empleado para invocarle. No conviene usar muchos métodos estáticos, pues si bien se aumenta la rapidez de ejecución, se pierde flexibilidad, no se hace un uso efectivo de la memoria y no se trabaja según los principios de la Programación Orientada a Objetos.

    Ejemplo

    Copiright - Hernán Mejía - Armando Montero