• No se han encontrado resultados

Unidad IV. Programación Orientada a Objetos

N/A
N/A
Protected

Academic year: 2021

Share "Unidad IV. Programación Orientada a Objetos"

Copied!
17
0
0

Texto completo

(1)

Unidad IV. Programación Orientada a Objetos

Tema I. Introducción

Tema II. Clases y Objetos

Tema III. Herencia

Tema IV. Encapsulación

Tema V. Abstracción

Objetivos

Introducir al alumno a los conceptos básicos de la programación orientada a objetos.

Introducir al alumno en técnicas generales de la programación orientada a objetos.

Que el alumno aprenda ha resolver problemas con un diseño orientado a objetos.

Enseñar técnicas de programación OO

Tema I. Introducción

Qué es un paradigma de programación

Es un conjunto de conceptos que dirigen la manera en la que construimos un programa. Como se diseñe la solución depende de los mecanismos, conceptos y maneras que un paradigma nos diga.

(2)

Algunos paradigmas conocidos

Imperativo C, Pascal, Basic, PHP, Perl. Funcional Lisp, Scheme.

Lógico Prolog.

Orientado a Objetos puros: Smalltalk, Eiffel. Orientado a Objetos hibridos: C++, Java.

Observe la distinción entre los lenguajes OxO puros e hibridos: En C++ o java, por ejemplo, existen constructos utilizados en la programación imperativa: while, for. Estos son modelados como objetos en los LOxO puros.

Justificación

La orientación por objetos es un paradigma que nace de la necesidad de poder expresar la solución de un problema en un lenguaje apegado al problema.

Ofrece un mecanismo poderoso de abstracción de ideas, que pueden ser independizadas y relacionadas, mediante mecanismos sencillos.

Cómo llegar a la Programación Orientada a Objetos

Programación Procedural: decida que procedimientos desea, luego utilice los mejores algoritmos que encuentre.

Programación Modular: Decida que módulos desea, luego parta el programa de tal forma que la data sea ocultada por los módulos.

El paradigma de la programación modular es también conocido como el principio del ocultamiento de la data. Como hacer:

Busque una interfaz para manejar la data.

Asegurese que la data sea solamente accesible a través de dicha interfaz. Asegurese que dicha data sea inicializada siempre, antes de su primer uso.

(3)

Cómo llegar a la Programación Orientada a Objetos (Cont.)

Abstracción de la data: la modularidad es el pilar de todos los programas de gran escala.

Tipos definidos por el usuario:

C++ ataca este problema, permitiendo que un usuario pueda declarar los tipos casi tal como se hace con los propios tipos internos.

El paradigma es:

Decida que tipos quiere, luego especifique cuales son las operaciones sobre esos tipos.

(4)

Ejemplo

¿Recuerda qué es un número complejo? class complex {

float real; float img; public:

complex (float r, float i) {real=r; img=i;} complex (float r) {real=r; img=0;}

complex operator+(complex _a)

{ return complex(_a.real + real, _a.img + img); } };

Tipos Abstractos

Un tipo abstracto, no está definido del todo. Especifica una interfaz y posteriormente otras clases podrán definir, concretamente la funcionalidad.

En C++ un tipo de dato abstracto está compuesto de funciones virtuales puras. Esto le dice al programador, que son funciones que podrían ser especificadas luego, en clases derivadas.

(5)

Ejemplos

Suponga que se desea construir una interfaz para tratar figuras geométricas. class figGeom {

char * nombre[30]; public:

virtual float area( )=0; virtual float rotar( )=0; };

class triangulo : public figGeom { coordenada_punto p1, p2, p3; public: float area() { // calcula area } ... };

El constructo “: public” se lee como deriva de, implementa a, hereda de, es un subtipo de.

Qué es Orientación por Objeto?

Si hablamos de un software orientado por objetos, puede verse como una colección de objetos, donde cada uno está formado por estructura de datos más la especificación de cada una de esas estructuras.

Ejemplo de objetos:

Una lápiz, una bicicleta, un elefante.

El segundo parrafo de la página 1 del cuento “El Principito”, El titulo de la obra más importante de D. Knuth “El arte de la programación”.

(6)

Tema II. Clases y Objetos

Clases

Una clase es un conjunto de datos y operaciones sobre esos datos, pero con añadiduras para hacer la abstracción mucho más poderosa.

Caja negra que oculta en su implementación:

Atributos: variables que codifican el estado de una instancia de la clase

(objeto)

Métodos: subprogramas que describen el comportamiento de un objeto de

la clase

Objetos

Instancia de una clase:

Cada objeto de una clase tiene su propia copia de los atributos (estado propio).

Todos los objetos de una clase comparten los mismos métodos (comportamiento común).

Un objeto consta de:

• Tiempo de vida: La duración de un objeto en un programa siempre está

limitada en el tiempo. La mayoría de los objetos sólo existen durante una parte de la ejecución del programa. Los objetos son creados mediante un mecanismo denominado instanciación, y cuando dejan de existir se dice que

son destruidos.

• Estado: Todo objeto posee un estado, definido por sus atributos. Con él se

definen las propiedades del objeto, y el estado en que se encuentra en un momento determinado de su existencia.

• Comportamiento: Todo objeto ha de presentar una interfaz, definida por sus métodos, para que el resto de objetos que componen los programas puedan

interactuar con él.

El equivalente de un objeto en el paradigma estructurado sería una variable. Así

mismo la instanciación de objetos equivaldría a la declaración de variables, y el tiempo de vida de un objeto al ámbito de una variable.

(7)

Ejemplo

La clase bicicleta es una definición abstracta, sin forma. Una bicicleta debe tener: Una biela, un cuadro, dos pedales, una o más ruedas, un volante, frenos.

Un objeto rueda puede ser: Una bicicleta de montaña, Una bicicleta de ruta, Una bicicleta de velodromo, Una bicicleta de paseo para 2 personas.

Atributos de la Clase Bicicleta: Llantas, pedales, cadena, cambios, frenos, sillín, ...

Operaciones sobre la Clase Bicicleta: Hacer cambios de la velocidad.

Frenar.

Mover el volante a la izquierda. Mover el volante a la derecha. Ajustar freno.

Observar el presión de aire de las llantas. Ajustar altura del asiento.

Diagramas

De Objetos: Proporcionan grafismos formales para modelar objetos, clases y sus relaciones entre si.

De Clases: Resume todas las posibles instancias de objetos.

De Instancias: Especifica como se relacionan un conjunto de objetos. Ejemplo:

(8)

Operaciones y Métodos

Las operaciones y los métodos son las acciones que permitirán darle sentido a los datos de los objetos.

Pueden ser referidas como acciones genericas o generales, luego se podrá especificar su conducta.

Ejemplo:

Modelo para la notación de Clases

(9)

Asociaciones Muchos a Muchos

Asociaciones Ternarias

Observe que para que este tipo de asociación tenga sentido, ninguno de las tres clases puede estar fuera

.

Multiplicidad

Dice que cantidad de instancias de clase están relacionadas con otras clases de relación explicita.

Expresa una cantidad finita o infinita de elementos relacionados. Hay simbolos especiales para expresar la relación de multiplicidad.

(10)

Multiplicidad Cero o Uno

Un auto puede tener o no un triángulo de seguridad.

Para poder escribir la multiplicidad, primero se determinan: objetos, clases y asociaciones.

Atributos en los Enlaces

Un atributo es un descriptor inherente a los objetos de una clase. Asi mismo, un atributo de enlace es un descriptor inherente a los enlaces de asociación.

Vea el gran parecido entre los atributos de objetos y atributos de enlaces. Las asociaciones del tipo muchos a muchos proporcionan el escenario ideal para colocar atributos a los enlaces.

Los atributos son propiedad del enlace, y pierde sentido (información) si se asociara a alguno de los objetos.

(11)

Atributos dentro de Asoc. uno a muchos

Atributos para los enlaces en asociaciones ternarias

(12)

Tema III. Herencia

Definición

La herencia es la propiedad que permite a los objetos construirse a partir de otros objetos.

Es el mecanismo que permite que un clase A herede propiedades de una clase B. Decimos "A hereda de B". Objetos de la clase A tienen así acceso a los atributos y métodos de la clase B sin necesidad de redefinirlos. La

siguiente definición describe dos términos con los que podemos hacer referencia a las clases involucradas cuando se usa la herencia.

Superclase y Subclase

(Superclase/Subclase) Si la clase A hereda de la clase B, entonces B es la superclase de A. A es subclase de B. Los objetos de una subclase pueden

ser usados en las circunstancias donde son usados los objetos de la superclase correspondiente. Esto se debe al hecho que los objetos de la subclase comparten el mismo comportamiento que los objetos de la superclase.

En la literatura también se pueden encontrar otros términos para "superclase" y para "subclase". Las superclases también son llamadas clases padres. Las

subclases pueden ser llamadas también clases hijas o simplemente clases derivadas.

En C++

En C++ la clase original se denomina clase base; las clases que se definen a partir de la clase base, compartiendo sus características y añadiendo otras nuevas, se denominan clases derivadas.

Las clases derivadas pueden heredar código y datos de su clase base añadiendo su propio código y datos a la misma.

(13)

Gráfica de herencia

Por supuesto, también se puede heredar de una subclase, haciendo que esta clase sea la superclase de la nueva subclase. Esto conduce a una jerarquía de relaciones superclase/subclase. Si dibujas esta jerarquía, se obtiene una gráfica de herencia.

Una gráfica de herencia consiste en usar flechas para indicar la relación de herencia entre clases u objetos.

Tipos

En la orientación a objetos, se consideran dos tipos de herencia, simple y múltiple.

Simple: Una clase se deriva de sólo una clase base.

(14)

Ejemplo1

class estudiante : public persona { ... };

Un conjunto de datos, por omisión es privado. En el ejemplo anterior, la clase estudiante hereda, publicamente de la clase persona. Puede leerse: se

deriva de, implementa, es un subtipo de...

Todos los métodos y datos de la clase persona, son accessibles desde las instancias de la clase estudiante.

Ejemplo2

class estudiante : private persona { ... };

Los métodos de la clase persona ahora no son accesibles desde las instancias de la clase estudiante.

Por ejemplo el tipo de dato tipo_persona, no deberia ser accesible desde persona, pues se fija desde el constructor de la clase estudiante.

Ejemplo3

Cuando hay herencia pública, los permisos de la clase original se preservan. class A {

private: int a, b; public:

void set_a(int _a); void set_b(int _b); };

(15)

Tema IV. Encapsulación

Definición

La encapsulación es la capacidad de contener y controlar el acceso a un grupo de elementos asociados. Las clases proporcionan una de las formas más comunes de encapsular elementos.

Encapsulación es la habilidad de una parte de un programa para ocultar sus datos al resto del código, impidiendo así accesos incorrectos o conflictos con los nombres de otras variables.

Justificación

Las principales razones técnicas para la utilización de la encapsulación son: 1) Mantener a salvo los detalles de representación, si solamente nos interesa el comportamiento del objeto.

2) Modificar y ajustar la representación a mejores soluciones algorítmicas o a nuevas tecnologías de software.

La encapsulación también permite controlar la forma de utilizar los datos y los procedimientos. Se pueden utilizar modificadores de acceso, como Private o Protected, para evitar que procedimientos externos ejecuten métodos de clase o lean y modifiquen datos en propiedades y campos. Los detalles internos de una clase deben declararse como Private para evitar que sean utilizados fuera de la misma.

(16)

Tema V. Abstracción

Definición

Es un mecanismos que permite representar en términos de un modelo sencillo una realidad muy compleja.

Separa el “qué” del “cómo”. Enfoca los aspectos esenciales inherentes a una entidad e ignora las propiedades casuales o temporales, se ignoran los detalles irrelevantes.

Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas

características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando los están, una variedad de técnicas son requeridas para ampliar una abstracción.

Abstracción funcional

Funcionalmente, un coche puede realizar las siguientes acciones:

• Ir • Parar

• Girar a la derecha • Girar a la izquierda

Hay cosas que se sabe que los coches hacen, pero el cómo lo hacen, la implementación de ir, parar, girar (a la derecha, a la izquierda) es irrelevante desde el punto del diseño. Esto es lo que se conoce como abstracción funcional.

(17)

Abstracción de datos

De forma semejante a la anterior, un coche tiene las siguientes características o atributos:

• Color • Velocidad • Tamaño • Carburante

La manera en que se almacenan o definen esos atributos, también es irrelevante para el diseño del objeto. Por ejemplo, el color puede definirse como la palabra rojo, o como un vector RGB (255,0,0). La forma en que el objeto almacena el atributo color es irrelevante para el programador. Este proceso de despreocupación de cómo se almacena el color es lo que se llama abstracción de datos.

Ventajas

• Permite el ocultamiento de la información. El acceso y la modificación

se hace a través de la interface y por las operaciones definidas por el mismo tipo abstracto del dato, pero, los detalles de implementación de sus operaciones no son visibles para el usuario final.

• Ayuda a proteger el acceso, la manipulación y actuación de los objetos:

se asegura que sólo pueda ejecutarse una operación que fue definida o descrita para un objeto particular en la interface.

• Cada abstracción es independiente.

• Reduce la complejidad global del sistema.

• Agiliza (facilita) la verificación y el razonamiento.

• La barrera entre especificación y diseño preliminar se elimina casi

completamente.

Los programas son más cortos, legibles y flexibles. Es por ello

Referencias

Documento similar

En el capítulo de desventajas o posibles inconvenientes que ofrece la forma del Organismo autónomo figura la rigidez de su régimen jurídico, absorbentemente de Derecho público por

Al hacer consultas a la base de datos, SQL permite utilizar operaciones algebraicas 

Para ello, trabajaremos con una colección de cartas redactadas desde allí, impresa en Évora en 1598 y otros documentos jesuitas: el Sumario de las cosas de Japón (1583),

Entre nosotros anda un escritor de cosas de filología, paisano de Costa, que no deja de tener ingenio y garbo; pero cuyas obras tienen de todo menos de ciencia, y aun

Volviendo a la jurisprudencia del Tribunal de Justicia, conviene recor- dar que, con el tiempo, este órgano se vio en la necesidad de determinar si los actos de los Estados

Se propone crear un sistema bajo la programación orientada a objetos en Java ya que es el lenguaje que proporciona diversas ventajas, que nos permitirá hacer

Calidad de software, pruebas de caja blanca, código fuente, camino básico, complejidad ciclomática, parámetros del código, estándares de codificación... IV TABLA

Por todo lo que hasta aquí se ha expuesto se propone realizar la investigación a partir del siguiente problema: ¿Cómo utilizar la transparencia que brindan los paradigmas de