Metodologías de Programación

Page 1

CUADERNO DE APUNTES DE CLASES

Metodolog铆as de Programaci贸n: Programaci贸n Orientada a Objetos H茅ctor M. Zelada Valdivieso

1


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

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. 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áelaborado licenciado bajo una Creative Reconocimiento-No Cuaderno de trabajo para la Escuela de Ing.Commons De Sistemas y Computación. Facultad de Ingeniería. Universidad Católica Toribio deLicense. Mogrovejo - USAT is ComercialCompartir Igual Santo 3.0 Unported licensed under a Creative Commons Reconocimiento-NoComercial-Compartir Igual 3.0 Unported License.

2


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

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

3


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

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

4


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

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.

5


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.

6


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

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

7


Metodologías de Programación: Programación Orientada a Objetos (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”.

8


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

¿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.

9


Metodologías de Programación: Programación Orientada a Objetos 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.

10


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

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].

11


Metodologías de Programación: Programación Orientada a Objetos 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;

12


Metodologías de Programación: Programación Orientada a Objetos 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

13


Metodologías de Programación: Programación Orientada a Objetos 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

14


Metodologías de Programación: Programación Orientada a Objetos 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 (+)

Privado (-)

Protected (#)

Sin Modificador

(público)

(privado)

(protegido)

Friendly (amistoso)

Misma clase

X

Otra clase (no clase hija) en el mismo paquete

X

X X

X

X X

(Esto se da en Java)

Otra clase (no clase hija) en otro paquete

X

Clase hija (subclase o clase derivada)

en

el

mismo

X

X

X

X

X

paquete Clase hija (subclase o clase derivada en otro paquete

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].

15


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

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; }

16


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

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

17


Metodologías de Programación: Programación Orientada a Objetos 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

18


Metodologías de Programación: Programación Orientada a Objetos 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.

19


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

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

20


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

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

21


Metodologías de Programación: Programación Orientada a Objetos 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

22


Metodologías de Programación: Programación Orientada a Objetos 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]

23


Metodologías de Programación: Programación Orientada a Objetos 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.

24


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

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.

25


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.