Intro Programación Orientada a Objetos
-
Upload
psep -
Category
Technology
-
view
300 -
download
6
Transcript of Intro Programación Orientada a Objetos
Santiago, Chile 2013
Introducción a la Programación Orientada a Objetos
Pablo Sepúlveda P.Fundación GNUCHILE
2
Introducción a la POO
Contenidos:
Introducción al paradigma.
Clase y Objeto.
Conceptos.
Buenas prácticas.
Introducción a la POO
4
Introducción al Paradigma
¿Qué es un paradigma de programación?
Un paradigma de programación es una forma o técnica tecnológica definida, empleada para resolver un problema.
Tipos de paradigmas: imperativo/estructurado (C, PHP, Pascal), Orientado a Eventos (Visual Basic), funcional (Haskell), Orientado a Objetos (Java, C++, Python, Ruby, PHP), Orientado a Aspectos (Java), por nombrar a algunos.
Introducción a la POO
5
Introducción al Paradigma
El primer lenguaje fue el Simula, en el año 1967, esto en Noruega.
Ole-Johan Dahl y Kristen Nygaard son considerados los padres del paradigma.
En los años 80 se vuelve popular debido a su rendimiento y procesamiento de datos. Esto sumado a la influencia de C++.
Introducción a la POO
7
Clase y Objeto
La gran base del paradigma orientado a objetos radica en dos conceptos primordiales:
Clase: es “el plano” para construir algo. No es “tangible”. Son las definiciones y propiedades (atributos y métodos/funciones) de un tipo de objeto.
Objeto: Es la instancia de una clase, una entidad que posee definiciones y propiedades que fueron definidas en la clase de la cual fue instanciado.
Introducción a la POO
8
Clase y Objeto
Se entiende por instancia la creación de un nuevo objeto a partir de una clase.
En un ejemplo práctico, podemos ver el plano de una casa como una Clase y la casa como un objeto. Del plano no podemos hacer mucho, pero a partir de éste podemos crear (instanciar) muchos objetos de tipo casa.
Introducción a la POO
11
Un poco de Java...
Creado por James Gosling de Sun Microsystems. Su aparición fue en el año 1995.
Es un lenguaje compilado, por lo que su ejecución es más óptima que lenguajes interpretados como PHP, Perl, Lisp, Ruby, etc.
Su sintaxis deriva de C y C++.
Inicialmente fue diseñado para POO, pero actualmente soporta paradigmas funcionales y POA.
Introducción a la POO
12
Algunos tipos de datos en Java
Objetos:
Integer: Tipo de dato entero. Por defecto su inicialización es null.
String: Representa a la cadena de caracteres, ahora como objeto. Su inicialización por defecto también es null.
Boolean: Objeto que soporta true y false.
Double: Ajusta un valor primitivo double en el objeto.
Date: Tipo de dato, como objeto, Date. Sirve para almacenar tiempo. Parte de la biblioteca java.util.
Introducción a la POO
13
Hola mundo en Java...
La ejecución en Java depende del método Main (que será explicado más adelante)
Utilizando un String sería:
Introducción a la POO
14
Ejemplo de Clase en Java
Según lo visto, podríamos construir una simple clase de la siguiente forma:
Parte de las buenas prácticas de programación dice que las clases deben comenzar SIEMPRE con mayúscula y deben ser singular. Los atributos, métodos, funciones y objetos con minúscula.
Es importante cuidar la semántica.
Introducción a la POO
16
Ejemplo de Instancia en Java
La instancia de la clase mostrada, para crear un nuevo objeto, sería la siguiente:
Ejemplo de la creación de un nuevo objeto de tipo (clase) persona en Java.
Persona = Es la clase.
persona = Es el objeto. Puede ser nombrado de cualquier forma, pero por normativa debe tener coherencia.
new Persona() = El valor al objeto, una nueva instancia de la clase Persona.
Introducción a la POO
17
Ejemplo de Instancia en Java
Introducción a la POO
Se acceden a los atributos y/o métodos/funciones mediante un “.”
18
Tipos de Clases
public: Es la más utilizada. Da acceso público dentro del package a la clase para que pueda ser heredada o instanciada desde otras clases. Si no se especifica el tipo, ésta es por defecto.
abstract: Esta clase no puede ser instanciada, sólo puede ser usada por herencia. Por lo general se usa de base para otras clases.
Introducción a la POO
19
Tipos de Clases
final: Tampoco puede ser instanciada. Por lo general contiene atributos, métodos y/o funciones constantes (estáticas) que necesitan ser utilizadas en nuestro package, así no es necesario tener un objeto de ese tipo en memoria.
Introducción a la POO
21
Funciones y Métodos
Las clases también pueden contener funciones y/o métodos.
Métodos: ejecutan y/o implementan instrucciones definidas en su contenido, accediendo y modificando (si así se especifica) los atributos (variables) de la clase de forma implícita. Se caracteriza por el “void”.
Introducción a la POO
22
Funciones y Métodos
Funciones: funcionan igual que los métodos, pero con la diferencia que retornan algún dato/objeto.
En la función se indica (al menos en Java), qué tipo de objeto u atributo debe retornar.
Es importante aclarar que para las buenas prácticas, las funciones y métodos deben comenzar con minúsculas, además de usar verbos para nombrarles.
Introducción a la POO
23
Métodos y Funciones Especiales
Método Main: Método estático estándar y por defecto que indica el punto de partida de nuestro programa, en este caso quien ejecuta es la JVM.
Posee un control de acceso (público). Todo lo que se quiera ejecutar deberá estar en este método.
Introducción a la POO
24
Métodos y Funciones Especiales
Constructor: Es un método especial que se inicia de manera automática al momento de inicializar/instanciar/crear un objeto.
Está contenido en la clase y puede tener distintos tipos de acceso según sea el patrón de diseño que implementemos.
Cuando no está visible, la clase por defecto tiene un constructor público, vacío e invisible.
Se identifica porque es un método con el nombre exacto de la clase.
Introducción a la POO
26
Funciones y Métodos
Ejemplo de funciones, métodos, Constructor y método Main:
Introducción a la POO
27
Controles de Acceso
Una de las tantas características que incorpora la POO es el nivel de acceso que se pueden tener a los atributos, métodos y funciones de una clase, a excepción del método Main que es estándar. Todo esto se denomina controles de acceso y son: public, private, protected y friendly (por defecto).
Introducción a la POO
28
Controles de Acceso
public: permite el acceso desde cualquier clase. Se representa con (+) en el diagrama de clases.
private: permite el acceso sólo desde la clase a la que pertenece. Se representa con (-) en el diagrama de clases.
protected: permite el acceso sólo desde las subclases y las que la heredan. Se representa con (#) en el diagrama de clases.
friendly: es el permiso por defecto si no se especifica. Se puede acceder desde cualquier clase en el package.
Introducción a la POO
30
Bases de la POO
Los tres pilares fundamentales de la programación orientada a objetos son:
Encapsulamiento.
Herencia.
Polimorfismo.
Introducción a la POO
31
Getters y Setters
Una de tantas malas prácticas recurrentes es el tema de los permisos en los atributos de las clases.
En general, por un tema de seguridad, los atributos de las clases deben ser privadas.
Para acceder a los atributos aparecen los “getters” y “setters”.
Esto en general es conocido como ENCAPSULAMIENTO, que no es más que el ocultamiento del estado de los datos, y que sólo se puedan acceder a ellos a través de métodos y funciones determinadas.
Introducción a la POO
32
Getters y Setters: Encapsulamiento
Getter: se identifica con el nombre de “get”. Permite acceder al valor del atributo.
Por buena práctica, la conformación del nombre de la función es getNombreVariable.
Getter para acceder al atributo rut de la clase.
Introducción a la POO
33
Getters y Setters: Encapsulamiento
Setter: se identifica con el nombre de “set”. Permite cambiar el valor del atributo de la manera determinada en el método.
Setter que permite dar valor a la variable rut de la clase.
Introducción a la POO
34
Interacción de Clases
A veces necesitamos atributos de una clase distinta.
Por ejemplo: la clase A representa una tabla de nuestra base de datos. Esta tabla a su vez tiene FK de otra tabla que a su vez está representada por la clase B... ¿para qué replicar código si podemos usar otra clase de igual forma que “un atributo”?
Introducción a la POO
36
Interacción de Clases
Otra forma de interacción es la denominada herencia.
La herencia es la que permite crear clases a partir de otras ya existentes siempre cuidando su naturaleza. Facilita compartir atributos, métodos y funciones (dependiendo de los permisos de acceso) a través del extends, lo que permite la reutilización de código.
Introducción a la POO
38
Interacción de Clases: Herencia
Dos definiciones clases en Herencias:
Superclase: es la clase base, padre, etc. Por lo general es abstracta.
Subclase: es la clase hija o derivada. Esta clase extienda a la superclase para tener acceso a sus atributos, funciones y métodos.
Introducción a la POO
39
Interacción de Clases:Herencia
Visibilidad:
Componentes públicos de la superclase son visibles y públicos en la subclase.
Componentes privados son visibles sólo en la superclase.
Componentes protegidos (protected) son visibles en la subclase.
Introducción a la POO
40
Polimorfismo
El polimorfismo aplica a las distintas respuestas que podemos tener de un mismo método y/o función dependiendo de la naturaleza del objeto.
Va de la mano con la herencia y el concepto de superclases y subclases.
Introducción a la POO
41
Polimorfismo
Superclase Persona (abstracta):
Clase abstracta persona tiene sus componentes como protected.
Introducción a la POO
42
Polimorfismo
La subclase Cliente extiende de la superclase Persona (hijo-padre).
Aprovechando la naturaleza de la clase, la subclase utiliza un método ya existente en la superclase y lo usa de manera diferente.
Introducción a la POO
43
Polimorfismo
La subclase Main también extiende de la superclase Persona y utiliza la herencia en el método main, también utiliza una instancia de la clase Cliente.
Introducción a la POO
44
Polimorfismo
El resultado sería el siguiente:
Se utilizó herencia y polimorfismo para sacar ventaja de la naturaleza de las clases y cambiar el método (que fue reutilizado, notación @Override) según el caso (naturaleza).
Introducción a la POO
46
Buenas Prácticas
Nombre de métodos, objetos, funciones y atributos comienzan con minúscula, las Clases con mayúscula.
No utilizar caracteres extraños ($, ñ, (´) tildes, etc.
Atributos de la clase deben ser privados para evitar acceso de forma directa. Utilizar encapsulamiento.
Nombre de los atributos deben ser descriptivos.
Nombre de métodos y funciones deben expresar un verbo para diferenciar de atributos.
Utilizar this para los atributos internos de la clase y super para los atributos por herencia.
Utilizar siempre indentación.
Introducción a la POO
47
Fuentes:
Documentación oficial Java SE 6
http://docs.oracle.com/javase/6/docs/
Wikipedia
http://es.wikipedia.org/
Introducción a la POO
48
Contacto:
http://www.psep.cl/
http://www.gnuchile.cl/
http://creativecommons.org/licenses/by-sa/3.0/
¡Gracias por su atención!