Metodologías de Programación
-
Upload
facultad-de-ingenieria-usat -
Category
Documents
-
view
240 -
download
0
description
Transcript of 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
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.
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
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
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.
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.
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
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”.
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.
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.
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].
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;
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
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
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].
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;
}
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
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
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.
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
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
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
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]
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.
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.