Download Programación Orientada a

Document related concepts
no text concepts found
Transcript
CONCEPTOS GENERALES
PROGRAMACIÓN ORIENTADA A OBJETOS
XAVIER CALDERÓN H.
CONCEPTOS
Paradigma: Palabra de origen griego que
significa modelo o patrón.
 Paradigma de Programación: Propuesta de una
comunidad de programadores para solucionar
los problemas.
 Da una visión o metodología que aplicarán los
programadores para resolver diferentes
problemas.

CONCEPTOS
Los lenguajes de programación se basan en
estos paradigmas.
 Tipos de paradigmas:

 Paradigma
declarativo.
 Paradigma estructurado.
 Paradigma funcional.
 Paradigma orientado objetos.
 Paradigma lógico.
PARADIGMA ORIENTADO A OBJETOS
Los datos son la parte esencial de un programa.
 Los datos se los agrupa en objetos.
 Los objetos pueden modelar cualquier elemento
del mundo real.
 A través de este modelamiento se pueden
plantear soluciones a los problemas.
 La interacción de estos diferentes elementos del
mundo real se los puede representar con sus
comportamientos.

PARADIGMA ORIENTADO A OBJETOS
Los comportamientos también se los agrupa
en los objetos.
 Lenguajes basados en este paradigma:

 Java.
 SmallTalk.
 C#.
 Simula.

Ver: http://www.tiobe.com
FUNDAMENTOS TEÓRICOS

Algunos de los conceptos fundamentales de
los lenguajes orientados a objetos son:
 Clase.
 Objeto.
 Método.
 Atributos.
 Constructores.
 Sobrecarga.
FUNDAMENTOS TEÓRICOS
Encapsulación.
 Herencia.
 Sobreescritura.
 Polimorfismo.
 Clases Abstractas.
 Interfaces.

CLASE
Son patrones que representan grupos de
objetos.
 Describen un conjunto de objetos que tienen
similares características.
 Características como: atributos, métodos y
mensajes.


“Una clase es un conjunto de objetos que comparte
una estructura y comportamientos comunes” Booch
G.,1994.
CLASE
La figura que se usa para representar una
clase es un rectángulo con 3 secciones.
 Las secciones son:

 Nombre
de la clase.
 Miembros de la clase. (con sus Atributos y
Métodos)
Nombre Clase
Atributos
Métodos
OBJETO
Instancia de una clase.
 Representa una entidad del mundo real.



“Una entidad delimitada precisamente y con
identidad, que encapsula estado y comportamiento.
El estado se representa mediante sus operaciones,
métodos y máquinas de estado. Un objeto es una
instancia de una clase” OMG, 2001.
Ver: http://www.omg.org
OBJETO

Relación entre clase y objeto.
CONCEPTOS
Estado: representa la definición de atributos
internos del objeto, sus características. Por
ejemplo, un PC tiene un cierto número de puertos,
un cierto número de procesadores, un monitor, un
disco duro, etc.
 Comportamiento: representa la definición del
comportamiento del objeto, las acciones que éste
puede realizar. Por ejemplo, un router puede
“encender”, “reiniciar”, “enrutar”, etc.
 Identidad: Cada objeto tiene una identidad única.

ATRIBUTO-MÉTODO
Los miembros de un objeto son: atributos y
métodos.
 Atributos:
conjunto de características o
propiedades de los objetos.

 Pueden
ser variables numéricas, booleanas o
referencias a otros objetos.

Métodos: Representan el comportamiento de
los objetos.
 Son
funciones que operan sobre los atributos de
los objetos.
POR: XAVIER CALDERÓN H.
EJEMPLO

Estructura para el código de una clase.
Con Java por ejemplo:
public class <NombreClase>
{
// Declaración de atributos
<tipo> <variable> ;
// Declaración de métodos
<tipo> <nombreMétodo> ( <argumentos de entrada> )
{ ... }
}
EJEMPLO

Definición Atributo.
<tipo_Dato> <nombre_Atributo> ;
Donde:
 <tipo_Dato>: tipo de dato del atributo.
 (numéricos, booleanos o referencia)
 <nombre_Atributo>: identificador del atributo
EJEMPLO
Definición Método.
<tipoRetorno> <nombreMétodo> ( <listaArgumentos> )
{
<bloqueCódigo>
}








<tipoRetorno>: tipo de dato que retorna el método
(numéricos, booleanos o referencia)
Si no devuelve ningún valor, debe ser void
<nombreMétodo>: identificador del método
<listaArgumentos>: el método admite que le pasen
argumentos separados por comas con el formato:
[<tipo> <argumento> [, <tipo> <argumento>...]]
CREACIÓN OBJETO
Se utiliza la palabra reservada new. Por
ejemplo:
1. <NombreClase> <refObjeto>;
2. <refObjeto> = new <NombreClase>() ;
O también:

1.
<NombreClase> <refObjeto>=new <NombreClase>() ;
Nota: Recordar que la sintaxis y semántica depende de
cada lenguaje.
ACCESO A LOS MIEMBROS

Se usa el operador punto (.) para acceder a los
atributos y a los métodos. Por ejemplo:
NOMENCLATURA

Se recomienda usar una nomenclatura para los
identificadores de clases, atributos y métodos.
 Por

ejemplo en JAVA; se usa:
Clases: primera letra en mayúscula de cada
palabra.
 Ejemplo:

Redes, AnchoDeBanda, String, etc.
Variables: primera letra en minúscula y la
primera letra de cada palabra en mayúscula.
 Ejemplo:
trafico, redesLan, interfazEntrada; etc.
NOMENCLATURA

Constantes: todo en mayúsculas, separando
cada palabra por el carácter “_”
 Ejemplo:

Métodos: siguen el mismo formato que las
variables seguidas de paréntesis “(“ “)”
 Ejemplo:

PI, ANCHO_BANDA, etc.
modulacion(), calculoTrafico()
Estructuras de control: utilizar llaves
englobando a todas las sentencias de una
estructura de control, aunque sólo haya una
sentencia.
INTERCAMBIO DE MENSAJES
Permiten la comunicación entre los objetos.
 Mensaje: “una llamada a una operación o a un
objeto, en el cual se incluye el nombre de la
operación y una lista de valores de
argumentos” Rumbaugh, J., 1999.
 Dependiendo del autor se pueden clasificar a
los mensajes de varias formas.
 Tipos de mensajes:

INTERCAMBIO DE MENSAJES
Modificador
 Constructor.
 Destructor.
 Selector.
 Iterator.

CONSTRUCTOR
Construyen objetos a partir de una clase.
 Métodos que tienen el mismo nombre de la
clase.
 Inicializa el estado de un objeto.
 El constructor inicializa las variables.
 Por ejemplo:

 Socket
obj;
 obj=new Socket();
 obj=new Socket(8080,”192.168.1.1”);
CONSTRUCTOR

Si no se ha definido un constructor; los
lenguajes de programación en general definen
uno por defecto.
CONSTRUCTOR

Los constructores asignan la referencia del
espacio de memoria en el que se carga el
objeto.
DESTRUCTOR
Operación que destruye el objeto.
 En algunos lenguajes no se definen los
destructores (JAVA).
 En Java el Garbage Collector libera la memoria.
 En C++ los destructores son esenciales para
liberar la memoria ocupada por el objeto.
 Ejemplo C++:




Coche::~Coche() {
cout << "Coche destruido." << endl;
}
SOBRECARGA
Se usa cuando se requieren métodos que
realicen la misma tarea pero con diferentes
argumentos de entrada.
 Los métodos sobrecargados tienen el mismo
nombre de identificador para todos los
métodos. Por ejemplo en Java:

SOBRECARGA
Permite tener varios métodos con el mismo
nombre pero se los diferencia por sus
argumentos de entrada.
 Un método se identifica por su nombre, el tipo
de retorno, el número de argumentos que tiene
y el tipo de cada uno de los argumentos.
 En C++ se pueden sobrecargar los operadores.
 Los constructores se pueden sobrecargar.

EJEMPLO JAVA
ENCAPSULACIÓN
Se refiere al ocultamiento de la información.
 Característica de encapsular a los datos y
métodos.
 Capacidad de expresar la unidad de los
atributos y las operaciones.


Nota: En este texto vamos a usar los términos
métodos y operaciones; como similares.
ENCAPSULACIÓN
La encapsulación consiste en el agrupamiento
de datos y su tratamiento en una misma
estructura.
 Permite la protección de la manipulación
externa de algunas partes de los objetos.
 La encapsulación se la implementa con ciertas
particularidades dependiendo del lenguaje.

ENCAPSULACIÓN
Un objeto suele tener datos y código privados
de acceso restringido.
 Fuerza al usuario a utilizar una interfaz para
acceder a los datos.
 Hace que el código sea más fácil de mantener.

ENCAPSULACIÓN

Ejemplo en C++:
class Coche {
public:
Coche();
Coche(char *m,int cil,int cab);
~Coche();
void arranca();
void detiene();
void acelera();
private:
char *marca;
int cilindrada;
int caballos;
};
ENCAPSULACIÓN

Los modificadores permiten acceder a los
datos o al código de manera restringida:
ENCAPSULACIÓN
HERENCIA
Jerarquía de clases basada en agrupar
atributos y/o métodos comunes.
 No todos los lenguajes orientados a objetos
definen clases.
 En términos de objetos la herencia permite que
una objetos se puedan basar en otros ya
existentes.

HERENCIA

Se definen las clases padres también llamadas
superclases y las clases hijas también
denominadas subclases.
HERENCIA

La idea es la de partir de las situaciones más
generales e ir derivando hacia las más
particulares.
HERENCIA
Si una clase hereda de una única clase se
considera herencia simple.
 Si una clase hereda de varias clases se
considera herencia múltiple.
 Dependiendo del lenguaje se puede aplicar la
herencia simple y/o múltiple.

HERENCIA

Herencia simple.

Herencia múltiple.
HERENCIA

Por ejemplo Java solo soporta herencia simple
en cambio C++ herencia múltiple.
POR: XAVIER CALDERÓN
H.
HERENCIA

Supongamos, por ejemplo (usando Java), que
tenemos la clase Aula y la clase Laboratorio
definidas como sigue:
HERENCIA

Entonces se podría reestructurar las clases
anteriores aplicando herencia de la siguiente
forma:
HERENCIA

Las partes comunes se pueden agrupar en una
misma clase, manteniendo las otras dos clases
con las partes no comunes y heredando de
esta nueva clase con la palabra reservada
extends (con Java).
POR: XAVIER CALDERÓN
H.
SOBREESCRITURA
También llamados métodos virtuales.
 Una subclase puede modificar los métodos que
ha heredado de la superclase, manteniendo los
mismos nombres, tipo de retorno y lista de
argumentos.
 El objetivo del método sobreescrito en la
subclase es modificar la funcionalidad del
método definido en la superclase.

SOBREESCRITURA

Ejemplo en Java:
class Router
{
...
double calcularCosto()
{.................}
}
class RouterCisco extends Router
{
int numInterfaces;
double calcularCosto()
{.................}
}
POLIMORFISMO
Polimorfismo indica “muchas formas”.
 Según Rumbaugh J., 1991; “Toma de varias
formas; propiedad que permite a una
operación tener distintos comportamientos en
distintas clases”
 El polimorfismo es un concepto fundamental
del paradigma orientado a objetos.

POLIMORFISMO
Una clase sólo tiene una forma.
 La variable que hace referencia a la superclase
de una jerarquía puede tener muchas formas
(una por cada subclase).
 En forma general polimorfismo se puede
implementar mediante:

 Polimorfismo
universal.
 Polimorfismo ad hoc.
POLIMORFISMO

Dentro del polimorfismo universal tenemos:
 Polimorfismo
paramétrico.
 Polimorfismo de inclusión.

Dentro del polimorfismo ad hoc tenemos:
 Polimorfismo
por sobrecarga de métodos.
 Polimorfismo de operadores.
 Dependiendo
del
lenguaje
de
programación se implementará un tipo de
polimorfismo.
POLIMORFISMO

Por ejemplo en Java se usa el polimorfismo
con:
 Parámetros
polimórficos: se refiere a los
argumentos de entrada de los métodos; a los que
se les pasa el parámetro polimórfico.
 Colecciones heterogéneas: se basa en el uso de la
sobreescritura de métodos.

Para implementar este tipo de polimorfismo es
esencial tener una jerarquía de clases.
POLIMORFISMO

Ejemplo de parámetros polimórficos (Java).
class Redes {...}
class Lan extends Redes {...}
class Wan extends Redes {...}
class Gestion
{
void calcularTrafico ( Redes m )
{...}}
................
………….
Gestion administrar = new Gestion();
Lan obj1 = new Lan();
Wan obj2 = new Wan();
administrar.calcularTrafico(obj1);
administrar.calcularTrafico(obj2);
...
POLIMORFISMO

Ejemplo de colecciones heterogéneas(Java):
class Redes {...}
class Lan extends Redes {...}
class Wan extends Redes {...}
Redes[] listaRedes = new Redes[5];
listaRedes[0] = new Redes();
listaRedes[1] = new Lan();
listaRedes[2] = new Wan();
listaRedes[3] = new Wan();
listaRedes[4] = new Lan();
CLASES ABSTRACTAS
Clase que no se puede instanciar.
 Clase de la que no se pueden crear objetos.
 El objetivo es que las subclases de las clases
abstractas (superclase) definan o completen
las
especificaciones
de
las
mismas;
implementando los elementos abstractos de
estas superclases.

CLASES ABSTRACTAS

Ejemplo en Java:
abstract class Computador {...}
class Servidor extends Computador {...}
class Router extends Computador {...}
class Switch extends Computador {...}
...
Computador m = new Computador (); ERROR
Router m = new Router (); CORRECTO
CLASES ABSTRACTAS

Métodos abstractos: Un método es abstracto si
se declara (dentro de una clase abstracta),
pero no se lo implementa. Ejemplo con Java.
abstract class Servidor
{
.......................
public abstract void servicio();
}

Cada lenguaje OO tiene distintas abstracciones
como: clases, métodos y variables virtuales.
CLASES ABSTRACTAS
Las subclases de una clase abstracta deben
implementar los métodos abstractos que
tengan declarados.
 Ejemplo con Java:

class ServicioWeb extends Servidor
{
...................................
public void servicio()
{......................}
}
class ServicioFtp extends Servidor
{
...
public void servicio() {……………………...}
}
CLASES ABSTRACTAS
Según Martin R., 1994; existe una categoría de
clases que se considera más estable; si este
grupo de clases se basa en clases abstractas.
 Una categoría completamente estable debería
consistir solo en clases abstractas.
 Una medida del grado de abstracción es:

Grado = A = Nº de clases abstractas / Nº total de clases

Rango de A entre 0 a 1.
INTERFACES
Una interface es un conjunto de declaraciones
de métodos.
 En una interfaz no se implementan los
métodos.
 Ejemplo con Java:

public interface <NombreInterfaz>
{
<tipo> <nombreMétodo1> ( <args> );
<tipo> <nombreMétodo2> ( <args> );
//No existe implementación de los métodos
}
INTERFACES

Las interfaces se usan para:
INTERFACES

Por ejemplo en Java para implementar una
interfaz se usa la palabra implements.
public class <NombreClase> implements <NombreInterfaz>
{
............................................
<tipo> <nombreMétodo1> ( <args> ) { <código> }
<tipo> <nombreMétodo2> ( <args> ) { <código> }
.............................................
}
INTERFACES-CLASES ABSTRACTAS

Se puede realizar una equivalencia entre una
interfaz y una clase abstracta.
interface Interfaz
{
<tipo> <método1>();
<tipo> <método2>();
......................
<tipo> <métodoN>();
}
abstract class Interfaz
{
abstract <tipo> <método1>();
abstract <tipo> <método2>();
........................
abstract <tipo> <métodoN>();
}
THREADS
Un thread es un flujo de ejecución secuencial
dentro de un proceso.
 Un thread es un hilo de ejecución de un
programa.
 Un thread tiene asociado: tiempo de CPU,
memoria para código y memoria para datos.
 Un thread se puede comunicar, coordinar y
sincronizar con otros hilos.

THREADS
Un thread de un programa trata de simular a
los threads que funcionan en los sistemas
operativos.
 Un thread tiene estados que permiten controlar
su ciclo de vida.
 Los lenguajes de programación tienen métodos
para controlar el ciclo de vida de un thread.

THREADS

Por ejemplo en Java los estados de un thread
son:
THREADS

Estados:
 Nuevo:
el thread ha sido creado, pero no
inicializado con el método start().
 Ejecutable: el thread puede estar ejecutándose o
preparado para ejecutarse. Se inicia con start()
 Bloqueado: el thread podría estar ejecutándose,
pero está esperando que termine alguna otra tarea,
p.e., E/S de disco
 Muerto: terminación del thread al finalizar el
método run().
THREADS

Ciclo de vida de un thread en Java:
THREADS
Los threads se pueden sincronizar.
 Se sincronizan los threads para evitar que se
haga más de un acceso simultáneo a una
región crítica.
 Los threads se implementan según cada
lenguaje de programación.

THREADS

En Java se pueden implementar los threads de
dos formas:
 Declarar
una clase que implemente la interfaz
Runnable.
 Crear un objeto de tipo Thread a partir de ella.
BIBLIOGRAFÍA-FUENTES:
Savitch, Walter, "Absolute JAVA", 2nd ed., Pearson,
EEUU, 2008.
 K. Barclay,J. Savage, "Object-Oriented Design with
UML and Java",1st ed. Elsevier, Gran Bretaña,
2004.
 Fco. Javier Alcalá Casado, Programación en Java.
 Peter Class; Pello Xabier Altadill Izura; Manual
C++.
 Miguel Ángel Abián, Orientación a Objetos:
Conceptos y terminología.



http://www.javahispano.org/documentacion/
http://www.omg.org