Intro Programación Orientada a Objetos

48
Santiago, Chile 2013 Introducción a la Programación Orientada a Objetos Pablo Sepúlveda P. Fundación GNUCHILE [email protected]

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

[email protected]

2

Introducción a la POO

Contenidos:

Introducción al paradigma.

Clase y Objeto.

Conceptos.

Buenas prácticas.

Introducción a la POO

3

Introducción al Paradigma

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

6

Clase y Objeto

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

9

Clase y Objeto

Componentes de la Clase:

Introducción a la POO

10

Conceptos

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

15

Ejemplo de Clase en Java

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

20

Tipos de Clases

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

25

Métodos y Funciones Especiales

Ejemplo de Constructor:

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

29

Bases de la POO

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

35

Interacción de Clases

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

37

Interacción de Clases: Herencia

Superclase “Herencia” y Subclase “Main”

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

45

Buenas Prácticas

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:

[email protected]

[email protected]

http://www.psep.cl/

http://www.gnuchile.cl/

http://creativecommons.org/licenses/by-sa/3.0/

¡Gracias por su atención!