[ES] Programación orientada a objeto con java

34
Let's Rock Java Fundamentos de Java Enterprise Edition con JDeveloper Eudris Cabrera Rodriguez Ingeniero Telemático Senior Software Developer Skype:eudriscabrera LinkedIn:http://www.linkedin.com/in/eudriscabrera Noviembre 2011, Santiago de los Caballeros, R. D.

description

Conceptos fundamentales de la programación orientada a objeto con Java

Transcript of [ES] Programación orientada a objeto con java

Page 1: [ES] Programación orientada a objeto con java

Let's Rock Java

Fundamentos de Java Enterprise Edition con JDeveloper

Eudris Cabrera Rodriguez

Ingeniero TelemáticoSenior Software DeveloperSkype:eudriscabreraLinkedIn:http://www.linkedin.com/in/eudriscabrera Noviembre 2011, Santiago de los Caballeros, R. D.

Page 2: [ES] Programación orientada a objeto con java

Objetivos

Enseñar conceptos fundamentales de la programación orientada a objeto con Java

Page 3: [ES] Programación orientada a objeto con java

Agenda

● Paradigma de Orientación a Objetos: Conceptos Avanzados○ Clases, Objetos, Palabras Reservadas,Atributos○ Herencia Simple de Java ○ Jerarquías de Clases.○ Sobreescritura de métodos.○ Métodos con Parametros y Sobrecarga de Métodos.○ Clases Abstractas, Interfaces y Polimorfismo.

Page 4: [ES] Programación orientada a objeto con java

Programación orientada a objetosLa Programación Orientada a Objetos (POO u OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones para diseñar aplicaciones y programas de computadora. Está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de 1990. Actualmente son muchos los lenguajes de programación que soportan la orientación a objetos.

Page 5: [ES] Programación orientada a objeto con java

Programación orientada a objetosConceptos fundamentales La programación orientada a objetos es una nueva forma de programar que trata de encontrar una solución a estos problemas. Introduce nuevos conceptos, que superan y amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:

Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas.

Page 6: [ES] Programación orientada a objeto con java

Programación orientada a objetosObjeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos). Se corresponde con los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase. Método: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema.

Page 7: [ES] Programación orientada a objeto con java

Programación orientada a objetosEvento: un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento, a la reacción que puede desencadenar un objeto, es decir la acción que genera. Mensaje: una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó.

Page 8: [ES] Programación orientada a objeto con java

Programación orientada a objetosPropiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método. Estado interno: es una variable que se declara privada, que puede ser únicamente accedida y alterada por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). No es visible al programador que maneja una instancia de la clase.

Page 9: [ES] Programación orientada a objeto con java

Programación orientada a objetosComponentes de un objeto:atributos, identidad, relaciones y métodos. Representación de un objeto: un objeto se representa por medio de una tabla o entidad que esté compuesta por sus atributos y funciones correspondientes.

En comparación con un lenguaje imperativo, una "variable", no es más que un contenedor interno del atributo del objeto o de un estado interno, así como la "función" es un procedimiento interno del método del objeto.

Page 10: [ES] Programación orientada a objeto con java

Definición de una clase

Para definir una clase en Java, consideramos la siguiente sintaxis:Código:<control de acceso> class <nombre clase> {<atributos><constructores><métodos>}

Page 11: [ES] Programación orientada a objeto con java

Definición de una clase

donde:tipo de dato puede ser cualquiera, incluyendo otra clase. control de acceso puede ser: private, public o protected Nota: Veamos que los controles de acceso, son tal y como están escritos(en idioma ingles), que traducidos dicen:private = privado (declaramos una propiedad o evento privado)public = publico (declaramos una propiedad, o evento publico, que puede ser llamado desde otra clase)protected = protegido (una propiedad de solo lectura, que no se puede modificar)Class, Public, Private,Protected... son palabras reservadas del lenguaje Java, y otros...}

Page 12: [ES] Programación orientada a objeto con java

Métodos:Un método es un procedimiento propio de un objeto, un método cumple una función y retorna (o no) un resultado, por ejemplo: int sumaDos(int param, int, param2){return (param+param2);} Es como una función, un concepto muy propio de los lenguajes de procedimientos , pero un método es propio de un objeto

Page 13: [ES] Programación orientada a objeto con java

Constructores:En Java, la creación de un objeto debe realizarse a través de constructores, éstos son un tipo especial de método que se deben definir como parte de la clase. ● Un constructor posee las siguientes características:● Es un método que lleva el mismo nombre de la clase.● Se invoca una sola vez, cuando se crea un nuevo objeto● Puede usarse para inicializar los atributos (también llamadas

variables de instancia) de un objeto. Sin embargo, puede no contener instrucción alguna, en este caso, su propósito es permitir la obtención de memoria para las variables de instancia.

● ● Puede incluir parámetros● Una clase puede incluir varios constructores con distintas

definiciones de parámetros formales.

Page 14: [ES] Programación orientada a objeto con java

Constructores:Para definir un constructor se debe considerar la siguiente sintaxis:Código:public class MiClase{

public MiClase(){//constructor}

}Un constructor siempre debe ser definido como público, de manera que sea posible, para cualquier objeto, crear objetos de cualquiera otra clase (definida como pública). Esto llevado al plano de las definiciones de clases, cualquier método que lo requiera podrá crear un objeto de la clase que sea,según las necesidades que se tengan en virtud del problema a resolver.

Page 15: [ES] Programación orientada a objeto con java
Page 16: [ES] Programación orientada a objeto con java

Encapsulamiento y ocultación de la informaciónEncapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente. Principio de ocultación: Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de laclase.

Page 17: [ES] Programación orientada a objeto con java

Encapsulamiento y ocultación de la informaciónEsto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas, eliminando efectos secundarios e interacciones inesperadas. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción. La aplicación entera se reduce a un agregado o rompecabezas de objetos.

Page 18: [ES] Programación orientada a objeto con java

Encapsulamiento y ocultación de la informaciónEn otras palabras un objeto puede cumplir con ciertas funciones sin que se conozca su estructura interna, un programador puede crear objeto que resuelva determinado problema y alguien mas puede usarlo solo ocupándose de su implementación, un objeto bien estructurado puede ser portado a otra parte del diseño del software o a otro proyecto sin preocuparse de adaptarlo para ese determinado proyecto (reutilización), me gustaba la analogía de un reproductor de CD's, un usuario puede escuchar un disco solo conociendo la forma de uso del aparato sin tener que prestar la mínima atención a su funcionamiento interno. Sin embargo los objetos pueden comunicarse entre si mismos o con el usuario por interfaces definidas por el programador.

Page 19: [ES] Programación orientada a objeto con java

HerenciaUna clase puede ser "hija" de otra clase y a la vez esa clase puede ser "padre" de otra, al derivar una clase de otra esta toma sus atributos y comportamientos (dependiendo del nivel de acceso). Al desarrollar podemos crear algunas clases un poco generales y derivarla en algunas otras un poco mas especializadas. Por ejemplo un "Perro" tiene propiedades como orejas , ojos etc.. Y derivan en razas como "Rottweiler", "Chihuahua" , todos derivan de la clase perro y heredan sus atributos y comportamientos (se mueven, ladran), pero tienen sus respectivas distinciones (uno mide mas y se podria comer al otro..) . En la mayoría de los lenguajes se usa la palabra reservada extends para indicar que una clase hereda deotra.

Page 20: [ES] Programación orientada a objeto con java

Herencia Simple de JavaUn objeto puede extender las características de otro objeto y de ningún otro, es decir, que solo puede heredar o tomar atributos de un solo padre o de una sola clase. Lenguajes como Java, Ada y C# sólo permiten herencia simple mientras que otros como C++, Python permiten herencia múltiple. La cual consiste en que un objeto puede extender las características de uno o más objetos, es decir, puede tener varios padres. Algunos diseñadores de lenguajes han preferido no admitir la herencia múltiple por las posibles coincidencias en nombres de métodos o datos miembros.

Page 21: [ES] Programación orientada a objeto con java

Control de AccesoCuando se crea una nueva clase en Java, se puede especificar el nivel de acceso que se quiere para las variables de instancia y los métodos definidos en la clase: publicCualquier clase desde cualquier lugar puede acceder a las variables y métodos de instacia públicos. protectedSólo las subclases de la clase y nadie más puede acceder a las variables y métodos de instancia protegidos. private Las variables y métodos de instancia privados sólo pueden ser accedidos desde dentro de la clase. No son accesibles desde las subclases.

Page 22: [ES] Programación orientada a objeto con java

Control de Accesofriendly (sin declaración específica)void MetodoDeMiPaquete(){} Por defecto, si no se especifica el control de acceso, las variables y métodos de instancia se declaran friendly (amigas), lo que significa que son accesibles por todos los objetos dentro del mismo paquete, pero no por los externos al paquete. Es lo mismo que protected. Los métodos protegidos (protected) pueden ser vistos por las clases derivadas, como en C++, y también, en Java, por los paquetes (packages). Todas las clases de un paquete pueden ver los métodos protegidos de ese paquete. Para evitarlo, se deben declarar como private protected , lo que hace que ya funcione como en C++ en donde sólo se puede acceder a las variables y métodos protegidos de las clases derivadas.

Page 23: [ES] Programación orientada a objeto con java

VARIABLES Y METODOS ESTATICOSEn un momento determinado se puede querer crear una clase en la que el valor de una variable de instancia sea el mismo (y de hecho sea la misma variable) para todos los objetos instanciados a partir de esa clase.Es decir, que exista una única copia de la variable de instancia. Se usará para ello la palabra clave static. class Documento extends Pagina {static int version = 10;} El valor de la variable version será el mismo para cualquier objeto instanciado de la clase Documento . Siempre que un objeto instanciado de Documento cambie la variable version , ésta cambiará para todos los objetos.

Page 24: [ES] Programación orientada a objeto con java

THIS Y SUPERAl acceder a variables de instancia de una clase, la palabra clave this hace referencia a los miembros de la propia clase. Si se necesita llamar al método padre dentro de una clase que ha reemplazado ese método, se puede hacer referencia al método padre con la palabra clave super

Page 25: [ES] Programación orientada a objeto con java

Jerarquías de ClasesTodas las clases en Java derivan de alguna clase anterior. La clase raíz del árbol de la jerarquía de clases de Java es la clase Object, definida en el paquete java.lang. Cada vez que se desciende en el árbol de jerarquía, las clases van siendo más especializadas. Cuando se desee que nadie pueda derivar de una clase, se indica que es final; y lo mismo con los métodos, si no se desea que se puedan sobreescribir, se les antepone la palabra clave final.

Page 26: [ES] Programación orientada a objeto con java

Sobreescritura de métodosUna subclase hereda todos los métodos de su superclase que son accesibles a dicha subclase a menos que la subclase sobreescriba los métodos. Una subclase sobreescribe un método de su superclase cuando define un método con las mismas características ( nombre, número y tipo de argumentos) que el método de la superclase. Las subclases emplean la sobreescritura de métodos la mayoría de las veces para agregar o modificar la funcionalidad del método heredado de la clase padre.

Page 27: [ES] Programación orientada a objeto con java

Sobrecarga de MetodosLa sobrecarga de métodos es la creación de varios métodos con el mismo nombre pero con diferentes firmas y definiciones. Java utiliza el número y tipo de argumentos para seleccionar cuál definición de método ejecutar. Java diferencia los métodos sobrecargados con base en el número y tipo de argumentos que tiene el método y no por el tipo que devuelve. Tambien existe la sobrecarga de constructores: Cuando en una clase existen constructores múltiples, se dice que hay sobrecarga de constructores.

Page 28: [ES] Programación orientada a objeto con java

Clases AbstractasUna clase abstracta es una clase de la cual no se pueden instanciar objetos, de estas clases solo se puden heredar otras, en desarrollo se utilizan simplemente para derivar a otras clases mas especializadas. En los lenguajes que implementan este tipo de clases se utiliza la palabra reservada abstract para indicarlas. Una clase abstracta debe tener uno o mas métodos abstractos, y estos métodos deben ser implementados en las clases derivadas.

Page 29: [ES] Programación orientada a objeto con java

Interfaces Una interfaz es una clase únicamente para implementación en otras, en una interfaz se indican los prototipos de los métodos que debería tener un objeto pero el cuerpo del mismo debe ser escrito en las clases que la implementan, en los lenguajes que lo implementan se utiliza la palabra reservada interface para indicar una interfaz e implements para su implementación.

Page 30: [ES] Programación orientada a objeto con java

Clases finalLas clases final son clases que no se pueden heredar, es la ultima parte de la estructura de clases, en loslenguajes que las implementan se utiliza la palabra reservada final. En los lenguajes como java pueden existir métodos finales, un método que se declara final no puede ser sobrescrito en clases derivadas.

Page 31: [ES] Programación orientada a objeto con java

PolimorfismoEl polimorfismo se refiere a la posibilidad de definir múltiples clases con funcionalidad diferente, pero con métodos o propiedades denominados de forma idéntica, que pueden utilizarse de manera intercambiable mediante código cliente en tiempo de ejecución. Ya vimos una forma de polimorfismo al sobrecargar un método. otra forma de polimorfismo se logra a través del uso de subtipos.

Page 32: [ES] Programación orientada a objeto con java

Metodo NativosJava proporciona un mecanismo para la llamada a funciones C y C++ desde nuestro código fuente Java.Para definir métodos como funciones C o C++ se utiliza la palabra clave native.

public class Fecha {int ahora;public Fecha() {ahora = time();}private native int time();static {System.loadLibrary( "time" );}}

Page 33: [ES] Programación orientada a objeto con java

Metodo NativosUna vez escrito el código Java, se necesitan ejecutar los pasos siguientes para poder integrar el código C o C++:● Utilizar javah para crear un fichero de cabecera (.h)● Utilizar javah para crear un fichero de stubs , es decir, que contiene la

declaración de las funciones● Escribir el código del método nativo en C o C++, es decir, rellenar el código

de la función,● completando el trabajo de javah al crear el fichero de stubs● Compilar el fichero de stubs y el fichero .c en una librería de carga dinámica

( DLL en Windows '95 o libXX.so en Unix)● Ejecutar la aplicación con el appletviewer

Más adelante trataremos en profundidad los métodos nativos, porque añaden una gran potencia a Java,al permitirle integrar a través de librería dinámica cualquier algoritmo desarrollado en C o C++, lo cual,entre otras cosas, se utiliza como método de protección contra la descompilación completa del código Java.

Page 34: [ES] Programación orientada a objeto con java

PREGUNTAS ?

WE ROCK JAVA !!!