metodologías de programación

25
Metodologías de Programación: Programación Orientada a Objetos Héctor M. Zelada Valdivieso CUADERNO DE APUNTES DE CLASES

Upload: facultad-de-ingenieria-usat

Post on 20-Feb-2016

229 views

Category:

Documents


0 download

DESCRIPTION

Para desarrollar un software tenemos que seguir todo un proceso, en el cual una de sus etapas es la programación, etapa que para ser llevada a cabo de manera eficiente es necesario que el programador conozca y aplique alguna metodología de programación, porque si el programador no sigue una metodología de programación, éste definirá sus propias reglas, lo que en muchos casos conllevará a que su programa sea desordenado, y si su programa está desordenado, será difícil de entender, y si es difícil de entender, será difícil de depurarlo y si es difícil de depurarlo, el programa será propenso a tener errores, por lo que el programa perderá fiabilidad,

TRANSCRIPT

Page 1: Metodologías de Programación

1

Metodologías de Programación:

Programación Orientada a Objetos

Héctor M. Zelada Valdivieso

CUADERNO DE

APUNTES DE CLASES

Page 2: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

2

Copyright 2012, by the Contributing Authors, Esta obra se publica bajo una Creative Commons License.

Cuaderno de apuntes de clase elaborado para la Escuela de Ingeniería De Sistemas y Computación. Facultad de Ingeniería. Universidad Católica Santo Toribio de

Mogrovejo-USAT está licenciado bajo una Creative Commons Reconocimiento-No Comercial- Compartir Igual 3.0 Unported License.

Cuaderno de apuntes de clases

Metodologías de Programación: Programación Orientada a Objetos

Autor

Ing. Héctor M. Zelada Valdivieso Chiclayo 2012 Escuela de Ingeniería De Sistemas y Computación Facultad de Ingeniería. Universidad Católica Santo Toribio de Mogrovejo

Copyright 2012, by the Contributing Authors. Esta obra se publica bajo una Creative Commons License.

Cuaderno de trabajo elaborado para la Escuela de Ing. De Sistemas y Computación. Facultad de Ingeniería. Universidad Católica Santo Toribio de Mogrovejo - USAT is

licensed under a Creative Commons Reconocimiento-NoComercial-Compartir Igual 3.0 Unported License.

Page 3: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

3

INDICE

ÍNDICE DE FIGURAS 4

PRESENTACIÓN 5

INTRODUCCIÓN 6

CAPÍTULO I: DECISIONES Y CAMBIO

1.1. Programación Orientada A Objetos 7

1.2. Objeto 8

1.3. Atributos 9

1.4. Métodos 10

1.5. Clase 11

1.6. Paquete De Clases 11

1.7. Mensaje 13

1.8. Método Constructor 13

1.9. Método Destructor 14

1.10. Especificadores Y Modificadores De Acceso 15

1.11. Sobrecarga De Métodos 15

1.12. Métodos Recursivos 16

1.13. Diagrama De Clases 17

CAPÍTULO II: ANÁLISIS DE LAS TERORÍAS

2.1. Abstracción 21

2.2. Encapsulamiento 22

2.3. Herencia 22

2.4. Polimorfismo 23

REFERENCIAS 25

Page 4: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

4

INDICES DE FIGURAS

Figura 1: Diagrama de una Clase Según UML 17

Figura 2: Ejemplos de Diagrama de una Clase Según UML 18

Figura 3: Ejemplos de Relación de Dependencia Entre Clases Según UML 18

Figura 4: Ejemplos de Relación de Herencia Entre Clases Según UML 19

Figura 5: Ejemplos de Relación de Asociación Entre Clases Según UML 19

Figura 6: Ejemplo de Relación de Interfaz Según UML 20

Figura 7: Ejemplo de Diagrama de Objeto Según UML 20

Page 5: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

5

PRESENTACIÓN

Hoy en día vivimos en un mundo dominado por Sistemas de Información (SI),

Ingeniería de Software (IS), Tecnologías de Información (TI), Ciencias de la

Computación (CC) e Ingeniería de Computadoras (IC), por lo que una de las

competencias relacionadas con la Ingeniería de Software que debe tener un ingeniero

de sistemas y computación es el de ser capaz de desarrollar software de alta calidad.

Para desarrollar un software tenemos que seguir todo un proceso, en el cual una de

sus etapas es la programación, etapa que para ser llevada a cabo de manera eficiente

es necesario que el programador conozca y aplique alguna metodología de

programación, porque si el programador no sigue una metodología de programación,

éste definirá sus propias reglas, lo que en muchos casos conllevará a que su

programa sea desordenado, y si su programa está desordenado, será difícil de

entender, y si es difícil de entender, será difícil de depurarlo y si es difícil de depurarlo,

el programa será propenso a tener errores, por lo que el programa perderá fiabilidad,

característica muy importante que debe tener todo programa de computadora de

calidad, además debemos tener presente que si no se sigue una metodología de

programación común en un equipo de desarrollo, no se podrá trabajar en equipo ni

aprovechar las ventajas que tiene una metodología de programación. Debido a todo

esto el presente cuaderno de apuntes de clases busca proporcionar al estudiante los

conceptos y características más importantes de una de las Metodologías de

Programación: La Metodología de Programación Orientada a Objetos.

Page 6: Metodologías de Programación

6

INTRODUCCIÓN

Las metodologías de programación, también conocidas como paradigmas de

programación, son reglas, marcos de referencia, modelos, directrices o patrones que

definen la forma como solucionar un problema. Es decir influyen en la manera como

diseñamos una solución y como escribimos un programa de computadora. Existen

diferentes metodologías de programación, siendo una de ellas, la Metodología de

Programación Orientada a Objetos.

El presente cuaderno de apuntes de clase, es producto de una revisión bibliográfica de

diferentes autores que hablan sobre la Metodología de Programación Orientada a

Objetos. Busca proporcionar un resumen de los fundamentos teóricos necesarios para

el desarrollo de la asignatura de Metodologías de Programación que llevan los

estudiantes de la Escuela de Ingeniería de Sistemas y Computación de la Universidad

Católica Santo Toribio de Mogrovejo, en esta primera edición consta de 2 capítulos, el

primer capítulo veremos sobre los conceptos generales que debe conocer el

estudiante acerca de la Metodología de Programación Orientada a Objetos y en el

segundo capítulo veremos las características de la Programación Orientada a Objetos.

Page 7: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

7

CAPITULO I

FUNDAMENTOS DE PROGRAMACIÓN ORIENTADA A OBJETOS

1.1. Programación Orientada A Objetos

La Programación Orientada a Objetos (POO) es un método de implementación en el

que los programas se organizan como colecciones cooperativas de objetos, cada uno

de los cuales representan una instancia de alguna clase, y cuyas clases son todos

miembros de una jerarquía de clases unidas mediante relaciones de herencia [1].

La Programación Orientada a Objetos define una estructura de más alto nivel llamada

objeto, que ofrece ventajas sobre la programación tradicional:

a) La primera es permitir al programador que organice su programa de acuerdo a

abstracciones de más alto nivel, siendo éstas más cercanas a la manera de

pensar de la gente. En otras palabras los objetos son las unidades de

representación de las aplicaciones por ejemplo, cuentas de banco,

observaciones de vuelo, etc.

b) La segunda es que los datos globales desaparecen, siendo éstos junto con las

funciones parte interna de los objetos. Por lo tanto, cualquier cambio en la

estructura de alguno de los datos sólo debiera afectar las funciones definidas

en el mismo objeto y no en los demás [2].

La Programación Orientada a Objetos, es un enfoque de desarrollo de software que

organiza tanto el problema como su solución como una colección de objetos discretos;

donde tanto la estructura de datos como el compartimiento están incluidos en la

representación [3].

Finalmente, decir que la Programación Orientada a Objetos es una metodología o

paradigma de programación que utiliza a los Objetos como elementos fundamentales

para construir un programa de computadora. Surge en los años 70 y a diferencia del

paradigma o metodología de programación estructurada, que se centra en el proceso,

este paradigma se centra en el objeto que esta siendo afectado. En esta metodología,

después que hemos identificado el objeto, tenemos que identificar sus atributos

Page 8: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

8

(características, propiedades o estado del objeto) y sus métodos (comportamiento,

operaciones o acciones que realiza el objeto).

Esta metodología o paradigma orientado a objetos encapsula en uno sólo datos

(atributos) y procesos (métodos), a diferencia del paradigma estructurado que los

trabaja de manera aislada. Este paradigma se caracteriza por que presenta las

siguientes propiedades o características: Abstracción, Encapsulamiento, Herencia y

Polimorfismo.

1.2. Objeto

El objeto es una instancia de una clase que combina datos y procedimientos, un objeto

es simplemente una variable de un tipo de clase, y para diferenciar las variables de

tipo clase de las variables de otro tipo, se utiliza el término objeto [4].

Un objeto, es una unidad que combina en uno solo, datos y funciones que operan

sobre esos datos. Por consiguiente, dentro de los objetos residen los datos de los

lenguajes de programación tradicional, tales como números, arrays, cadenas y

registros, así como funciones o subrutinas que operan sobre ellos. Los objetos son

instancias de las clases [5].

El objeto es una entidad que tiene unos atributos particulares, las propiedades, y unas

formas de operar sobre ellos, los métodos [6].

Un objeto es una cosa con la que se puede interactuar; se le puede enviar varios

mensajes y éste reacciona ante ellos [7].

Finalmente podemos decir que los objetos son abstracciones del mundo; es decir un

objeto es un ente o alguna cosa tangible o intangible que uno se pueda imaginar que

interviene el sistema que estamos analizando y es relevante para éste. Los objetos

tienen unos atributos que representan sus características, propiedades o su estado y

unos métodos que representan su comportamiento o acciones que puede realizar.

Ejemplo: Plumón color negro, Plumón color azul, Celular de marca Motorola, etc.

Los atributos y métodos comunes a los objetos se agrupan en unos tipos llamados

clases, Por lo que algunos autores llaman a estos atributos y métodos como

miembros de una clase. Por ejemplo la clase para los objetos mencionados antes

sería la clase Plumón; por eso se dice que un objeto es una instancia de una clase ya

que se crean a partir de una clase. “Si no hay una clase no se pueden crear objetos”.

Page 9: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

9

¿Qué clase de cosas pueden ser objetos en un programa orientado a objetos?

La respuesta está solo limitada a su imaginación. Ejemplo: aviones, automóviles,

ventanas, menús, teclados impresoras, unidades de discos, Mouse, celulares,

animales vertebrados, animales invertebrados, datos complejos, carnes, frutas,

verduras, pasteles, etc. La identificación de objetos se obtiene examinando la

descripción del problema (análisis gramatical del enunciado o descripción) y

localizando los nombres y cláusulas nominales, después de identificarlas, tenemos

que definir sus atributos y métodos.

Shaer, Mellor y Yourdon definen categorías que nos pueden ayudar a identificar

objetos:

Cosas tangibles (mesa, silla, plumón, etc.)

Roles o papeles de las personas (cliente, proveedor, alumno, médico, etc.)

Transacción (compras, ventas, matricula, cita, etc.)

Organizaciones (empresa, área, equipo, etc.)

Incidentes (suceso, vuelo, accidente, evento, etc.)

Lugares (sala de embarque, muelle de carga, etc.)

1.3. Atributos

Los atributos son datos o variables que caracterizan o describen el estado de un

objeto, un atributo consta de un nombre de atributo y un valor de atributo [5].

Los atributos son las características de cada instancia de la clase [8].

Los atributos son las variables que se declaran al principio de la clase, fuera de los

métodos. Estas variables son compartidas por todos los métodos de la clase [6].

Los atributos son las características individuales que diferencian un objeto de otro y

determinan su apariencia, estado u otras cualidades. Los atributos se guardan en

variables denominadas de instancia, y cada objeto particular puede tener valores

distintos para estas variables [4].

Finalmente podemos decir que los atributos son las características, propiedades,

estado o datos de los objetos. Se dice que el estado del objeto es el valor que tienen

todos sus atributos en un instante dado.

Page 10: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

10

Los atributos vienen a ser los datos (simples o estructurados) que se definían en la

Programación Estructurada. En algunos libros de programación se les denomina,

variables miembro, variables de instancia, o campos.

Partes:

Los atributos tienen un especificador de acceso, el cual puede ser público (+),

privado (-), protegido (#) o amistoso.

Los atributos tienen un tipo de dato.

Los atributos tendrán un nombre

Ejemplo en Java: private float base;

1.4. Métodos

Los métodos son los procedimientos o acciones que cambian el estado de un objeto,

es un procedimiento o función que se invoca para actuar sobre un objeto, un método

es el algoritmo ejecutado en respuesta a la recepción de un mensaje cuyo nombre

corresponde con el nombre del método, los métodos son las operaciones o servicios

que describen el comportamiento asociado a un objeto, representa las acciones que

pueden realizarse por un objeto o sobre un objeto, cada método tiene un nombre y un

cuerpo que realiza la acción o comportamiento asociado con el nombre del método [5].

Un método se implementa en una clase y determina cómo tiene que actuar el objeto

cuando recibe el mensaje vinculado con ese método. A su vez, un método puede

también enviar mensajes a otros objetos solicitando una acción o información [6].

Los métodos son las operaciones que muestran el comportamiento del objeto [9].

Finalmente podemos decir que los métodos son los comportamientos, operaciones,

acciones o procesos de los objetos. Vienen a ser los procesos (funciones o

procedimientos) que definíamos en la Programación Estructurada.

En algunos libros de programación se denominan métodos miembro o funciones

miembros.

Partes:

Los métodos tienen un especificador de acceso, el cual puede ser público (+),

privado (-), protegido (#) o amistoso.

Los métodos pueden retornar un valor o no.

Page 11: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

11

Los métodos tendrán un nombre.

Los métodos pueden tener parámetros.

Los métodos tienen una definición (cuerpo del método).

Ejemplo en Java:

public float calcularArea (float base, float altura)

{ // Definición del método

}

1.5. Clase

Una clase describe un grupo de objetos con estructuras y comportamientos común [2].

Una clase es una agrupación de datos (atributo) y de funciones (métodos), que operan

sobre esos datos. A clase es el centro de la programación Orientada a Objetos [4].

Una clase es la descripción de un conjunto de objetos; consta de métodos y datos que

resumen características comunes de un conjunto de objetos. Se pueden definir

muchos objetos de la misma clase. Dicho de otro modo, una clase es la declaración de

un tipo de objeto. Las clases son similares a los tipos de datos y equivalen a modelos

o plantillas que describen cómo se construyen ciertos tipos de objetos. Una clase es

una colección de objetos similares [5].

Una clase es un tipo definido por el usuario. Una clase equivale a la generalización de

un tipo específico de objetos. Un objeto de una determinada clase se crea en el

momento en que se define una variable de dicha clase [6].

Finalmente podemos decir que las clases encapsulan o agrupan los atributos y

métodos comunes a varios objetos, son una plantilla, prototipos o tipos de datos

especiales que permite crear objetos. Por eso se dice que los objetos son instancias

de una clase, si no tenemos una clase, no podremos crear el objeto ya que el objeto

se crea a partir de una clase. Estas clases también tienen un especificador de acceso

que puede ser público (accedido por cualquier clase) o de paquete (sólo puede ser

accedido por clases del mismo paquete).

1.6. Paquete De Clases

Un paquete es una construcción lógica para agrupar clases, asociaciones y

generalizaciones. El paquete captura diferentes perspectivas de un sistema [2].

Page 12: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

12

Los paquetes son contenedores de clases e interfaces y también pueden contener a

otros paquetes. Todas clases contenidas en un paquete son clases amigas y pueden

compartir atributos y métodos dentro de este ámbito [4].

Los paquetes son un mecanismo utilizado por java que permite organizar las clases de

una manera estructurada y jerárquica. Básicamente, un paquete es un directorio en el

que se almacenan los archivos class con los byte codes de la clase; un paquete puede

a su vez estar compuestos de otros subpaquetes [6].

Finalmente podemos decir que un paquete es un directorio que agrupa a las clases, y

además dentro de un paquete puede haber otros. Debemos saber que hay paquetes

que ya vienen con los lenguajes de programación y otros paquetes son creados por el

programador. Por ejemplo, Java cuenta con una biblioteca de clases conocida como

paquetes (packages) de clases, dentro de cada paquete encontraremos unas clases

que podemos incluir en nuestros programas y reutilizar sus atributos y métodos según

se requiera.

Ejemplo de paquetes:

java.lang: Donde encontraremos a la clase System, Math, Byte, Short, Integer,

Long, Float, Double, String, etc.

java.io: Donde encontraremos a la clase BufferedReader, InputStreamReader,

IOException, etc.

java.util: Donde encontraremos a la clase Date, Random, Arrays, Vector, etc.

javax.swing: Donde encontraremos a la clase JOptionPane, etc.

Para incluir clases en nuestros programas, tenemos que escribir:

import nombrepaquete.NombreClase;

Cuando en lugar del nombre de la clase colocamos * significa que importaremos todas

las clases de ese paquete.

Ejemplo:

import java.lang.*;

import java.io.*;

import java.util.Date;

Page 13: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

13

El compilador incluye automáticamente en nuestros programas las clases del paquete

java.lang, es por eso que ya no es necesario poner la instrucción java.lang.*; en

nuestros programas.

1.7. Mensaje

El mensaje es esencialmente una orden que se envía a un objeto para indicarle que

realice alguna acción; es decir se le solicita que ejecute uno de sus métodos. Un

objeto accede a otro enviándole un mensaje. Estructuralmente, un mensaje consta de

tres partes: identidad del receptor, el método que se ha de ejecutar y una información

especial necesaria para realizar el método invocado (argumentos o parámetros

requeridos) [5].

Cuando se ejecuta un programa orientados a objetos, los objetos están recibiendo,

interpretando y respondiendo a mensajes de otros objetos [6].

Finalmente, podemos decir que un mensaje es una orden que se le envía a un objeto

para que ejecute uno de sus métodos. Es la orden que hace que el objeto ejecute

alguno de sus métodos.

Forma de enviar un mensaje a un objeto:

1.8. Método Constructor

Un constructor es un método que en algunos lenguajes de programación, por ejemplo

en Java, tiene el mismo nombre que la clase y cuyo propósito es inicializar los

miembros datos de un nuevo objeto que se ejecuta automáticamente cuando se crea

un objeto de una clase. Sintácticamente es similar a un método. Dependiendo del

número y tipos de los argumentos proporcionados, una función o método constructor

se llama automáticamente cada vez que se crea un objeto. Si no se ha escrito ninguna

función constructor en la clase, el compilador proporciona un constructor por defecto.

A su rol como inicializador, un constructor puede también añadir otras tareas cunado

es llamado. En Java, cuando se define un constructor no se puede especificar un valor

de retorno, ni incluso nada (void); un constructor nunca devuelve un valor. Un

Page 14: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

14

constructor puede, sin embargo, tomar cualquier número de parámetros (cero o más)

[5].

Un método constructor es un procedimiento especial de una clase que es llamado

automáticamente siempre que se crea un objeto de esa clase. Su función es iniciar el

objeto [6].

Los constructores pueden usarse para llevar acabo la inicialización, lo que da una

flexibilidad mayor en la programación [10].

Finalmente podemos decir que el método constructor es un método especial de una

clase que es llamado automáticamente siempre que se crea un objeto de la misma. Se

encarga de la creación del objeto e inicializa su estado. Es decir inicializa los atributos

del objeto, ya sea a sus valores iniciales que ha definido el programador o si no los

hubiera los inicializa a los valores predeterminados del sistema (atributos numéricos:

0; atributos de carácter: „\0‟; referencias a objetos: null). Esta inicialización es sólo para

los atributos no para la variables locales, para las variables locales el programa debe

asignarles un valor antes de usarlas, o sino saldrá un error). El nombre de este

método constructor en Java suele ser el mismo de la clase a la cual sirven.

El constructor por omisión es un constructor sin parámetros que será invocado cada

vez que se construya un objeto. Pero el programador puede definir explícitamente su

constructor, en donde el constructor por omisión es remplazado por éste, para

solucionar este problema, hay que añadir a la clase un constructor sin parámetros

(Sobrecarga del método constructor), las clases pueden tener varios constructores

sobrecargados, pero mínimo siempre tienen uno que permite que se cree el objeto.

1.9. Método Destructor

Un método destructor es un procedimiento especial de una clase que es llamado

automáticamente siempre que se destruya un objeto de esa clase. Su función es

realizar tarea final en el momento de destruir el objeto, un destructor se distingue

fácilmente en algunos lenguajes de programación por que tiene el nombre finalize [6].

Al igual que sucede con los constructores, se proporciona un constructor por defecto

en el caso de que no se incluya implícitamente en la declaración de la clase. Al

contrario que los constructores, sólo puede haber un destructor por clase. Esto se

debe a que los destructores no pueden tener argumentos ni devolver valores. Los

Page 15: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

15

destructores se llaman automáticamente siempre que un objeto deje de existir y su

objetivo es limpiar cualquier efecto no deseado que haya podido dejar el objeto [5].

Finalmente podemos decir que un método destructor, es un método que se ejecuta

automáticamente cada vez que se destruye un objeto, en el caso de java es el método

finalize. Cuando un objeto es destruido, se llama al método finalize, y luego el

recolector de basura se encarga de eliminar el objeto, liberando la memoria ocupada.

un objeto es destruido cuando se eliminan todas las referencias al mismo, una

referencia a un objeto puede ser eliminada porque el flujo de ejecución salga fuera del

ámbito donde esta declarada, o porque explícitamente se le asigna el valor null.

A diferencia de los constructores sólo se puede definir un destructor

1.10. Especificadores Y Modificadores De Acceso

Los modificadores de acceso se utilizan para definir la visibilidad de los miembros de

una clase (atributos y métodos) y de la propia clase [6].

En la Tabla N° 1 se puede resumir los accesos permitidos a los miembros de una

clase (atributos y métodos), dependiendo del especificado o modificador de acceso.

Tabla 1: Especificadores de acceso

Zona

Public (+)

(público)

Privado (-)

(privado)

Protected (#)

(protegido)

Sin Modificador

Friendly

(amistoso)

Misma clase X X X X

Otra clase (no clase hija) en

el mismo paquete X

X

(Esto se da en Java) X

Otra clase (no clase hija) en

otro paquete X

Clase hija (subclase o clase

derivada) en el mismo

paquete

X X X

Clase hija (subclase o clase

derivada en otro paquete X X

1.11. Sobrecarga De Métodos

La sobrecarga de métodos es otra ventaja que nos ofrece la Programación Orientada

a Objetos, por lo que podemos tener en una misma clase varios métodos con el mismo

nombre, de esta manera nos permite, por tanto, disponer de diferentes versiones de

un método para llevar a cabo una determinada operación [6].

Page 16: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

16

Finalmente podemos decir, que la sobrecarga de métodos nos permite tener en un

misma clase, métodos con el mismo nombre, pero que no son idénticos ya que difieren

en su parámetros, debemos recodar que la firma de un método; es decir lo que lo hace

único es su nombre y sus parámetros (cantidad y tipo de datos), no interviene el tipo

de dato de retorno, ni el nombre del parámetro; es así que nos podemos encontrar en

una clase métodos que se llaman igual, pero que no son idénticos ya que difieren en

su parámetros.

Ejemplo de métodos sobrecargados:

public void calcularArea ( ) {

}

public float calcularArea ( byte parte) {

}

1.12. Métodos Recursivos

La recursividad es una técnica de programación importante que se utiliza para realizar

una llamada a un método desde el mismo método. Como ejemplo útil se puede

presentar el cálculo de números factoriales. Él factorial de 0 es, por definición, 1. Los

factoriales de números mayores se calculan mediante la multiplicación de 1 * 2 * …,

incrementando el número de 1 en 1 hasta llegar al número para el que se está

calculando el factorial [10].

Ejemplo de un método recursivo

public long factorial (long n) {

if (n== 0 || n== 1)

return 1;

else

return factorial(n-1)*n;

}

Page 17: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

17

1.13. Diagrama De Clases

Después de identificar y seleccionar las clases, se debe construir el diagrama de

clases para el dominio del problema. Este diagrama puede ayudar a identificar clases

adicionales, además servirá de base para encontrar los atributos y asociados entre

ellas [2].

El diagrama de clases modela la vista estática del sistema, ya que no describe el

comportamiento del sistema en función del tiempo. Un diagrama de clases recoge

tanto los conceptos del dominio de la aplicación como aquellos que forman parte de la

implementación de la aplicación.

Los elementos principales son:

Clases, para modelar un concepto del dominio de la aplicación o de la solución.

Relaciones, para asociar las clases [11].

UML (lenguaje de modelado unificado), define la forma como debemos realizar un

diagrama de clases que se muestra en la figura 1.

Figura 1: Diagrama de una Clase Según UML

Especificador de acceso:

Público (+), Privado (-), Protegido (#), por omisión (si no se indica nada)

Alcance de los miembros (atributos y métodos) de una clase:

De clase: No se necesita crear un objeto para acceder a los atributos y

métodos de la clase. En el diagrama se indica subrayando todo el atributo o

todo el método, se caracteriza por que el valor de los atributos permanece

estático, es el mismo para todos los objetos que se creen, se usa por ejemplo

Page 18: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

18

para llevar un control de la cantidad de objetos creados de una clase

determinada.

De instancia o de objeto: Se necesita crear un objeto para acceder a los

atributos y métodos de la clase. En el diagrama se indica esto no subrayando

los atributos o métodos.

Ejemplos:

En la figura 2, se muestra un par de ejemplo de como diagramar una clase.

Figura 2: Ejemplos de Diagrama de una Clase Según UML

Las clases se relacionan entre si, formando relaciones de dependencia, de herencia o

generalización, de asociación o de interfaz.

En la figura 3 se muestra un ejemplo de como sería una relación de dependencia entre

clases, donde si la clase independiente se altera la clase que depende de ella se ve

afectada.

Figura 3: Ejemplos de Relación de Dependencia Entre Clases Según UML

Page 19: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

19

En la figura 4 se muestra un ejemplo de como sería una relación de herencia entre

clases, la clase padre encapsula atributos y métodos comunes de las clases hijas, y la

clase hija hereda (reutiliza) estos atributos y métodos de la clase padre si el

especificador de acceso lo permite (+ y #)

Figura 4: Ejemplos de Relación de Herencia Entre Clases Según UML

En la figura 5 se muestra un ejemplo de como sería una relación de asociación entre

clases.

Figura 5: Ejemplos de Relación de Asociación Entre Clases Según UML

En la figura 6 se muestra un ejemplo de como sería una relación entre una clase y una

interfaz.

Page 20: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

20

Figura 6: Ejemplo de Relación de Interfaz Según UML

UML, además define una forma de como diagramar un objeto como se muestra en la

figura 7.

Figura 7: Ejemplo de Diagrama de Objeto Según UML

Page 21: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

21

CAPITULO II

CARACTERÍSTICAS DE LA DE PROGRAMACIÓN ORIENTADA A

OBJETOS

2.1. Abstracción

La abstracción es el proceso de excluir detalles no deseados o no significativos al

problema que se trata de resolver [5].

La abstracción consiste en centrarse en los aspectos esenciales inherente de una

entidad, e ignorar sus propiedades accidentales. En el desarrollo de sistemas esto

significa centrarse en lo que es y lo que hace un objeto antes de decidir cómo debería

ser implementado [12].

Por medio de la abstracción conseguimos no detenemos en los detalles concretos de

las cosas que no interesen en cada momento, sino generalizar y centrarse en los

aspectos que permitan tener una visión global del problema. Por ejemplo, el estudio de

un ordenador podemos realizarlo a nivel de funcionamiento de sus circuitos

electrónicos, en términos de corriente, tensión, etc., o a nivel de transferencia entre

registros, centrándose así el estudio en el flujo de información entre las unidades que

lo componen (memoria, unidad aritmética, unidad de control, registros, etc.), sin

importarnos el comportamiento de los circuitos electrónicos que componen estas

unidades [6].

Finalmente podemos decir que la abstracción es una característica de la metodología

de programación Orientada a Objetos que consiste en capturar los detalles

fundamentales o principales de los objetos que intervienen en la realidad que estamos

analizando. La abstracción consiste en definir todas las clases necesarias para la

realidad analizada, identificando además para cada clase los atributos y métodos

necesarios, dejando de lado detalles irrelevantes. La abstracción permite gestionar la

complejidad. Por ejemplo, las personas no piensan en un coche como centenares de

elementos, sino como un objeto bien definido con su propio comportamiento. Esta

abstracción permite utilizar el coche (carro) para conducirlo sin tener que preocuparse

de la complejidad de las partes que lo forman, no nos preocupamos de como funciona

el motor, los frenos, el sistema de refrigeración, etc. En los lenguajes de programación

Page 22: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

22

orientada a objetos, el concepto de Clase es la representación y el mecanismo por el

cual se gestionan las abstracciones.

2.2. Encapsulamiento

El principio de encapsulamiento significa que las estructuras de datos internas

utilizadas en la implementación de una clase no pueden ser accesibles directamente al

usuario de la clase [5].

El encapsulamiento es la capacidad de envoltura y protección alrededor del código y

los datos que se manipulen. Esta envoltura define el comportamiento y protege el

código y los datos, para evitar que otro código acceda a ellos de manera arbitraria [4].

El encapsulamiento permite ofrecer a los usuarios una visión de caja negra, de forma

que sólo se exporte la interfaz de usuario. Esta aproximación, estrechamente ligada

con la ocultación de información, permite empaquetar la funcionalidad de un objeto, de

forma que se pueda cambiar la funcionalidad interna sin afectar a la visión externa de

un componente de un sistema [6].

Finalmente podemos decir que el encapsulamiento es una característica de la

metodología de programación Orientada a Objetos por la cual los objetos encapsulan

en su interior atributos y métodos, de tal forma que podemos ver la estructura de un

objeto como si estuvieran encerrados en una capsula. Cuando hablamos de

encapsulamiento, también tenemos que hablar de ocultamiento de información, el cual

es el proceso por el cual sólo las interfaces externas de un objeto se pueden ver por

otros objetos. Sólo conocemos del objeto que hace, cuales son sus interfaces a través

de la cual podemos acceder a él, pero no sabemos o no conocemos como lo hace.

Sólo necesitamos conocer lo necesario para poder usar un objeto (Que hace y como

puedo acceder a él). Ejemplo los métodos que usamos de la clase Math, como pow,

sqrt, etc. De los cuales sabemos que hace, que parámetros necesita, que tipo de dato

retorna, pero no conocemos la definición de ese método; es decir no sabemos como lo

hace, o como esta implementado.

2.3. Herencia

La herencia, es la propiedad que le permite a los objetos ser construidos a partir de

otros objetos. Dicho de otro modo, la capacidad de un objeto para utilizar las

estructuras de datos y los métodos previstos en antepasados o ascendientes. El

objetivo final es la reutilización, es decir, reutilizar código anteriormente ya

Page 23: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

23

desarrollado. Existen dos mecanismos de herencia utilizados comúnmente en

programación orientada a objetos: Herencia simple y herencia múltiple. La herencia

simple es aquel tipo de herencia en la cual un objeto puede tener sólo un ascendiente,

o dicho de otro modo, una subclase puede heredar datos y métodos de una única

clase. La herencia múltiple es aquel tipo de herencia en la cual una clase puede tener

más de un ascendiente inmediato, o lo que es igual, adquirir datos y métodos de más

de una clase [5].

La herencia es el mecanismo por el que se crean nuevas clases definidas en términos

de clases ya existentes. La herencia relaciona clases de modo jerárquico, esto permite

que una clase herede toda las variables y métodos de su clases superior además de

implementar sus propias clases y métodos [4].

La herencia permite el acceso automático a la información contenida en otras clases,

de esta forma, la reutilización del código está garantizada. Con la herencia todas las

clases están clasificadas en una jerarquía estricta. Se puede ver a la herencia como

una sucesiva especialización de las clases. La clase de la que se hereda se suele

denominar clase padre o superclase, y la clase que hereda se denomina clase hija o

subclase. Es el mecanismo por el cual se crean nuevas clases definidas en términos

de clases ya existentes. La herencia relaciona clases en modo jerárquico esto permite

que una clase herede todas las variables y métodos de su clase [6].

Finalmente podemos decir que la herencia es una característica de la metodología de

programación Orientada a Objetos por la cual los objetos pueden heredar atributos o

métodos de otros objetos. En la herencia existirá una clase base también llamada

clase padre o superclase de la cual heredan atributos o métodos las clases derivadas,

clases hijas o subclases si el especificador de acceso lo permite. Cuando la clase hija

hereda de una sola clase padre se llama herencia simple y cuando la clase hija hereda

de varias clases padres se llama herencia múltiple. Java no soporta herencia múltiple,

C++ si lo hace. El manejo de herencia permite la reutilización y evitar redundancia, en

la figura 4 se mostró un ejemplo de como se representa una relación de herencia entre

clases

2.4. Polimorfismo

El polimorfismo (múltiples formas) es la utilización de operadores o funciones de

formas diversas, dependiendo de cómo se estén operando [5]

Page 24: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

24

El polimorfismo es una propiedad que permite que un objeto tenga un comportamiento

distinto, en función a una determinada realidad [4].

El polimorfismo es una característica que permite implementar múltiples formas de un

mismo método, dependiendo cada una de ellas de la clase sobre la que se realice la

implementación. Esto hace que se pueda acceder a una variedad de métodos distintos

(todos con el mismo nombre) utilizando exactamente el mismo medio de acceso [6].

Finalmente podemos decir que el polimorfismo es una característica de la metodología

de programación Orientada a Objetos por la cual un mismo método puede

comportarse de manera distinta en clases diferentes. Por esta característica, podemos

enviar el mismo mensaje a objetos de diferentes clases, de forma que cada uno de

ellos responde a ese mismo mensaje de modo distinto dependiendo de su

implementación. No confundir con sobrecarga, el polimorfismo se aplica sólo a

métodos que tienen la misma signatura pero están definidos en clases diferentes. La

signatura de un método es una combinación de su nombre y el tipo y número de

argumentos que se pasan al mismo. Por ejemplo el método sumar para un objeto

entero significará suma, mientras que para un objeto String significará concatenación.

El método área en un rectángulo tendrá un comportamiento diferente que el método

área de un triángulo.

Page 25: Metodologías de Programación

Metodologías de Programación: Programación Orientada a Objetos

25

REFERENCIAS BIBLIOGRÁFICAS

[1] Grady Booch, Análisis y diseño orientado a Objetos con Aplicaciones, Segunda Ed.

México: Addison Wesley, 1995.

[2] Alfredo Weitzenfeld, Ingeniería de Software Orientada a Objetos con UML, Java e

Internet, México: Thomson. Learnign, inc., 2005.

[3] Shari Lawrence Pfleeger, Ingeniería de Software: Teoría y Práctica, Buenos Aires:

Perarson Educación, 2002.

[4] J. Castañeda, Desarrollo de Aplicaciones en Java, Primera Ed. Perú: Ritisa Graff,

2007.

[5] Luis Joyanes, Fundamentos de Programación I y algoritmos, estructuras de datos y

objetos I, Tercera Ed., España: Madrid, MgGraw – Hill, 2003.

[6] Fco. Javier Ceballos Sierra, Java 2: Curso de Programación, Segunda Ed., México

D.F.: Alfaomega Grupo Editor, 2003.

[7] Perdita Stevens, Utilización de UML en Ingeniería de Software con Objetos y

Componentes, Madrid: Pearson Educación, 2002.

[8] Bertrand Meyer, Construcción de un Software Orientado a Objetos, Madrid:

Pretince Hall, 1999.

[9] Rogers Pressman, Ingeniería de Software: Un enfoque práctico, México D.F.: Mc

Graw-Hill, 2005.

[10] Bruce Eckel, Piensa en Java, 2da Ed., Madrid: Pearson Educación, 2002.

[11] Antonio De Amescua, Análsisi y Diseño Estructurado y Orientado a Objetos de

Sistemas Informáticos, España: Madrid, MgGraw-Hill.

[12] James Rumbaugh, El Lenguaje Unificado de Modelado: Manual de Referencia,

Madrid: Pearson Educación, 2000.