You are on page 1of 25

AP28-Programación Orientada a Objetos

1. Introducción.
La tecnología orientada a objetos se define como una metodología de diseño de software
que modela las características de objetos reales o abstractos por medio del uso d
e clases y objetos. Hoy en día, la orientación a objetos es fundamental en el desarr
ollo de software, sin embargo, esta tecnología no es nueva, sus orígenes se remontan
a la década de los años sesenta. De hecho Simula, uno de los lenguajes de programac
ión orientados a objetos más antiguos, fue desarrollado en 1967.
? Objeto
Una unidad de software conformada por atributos y métodos específicos.
El objeto, es el concepto principal sobre el cual se fundamenta la tecnología orie
ntada a objetos. Un objeto puede ser visto como una entidad que posee atributos
y efectúa acciones. En el mundo real podemos encontrar cientos de ejemplos que cum
plen con ésta definición, algunos de ellos son: una bicicleta, un automóvil, una perso
na, una computadora, etcétera.
Estos objetos son casos particulares de entidades llamadas clases en donde se de
finen las características comunes de tales objetos. Veamos el caso particular del
objeto automóvil, podemos mencionar como atributos de éste: el modelo, el color, la
marca, el número de placas, entre otros.
Algunas acciones que es capaz de realizar un automóvil son: ir en reversa, virar,
frenar, acelerar y cambiar la velocidad. Este objeto automóvil, es una instancia p
articular de la entidad automóvil. En términos de la programación orientada a objetos,
se dice que todo objeto tiene un estado (atributos) y un comportamiento (accion
es). La programación orientada a objetos nos permite modelar estos objetos del mun
do real en objetos de software de forma eficaz. Un objeto de software mantiene s
us atributos o estado en variables e implementa las acciones o comportamientos p
or medio de métodos o funciones. Supongamos que queremos desarrollar una aplicación
que simule un vehículo. Tendríamos entonces un objeto vehículo constituido por variabl
es en las cuales podríamos almacenar número de serie, color, la velocidad actual, et
cétera. Aunado a esto, tendríamos un conjunto de funciones que implementaran las acc
iones para frenar, virar, cambiar la velocidad, etcétera.
? Clase
Es un molde o bien prototipo en donde se definen los atributos (variables) y las
acciones (métodos) comunes de una entidad.
Este es el paradigma que propone la programación orientada a objetos, la abstracción
de los elementos que constituyen a un objeto del mundo físico, esto es, atributos
y comportamiento, y la representación de éstos elementos por medio de objetos de so
ftware formados por variables y métodos que permitan la manipulación de tales variab
les. Cabe mencionar que además de representar los objetos físicos del mundo real por
medio de objetos, también podemos modelar objetos abstractos, por ejemplo las acc
iones de un usuario al interactuar con la maquina. Como observaremos más adelante,
algunas de las ventajas de la tecnología orientada a objetos son la reutilización d
e objetos, y la facilidad de comprensión de los programas.

2. Bases Sobre las Cuales se Fundamenta la Programación Orientada a Objetos.


Los elementos más importantes que deben tener los objetos de software, para cumpli
r con el paradigma de orientación a objetos son:
Abstracción.
Modularidad.
Encapsulamiento.
Jerarquía.
Polimorfismo.
Abstracción.

? Abstracción
Es el proceso en el cual separamos las propiedades más importantes de un objeto, d
e las que no lo son. Es decir, por medio de la abstracción definimos las característ
icas esenciales de un objeto del mundo real, los atributos y comportamientos que
lo definen como tal, para después modelarlo en un objeto de software.
En el proceso de abstracción no debemos preocuparnos por la implementación de cada mét
odo o atributo, solamente debemos definirlo de forma general. Por ejemplo, supon
gamos que deseamos escribir un programa para representar el sistema solar, por m
edio de la abstracción, podemos ver a éste sistema como un conjunto de objetos, algu
nos de estos objetos son los planetas, que tienen un estado, dado por sus caract
erísticas físicas, digamos, tamaño, masa, entre otras, estos objetos tendrán también compo
rtamientos : la translación y la rotación, pueden mencionarse como los más evidentes.
Visualizar las entidades que deseamos trasladar a nuestros programas, en términos
abstractos, resulta de gran utilidad para un diseño optimo de nuestro software, ya
que nos permite comprender más fácilmente la programación requerida.
En la tecnología orientada a objetos la herramienta principal para soportar la abs
tracción es la clase. Podemos definir a una clase como una descripción genérica de un
grupo de objetos que comparten características comunes, dichas características se es
pecificadas en sus atributos y comportamientos. En otras palabras, una clase es
un molde o modelo en donde se especifican las características que definen a un obj
eto de manera general, a partir de una clase pedemos definir objetos particulare
s. En programación orientada a objetos se dice que un objeto es una instancia de l
a clase, es decir un objeto, es un caso particular del conjunto de objetos que c
omparten características similares, definidas en la clase.
Un ejemplo servirá para clarificar estos conceptos. Definamos a la clase persona,
esta clase tendrá ciertos atributos, por ejemplo edad, sexo y nombre entre otros.
Las acciones o comportamientos que podemos definir para esta clase son, por ejem
plo, respirar, caminar, comer, etcétera. Estas son, para nuestro caso, las caracte
rísticas que definen a nuestra clase persona. Un objeto instanciado de está clase po
dría ser Juan Pérez, de sexo masculino y de 35 años de edad, quién se encuentra caminand
o. Estos atributos son conocidos formalmente en programación orientada a objetos c
omo variables de instancia por que contienen el estado de un objeto particular e
n un momento dado, en este caso Juan Pérez. Así mismo, los comportamientos son llama
dos métodos de instancia porque nos muestran el comportamiento de un objeto partic
ular de la clase.
Hay que tener cuidado de no confundir un objeto con una clase, una gelatina de f
resa y una gelatina de limón son objetos de la misma clase (o del mismo molde), pe
ro con atributos (o sabores) diferentes.

? Modularidad
Dentro de la programación orientada a objetos, la modularidad juega un papel muy i
mportante. Una vez que hemos representado una situación del mundo real en un progr
ama, tenemos regularmente como resultado, un conjunto de objetos de software que
constituyen la aplicación. La modularidad, nos permite poder modificar las caract
erísticas de la clase que definen a un objeto, de forma independiente de las demás c
lases en la aplicación. En otras palabras, si nuestra aplicación puede dividirse en
módulos separados, normalmente clases, y estos módulos pueden compilarse y modificar
se sin afectar a los demás, entonces dicha aplicación ha sido implementada en un len
guaje de programación que soporta la modularidad. La tecnología orientada a objetos
nos brinda esta propiedad para hacer uso de ella en el software que desarrollemo
s.
? Encapsulamiento
También referido como ocultamiento de la información, el encapsulamiento es la propi
edad de la orientación a objetos que nos permite asegurar que la información de un o
bjeto le es desconocida a los demás objetos en la aplicación. Es muy frecuente refer
irse a los objetos de software como cajas negras, esto se debe principalmente a
que no necesitamos, dentro de la programación orientada a objetos, saber como esta
instrumentado un objeto para que este interactúe con los demás objetos. Generalment
e una clase se define en dos partes, una interfaz por medio de la cual los objet
os que son instanciados de la misma interactúan con los demás objetos en la aplicación
, y la implementación de los miembros de dicha clase (métodos y atributos). Retomand
o dos de los ejemplos anteriores, supongamos que deseamos realizar una aplicación
en donde deben interactuar el objeto Mercedes Benz, instancia de la clase automóvi
l y el objeto Juan Pérez, instancia de la clase Persona. Ambos objetos pueden ser
vistos como cajas negras las cuales se comunican por medio de una interfaz. El o
bjeto Mercedes no sabe como esta implementado el objeto Juan Pérez y viceversa. Co
ncretamente, el encapsulamiento permite a un objeto ocultar información al mundo e
xterior, o bien restringir el acceso a la misma.
Una aplicación orientada a objetos esta constituida, como mencionamos anteriorment
e, por módulos. Estos módulos se implementan mediante clases, las cuales representan
, generalmente, abstracciones de objetos del mundo real. Es por medio del encaps
ulamiento que podemos definir los atributos y los métodos de una clase para que lo
s objetos que se instancian de ésta trabajen como unidades independientes de los d
emás objetos con los que interactúan. En otras palabras, con el encapsulamiento gana
mos modularidad, y además protegemos a los objetos de ser manipulados de forma ina
decuada por objetos externos.
? Jerarquía
Una vez que hemos definido una clase, por ejemplo la clase bicicleta, con sus at
ributos y métodos, tal vez necesitemos definir una nueva clase específica para las b
icicletas de carreras. Es obvio que ésta nueva clases compartirá elementos en común co
n la clase bicicleta, es decir, la clase bicicleta de carreras será un subconjunto
de la clase bicicleta.
La tecnología orientada a objetos nos permite definir jerarquías entre clases y jera
rquías entre objetos. Las dos jerarquías más importantes que existen son la jerarquía es
un que precisa la generalización y especificación entre clases y la jerarquía es parte d
e en la cual se delimita la agregación de objetos.
Comúnmente, a la jerarquía es un se le conoce como herencia. La herencia simple es la
propiedad que nos permite definir una clase nueva en términos de una clase ya exis
tente. Regresando al ejemplo, si podemos decir que una bicicleta de carreras es u
na bicicleta, entonces podemos definir a la clase bicicleta de carreras a partir
de la clase bicicleta. Existirán casos en los cuales se necesite definir una clase
a partir de dos o más clases preexistentes, en este caso estaremos hablando de he
rencia múltiple.
En cuanto a la jerarquía de agregación, también conocida como inclusión, podemos decir q
ue se trata del agrupamiento lógico de objetos relacionados entre si dentro de una
clase. Supongamos que tenemos que definir a la clase automóvil, pero además hemos d
efinido ya a la clase volante. Si podemos expresar la oración, un volante es parte
de un automóvil, entonces podemos instanciar un objeto de la clase volante, para de
finir a la clase automóvil. En este caso, se dice que automóvil es una agregación y vo
lante es un agregado de automóvil.
? Polimorfismo
Muchas veces es necesario que un mismo comportamiento o acción se realice de difer
entes maneras, por ejemplo, supongamos que deseamos implementar a la clase mamífer
os, supongamos también que uno de los métodos que deseamos implementar para esta cla
se, es el que permita a tales mamíferos desplazarse de forma natural. Nos encontra
remos entonces con que para algunos mamíferos el desplazamiento se realizará por med
io de caminar, como es en el caso de las personas, para otros el desplazamiento
natural será nadar, como en el caso de los delfines e inclusive para otros, el des
plazamiento se logrará por medio de volar, como sucede con los murciélagos. En otras
palabras, un mismo comportamiento, en este caso el desplazamiento, puede tomar
diferentes formas.
Dentro de la programación orientada a objetos puede modelarse esta situación del mun
do real, en objetos de software, gracias al polimorfismo. El polimorfismo es la
propiedad por la cual una entidad puede tomar diferentes formas. Generalmente es
tá entidad es una clase, y la forma en que se consigue que tome diferentes formas
es por medio de nombrar a los métodos de dicha clase con un mismo nombre pero con
diferentes implementaciones.

3. + Acerca de la Programación Orientada a Objetos


Método de implementación en el que los programas se organizan como colecciones de ob
jetos, representando cada uno de estos una instancia de alguna clase, y que esta
s a su vez son todas miembro de una jerarquía de clases unidas mediante relaciones
de herencia.
Existen tres importantes partes en la definición: la programación orientada a objeto
s
1) utiliza objetos, no algoritmos como bloques de construcción lógicos(jerarquía
de objetos).
2) Cada objeto es una instancia de una clase
3) Las clases se relacionan una con otra por medio de relaciones de herenci
a .
Cuando se ejecuta un programa orientado a objetos ocurren tres procesos, primero
, los objetos se crean a medida que se necesitan. Segundo, los mensajes se mueve
n de un objeto a otro (o desde un usuario al objeto) a medida que el programa pr
ocesa información internamente o responde a la petición del usuario. Tercero, cuando
los objetos ya no son necesarios, se borran y se libera la memoria.
Un programa puede parecer orientado a objetos, pero si cualquiera de estos eleme
ntos no existe, no es un programa orientado a objetos. Específicamente , la progra
mación sin herencia es distinta de la programación de la programación orienta a objeto
s; se denomina programación con tipos abstractos de datos o programación basada en o
bjetos.
El concepto de objetos, al igual que los tipos abstractos de datos o tipos defi
nidos por el usuario , es una colección de elementos de datos, junto con las funci
ones asociadas utilizadas para operar sobre esos datos .sin embargo la potencia
real de los objetos reside en el modo en el que los objetos pueden definir otros
objetos. Este proceso ya comentado en el capitulo 1 : se denomina herencia y es
el mecanismo que ayuda a construir programas que se modifican fácilmente y se ad
aptan a aplicaciones diferentes.
Los conceptos que estructuran la POO son:
Objetos
Clases
Herencia
Mensajes
Polimorfismo
Los programas orientados a objetos constan de objetos. Los cuales se comunican e
ntre si pasando mensajes.

4. Taxonomía de los Lenguajes Orientados a Objetos.


Una clasificación para los lenguajes de programación con respecto a la orientación a o
bjetos fue creada por Wegner, dicha clasificación se constituye de la siguiente fo
rma:
Basados en objetos Basados en clases Orientación a Objetos
Si la sintaxis y semántica de lenguaje soportan las características de objetos que h
emos mencionado. Si un lenguaje esta basado en objetos y además soporta cla
ses, se dice que esta basado en clases. Si un lenguaje de programación soporta obj
etos, clases y además permite la jerarquía de dichas clases, entonces se dice que es
un lenguaje de programación orientado a objetos.
Esta clasificación es la que prevalece actualmente, en está se establece claramente
que para que un lenguaje de programación sea considerado orientado a objetos éste de
be soportar la creación de clases y la herencia.
Java es actualmente uno de los lenguajes de programación, que cumple perfectamente
con los requisitos de la orientación a objetos, Delphi, Simula, Smalltalk, son ta
mbién considerados lenguajes orientados a objetos.
Java puede ser visto como el resultado de una mezcla de C++ y Smalltalk, tiene l
a sintaxis de C++, lo que lo hace relativamente fácil de aprender, si es que se es
tá familiarizado con C++, una de las características que lo hace más robusto que C++,
es que no tiene apuntadores, que son causa común de errores en el desarrollo de ap
licaciones con este lenguaje. Como en el caso de Smalltalk , Java tiene recolecc
ión de basura, una capacidad que libera al programador de definir funciones de alo
jamiento y desalojamiento de estructuras en memoria. Más adelante hablaremos de Ja
va dentro del contexto de orientación a objetos con más detalle.

5. Características Adicionales de los Lenguajes Orientados a Objetos.


Además de las características que mencionamos anteriormente como esenciales de los l
enguajes de programación orientados a objetos , es deseable que éstos cumplan también
con las siguientes:
? Tipificación fuerte. Esto es, que durante la fase de diseño e implementación s
e declare que tipo de datos soportara cada variable.
? Manejo de excepciones. Dentro de la misma definición del lenguaje se deberá
establecer la forma de detectar y manipular excepciones que puedan surgir durant
e la ejecución de un programa.
? Paso de mensajes. Es conveniente que el lenguaje soporte paso de mensaje
s entre módulos de manera bidireccional.
? Generalidad. Se refiere principalmente a que las clases se definan lo más
generalizadas posible para que sean fácilmente reusables. Para generar este tipo d
e clases, normalmente se definen parámetros formales que son instanciados por paráme
tros reales.
? Multitarea. Es conveniente que el lenguaje permita la creación de procesos
que se ejecuten de forma simultanea independientemente del sistema operativo.
? Persistencia. Los objetos deben poder permanecer, si así se desea, después d
ela ejecución de un programa.
? Datos compartidos. Los objetos pueden necesitar referirse a la misma loc
alidad de memoria (memoria compartida) o bien comunicarse mediante mensajes.

6. Ventajas de la Tecnología Orientada a Objetos.


? Flexibilidad. Si partimos del hecho que mediante la definición de clases e
stablecemos módulos independientes, a partir de los cuales podemos definir nuevas
clases, entonces podemos pensar en estos módulos como bloques con los cuales podem
os construir diferentes programas.
? Reusabilidad. Una vez que hemos definido a la entidad persona para utili
zarla en una aplicación de negocios, por mencionar un ejemplo, y deseamos construi
r a continuación una aplicación, digamos de deportes, en donde requerimos definir a
la misma entidad persona, no es deseable volver a escribir la definición para la e
ntidad persona. Por medio de la reusabilidad podemos utilizar una clase definida
previamente en las aplicaciones que nos sea conveniente. Es claro que la flexib
ilidad con la que se definió la clase va a ser fundamental para su reutilización.
? Mantenibilidad. Las clases que conforman una aplicación, vistas como módulos
independientes entre sí, son fáciles de mantener sin afectar a los demás componentes
de la aplicación.
? Extensibilidad. Gracias a la modularidad y a la herencia una aplicación di
señada bajo el paradigma de la orientación a objetos puede ser fácilmente extensible p
ara cubrir necesidades de crecimiento de la aplicación.

7. Desventajas de la Tecnología Orientada a Objetos.


A pesar de que las ventajas de la programación orientada a objetos superan a las l
imitaciones de la misma, podemos encontrar algunas características no deseables en
ésta.
Limitaciones para el programador. No obstante que la tecnología orientada a objeto
s no es nueva, un gran porcentaje de programadores no están familiarizados con los
conceptos de dicha tecnología. En otras palabras, la lógica de la programación estruc
turada sigue siendo predominante en la mayoría de los desarrolladores de software,
después de haber revisado de forma breve los principios de la programación orientad
a a objetos, nos es claro que en ésta se requiere una lógica de pensamiento totalmen
te diferente a la lógica comúnmente utilizada para la programación estructurada.
Tamaño excesivo en las aplicaciones resultantes. La gran mayoría de los equipos de c
omputo cuentan con capacidades tanto de almacenamiento como de memoria lo sufici
entemente buena como para ejecutar la mayoría de las aplicaciones que puedan desar
rollarse con la tecnología orientada a objetos, sin embargo existen casos en los q
ue lo anterior no se cumple. Una de las desventajas de la programación orientada a
objetos es que cuando se heredan clases a partir de clases existentes se hereda
n de forma implícita todos los miembros de dicha clase aun cuando no todos se nece
siten, lo que produce aplicaciones muy grandes que no siempre encajan en los sis
temas con los que se disponga.
Velocidad de ejecución. Esto tiene que ver, en cierto modo, con el punto anterior,
una aplicación innecesariamente pesada en muchas ocasiones es más lenta de ejecutar
que una aplicación conformada únicamente por los módulos necesarios.

Resumen.
A manera de conclusión podemos decir que la tecnología orientada a objetos nos permi
te diseñar e implementar sistemas bajo un paradigma de programación en el cual, por
medio de la abstracción definimos a las clases o entidades de software a partir de
entidades del mundo real. De dichas entidades instanciaremos objetos de softwar
e que se corresponderán con los objetos reales que representan. Esto nos permite e
nfocarnos más en la solución del problema que en la implantación de dicha solución.
AP29-Objeto
Un objeto es una abstracción de cosas del mundo real, tales que:
Todas las cosas del mundo real dentro de un conjunto denominadas instancias- tien
en las mismas características.
Todas las instancias siguen las mismas reglas
Cada objeto consta de:
Estado (propiedades)
Operaciones o comportamiento (métodos invocados por mensajes)
La idea fundamental en los lenguajes orientados a objetos es combinar en una sol
a unidad datos y funciones, dicha unidad es la que representa un objeto. Las fun
ciones dentro de los objetos deben ser el único medio permitido para acceder a los
datos que se ocultarán, cuidando así, la posibilidad de acceder a los datos directa
mente o evitar que estos se puedan modificar accidentalmente por entes externos
al objeto.
Un objeto es una entidad que contiene los atributos que describen el estado de u
n objeto y las acciones que se asocian con el objeto del mundo real, designado p
or un nombre o identificador.
Atributos: datos o variables que caracterizan el estado de un objeto.
Métodos: Procedimientos o acciones que cambian el estado de un objeto.
Los objetos se consideran tipos abstractos de datos, (tipos que encapsulan sus d
atos y funciones, que operan sobre esos datos). Así mismo la propiedad que permite
incluir en una sola entidad (objeto) la información (datos o atributos) y las ope
raciones (métodos o funciones) se conoce como encapsulación.

Ejemplos:
Objeto Estado Operaciones
Número racional valor actual sumar, multiplicar, asig
nar etc.
Vehículo velocidad, posición, precio acelerar, frenar, para
Conjunto elementos añadir, quitar, vi
sualizar
Avión fabricante, modelo, matricula aterrizar, despegar, nav
egar
Los objetos tiene una interfaz pública y una representación privada que permite ocul
tar la información que se desee del exterior.
La encapsulación y la ocultación de datos son términos importantes en la descripción de
los lenguajes orientados a objetos.

Identificación de los Objetos


El primer problema que se nos plantea al analizar un problema que se desea imple
mentar mediante un programa orientado a objetos es identificar los objetos; es d
ecir, ¿que cosas son objetos?, ¿cómo deducimos los objetos dentro del dominio de la de
finición del problema?
La identificación de objetos se obtiene examinando la descripción del problema y loc
alizando los nombres. Normalmente estos nombres y sus sinónimos se suelen escribir
en una tabla de la que luego deduciremos los objetos reales.
Los objetos pueden caer dentro de las siguientes categorías:
Cosas tangibles
Roles o papeles
Organizaciones
Incidentes
Interacciones
Especificaciones
Lugares
Una vez identificados los objetos, será preciso identificar los atributos y las op
eraciones que actuarán sobre ellos.
Los atributos describen las características individuales que poseen todos los obje
tos.
Las operaciones cambian al objeto -su comportamiento- de alguna manera, es decir
, cambian valores de uno o más atributos contenidos en los objetos. Aunque existen
gran numero de operaciones que se pueden realizar sobre un objeto, generalmente
se dividen en tres grandes grupos:
Operaciones que manipulan datos (añadir, borrar, cambiar formato, etc)
Operaciones que realizan cálculos o procesos.
Operaciones de monitoreo (sobre un objeto).
La identificación de las operaciones se realiza haciendo un nuevo análisis gramatica
l de la descripción del problema, buscando y aislando verbos del texto.
Duración de los Objetos
Los objetos son entidades que existen en el tiempo; por ello deben ser creados o
instanciados (normalmente por otros objetos). Esta operación se hace a través de op
eraciones especiales llamadas constructores. Esta operaciones pueden ejecutarse
implícitamente por el compilador o explícitamente por el programador.
La idea fundamental en los lenguajes orientados a objetos es combinar en una sol
a unidad datos y funciones que operan sobre esos datos. Tal unidad se denomina o
bjeto. Por consiguiente, dentro de los objetos residen los datos de los lenguaje
s de programación tradicionales , tales como números , arrays, cadenas y registros ,
así como funciones o subrutinas que operan sobre ellos.
Las funciones dentro de los objetos (funciones miembros en C++ , métodos en object
-Pascal y Smalltalk) son el ultimo medio de acceder a los datos privados de un o
bjeto. Si se desea leer un elemento de datos de un objeto se llama a la función mi
embro del objeto. Se lee el elemento y se devuelve el valor . No se puede accede
r a los datos diferentes. Los datos están ocultos , y eso se asegura que no se pue
de modificar accidentalmente por funciones externas al objeto.
Los datos y las funciones (procedimientos en Object-Pascal)asociados se dicen qu
e están encapsulados en una unidad entidad o módulo. La encapsulación de datos y ocult
ación de datos son términos importantes en la descripción de lenguajes orientados a ob
jetos.
Si se desea modificar los datos de un objeto, se conoce exactamente cuáles son las
funciones que interactúan con el mismo. Ninguna otra función puede acceder a los da
tos. Esta característica simplifica la escritura , depuración y mantenimiento del pr
ograma.
Ejemplos de objetos:
¿ Qué clase de cosas pueden ser objetos en un programa orientado a objetos? La respu
esta está sólo limitada a su imaginación. Algunos ejemplos típicos pueden ser:
Objetos físicos:
Aviones en un sistema de control de trafico aéreo.
Automóviles en un sistema de control de trafico aéreo.
Casa.
Elementos de interfaces gráficas de usuario:
Ventanas.
Menús.
Objetos gráficos (cuadrados, triángulos, etc.).
Teclado.
Cuadros de diálogo.
Ratón.
Animales:
Animales vertebrados.
Animales invertebrados.
Pescados.
Tipos de datos definidos por el usuario:
Datos complejos.
Puntos de un sistema de coordenadas.
Alimentos:
Carnes.
Frutas.
Pescados.
Verduras.
Paste.
Un objeto es una entidad que contiene los atributos que describen el estado de u
n objeto del mundo real y las acciones que se asocian con el objeto del mundo re
al . se designan por un nombre o identificador del objeto.
Dentro del contexto de un lenguaje orientado a objetos (LOO), un objeto encapsul
a datos y los procedimientos/funciones (métodos) que manejan esos datos. La notación
gráfica de un objeto varia de una metodología a otras.

AP30-Clases
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 much
os objetos de la misma clase. Dicho de otra manera 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. Cada vez que se constr
uye un objeto a partir de una clase estamos creando lo que se llama una instanci
a de esa clase. Por lo tanto, los objetos no son más que instancias de una clase.
Una instancia es una variable de tipo objeto.
Cada vez que se construye un objeto de una clase se crea una instancia de esa cl
ase. Los objetos se crean cuando un mensaje de creación es recibido por la clase b
ase.
Una clase es una colección de objetos similares.
Un conjunto de características que permite definir una clase incluyen las siguient
es:
? Una clase es un nivel de abstracción alto
? Una clase es una colección de objetos
? Un objeto es una instancia especifica de una clase
? Una clase tiene una jerarquía implicada
Una clase es una colección de objetos que comparten las mismas características, método
s y datos. Todos los objetos de una clase tienen el mismo formato y comportamien
to; son diferentes únicamente en los datos que contienen sus variables.
Un sistema orientado a objetos es una descripción de estos objetos, su estructura
y comportamiento. La estructura de un objeto se describe por los datos miembro.
El comportamiento se describe por las funciones miembro. La tarea de programación
consiste en identificar entidades y conceptos en una aplicación y modelarla utiliz
ando clases.
La importancia de la creación de clases y objetos es que soportan una descomposición
orientada a objetos en entidades del mundo real. La cuestión practica es ¿cómo crear
clases y objetos en las diferentes fases de desarrollo? El punto inicial es segu
ir un conjunto de directrices para clasificar los requisitos del sistema en cier
tas categorías de clases.
Las categorías de clases que se pueden utilizar como resultado del estudio del análi
sis de requisitos de un sistema son:
Clases de interfaz de dispositivos
Clases de interfaz de usuario
Clases externas del sistema
Clases de roles
Clases computacionales
Clases de abstracción de datos
Este conjunto de categorías de clases es el punto de arranque para encontrar clase
s y objetos del mundo real que se pueden utilizar en el análisis y diseño de un sist
ema.
Las clases identificadas en el AOO y DOO tendrán poco valor, a menos que incluyan
interfaces apropiados que permitan a los clientes acceder a las clases; por esta
razón, una actividad importante es la identificación de operaciones adecuadas a cad
a clase. Estas operaciones representaran abstracciones procedimentales de una únic
a entidad funcional; por ejemplo: calcular distancia, calcular intereses, compro
bar UID, obtener edad etc.
Las funciones miembro que proporcionan el conjunto de operaciones que un usuario
puede realizar sobre el tipo clase. Este conjunto se conoce como interfaz público
de la clase. El éxito o fallo de un clase depende de la compleción y eficiencia de
este conjunto de funciones miembro. Las operaciones necesarias para manipular in
stancias de la clase se pueden clasificar en las siguientes categorías:
Operaciones gerente
Operaciones implementadoras
Operaciones de ayuda
Operaciones de acceso
finalmente la accesibilidad de un miembro de la clase depende de la posición del s
egmento de código en que se encuentra. Los miembros de una clase pueden ser públicos
, privados o protegidos.
Miembros privados. Son accesibles sólo por las funciones miembro de la clase. Ningú
otro acceso esta permitido. Los miembros privados ocultan las estructuras de da
tos y los procedimientos internos de un objeto.
Miembros públicos. Son accesibles desde cualquier parte del programa completo. La
colección de miembros públicos forman el interfaz externo a través del cual se utiliza
un objeto.
Miembros protegidos. Son accesibles por las funciones miembro de la clase y tamb
ién por las funciones miembro de las clases derivadas de ella.
Constructores
Son unos métodos especiales que se ejecutan automáticamente al crear un objeto de la
clase. En su declaración no se especifica el tipo de dato que devuelven, y poseen
el mismo nombre que la clase a la que pertenecen. Al igual que otros métodos, pue
de haber varios constructores sobrecargados, aunque no pueden existir constructo
res virtuales.
Como característica especial a la hora de implementar un constructor, justo después
de la declaración de los parámetros, se encuentra lo que se llama "lista de iniciali
zadores". Su objetivo es llamar a los constructores de los atributos que conform
an el objeto a construir.
Cabe destacar que no es necesario declarar un constructor al igual que un destru
ctor, pues el compilador lo puede hacer, aunque no es la mejor forma de programa
r.
Destructores
Los destructores son funciones miembro especiales llamadas automáticamente en la e
jecución del programa, y por tanto no tienen por qué ser llamadas explícitamente por e
l programador. Su cometido es liberar los recursos computacionales que el objeto
de dicha clase haya adquirido en tiempo de ejecución al expirar este.
Los destructores son invocados automáticamente al alcanzar el flujo del programa e
l fin del ámbito en el que está declarado el objeto.

Obtenido de: http://es.wikipedia.org/wiki/C%2B%2B - El_Concepto_de_Clase

AP31-Clases y Objetos
Un objeto es un simple elemento, no importa lo complejo que pueda ser. Una clase
, por el contrario, describe una familia de elementos similares. En la práctica, u
na clase es como un esquema o plantilla que se utiliza para definir o crear obje
tos.
A partir de una clase se puede definir un número determinado de objetos. Cada uno
de estos objetos generalmente tendrá un estado particular propio (una pluma puede
estar llena, otra puede estar medio llena y otra totalmente vacía) y otras caracte
rísticas (como su color), aunque compartan algunas operaciones comunes (como <<esc
ribir>> o <<llenar su deposito de tinta>>).
Los objetos tienen las siguientes características:
Se agrupan en tipos llamadas clases.
Tienen datos internos que definen su estado actual.
Soportan ocultación de datos.
Pueden heredar propiedades de otros objetos.
Pueden comunicarse con otros objetos pasando mensajes.
Tiene métodos que definen su comportamiento.

Con frecuencia los términos clases y objetos se utilizan con frecuencia uno por ot
ro, es decir, se intercambian entre sí, existe una gran diferencia entre ellos: la
clase es el tipo de dato, mientras que el objeto es la instancia del tipo de da
to. Es la misma diferencia que existe en otros lenguajes de programación entre una
tipo de dato y una variable.
En C++ existen otras características que muestran la diferencia: el concepto de cl
ase es estático, ya que su definición se escribe en el código del programa. El concept
o de objeto, en su lugar, es dinámico, ya que solo existe en tiempo de ejecución y r
epresenta una posición en la memoria de la computadora.
Los objetos y las clases se comparan con las variables y los tipos de datos en l
enguajes de programación convencional. Una variable es una instancia de un tipo, c
omo un objeto es una instancia de una clase, sin embargo, una clase es mas expre
siva que un tipo. Una clase describe un grupo similar de objetos y encapsula el
estado de un objeto: las estructuras de datos y las funciones que manipulan esas
estructuras.

AP32-Herencia
La herencia en C++ es un mecanismo de abstracción creado para poder facilitar y me
jorar el diseño de las clases de un programa. Con ella se pueden crear nuevas clas
es a partir de clases ya hechas, siempre y cuando tengan un tipo de relación espec
ial.
En la herencia, las clases derivadas "heredan" los datos y las funciones miembro
de las clases base, pudiendo las clases derivadas redefinir estos comportamient
os (polimorfismo) y añadir comportamientos nuevos propios de las clases derivadas.
Para no romper el principio de encapsulamiento (ocultar datos cuyo conocimiento
no es necesario para el uso de las clases), se proporciona un nuevo modo de vis
ibilidad de los datos/funciones: "protected". Cualquier cosa que tenga visibilid
ad protected se comportará como pública en la clase Base y en las que componen la je
rarquía de herencia, y como privada en las clases que NO sean de la jerarquía de la
herencia.
Antes de utilizar la herencia, nos tenemos que hacer una pregunta, y si tiene se
ntido, podemos intentar usar esta jerarquía: Si la frase <claseB> ES-UN <claseA> t
iene sentido, entonces estamos ante un posible caso de herencia donde clase A se
rá la clase base y clase B la derivada.
Obtenido de: http://es.wikipedia.org/wiki/C%2B%2B - Herencia
AP33-Clases Abstractas
En C++ es posible definir clases abstractas. Una clase abstracta, o clase base a
bstracta (ABC), es una que está diseñada sólo como clase padre de las cuales se deben
derivar clases hijas. Una clase abstracta se usa para representar aquellas entid
ades o métodos que después se implementarán en las clases derivadas, pero la clase abs
tracta en sí no contiene ninguna implementación -- solamente representa los métodos qu
e se deben implementar. Por ello, no es posible instanciar una clase abstracta,
pero sí una clase concreta que implemente los métodos definidos en ella.
Las clases abstractas son útiles para definir interfaces, es decir, un conjunto de
métodos que definen el comportamiento de un módulo determinado. Estas definiciones
pueden utilizarse sin tener en cuenta la implementación que se hará de ellos.
Obtenido de: http://es.wikipedia.org/wiki/C%2B%2B - El_Concepto_de_Clase
AP34-Interfaces
En general, una interfaz es el punto, el área, o la superficie a lo largo de la cu
al dos cosas de naturaleza distinta convergen.
Por extensión, se denomina interfaz a cualquier medio que permita la interconexión d
e dos procesos diferenciados con un único propósito común.
En software, una interfaz de usuario es la parte del programa informático que perm
ite el flujo de información entre varias aplicaciones o entre el propio programa y
el usuario. Metafóricamente se entiende la Interfaz como conversación entre el usua
rio y el sistema (o entre el usuario y el diseñador): durante muchos años se vio a l
a interacción como un diálogo hombre-máquina (para trabajar con una interfaz alfanuméric
a era necesario conocer el "lenguaje" de la máquina). Desde una perspectiva semiótic
a, los usuarios no dialogan con el sistema sino con su creador por medio de un c
omplejo juego de estrategias (del diseñador y del usuario).
En sentido amplio, puede definirse interfaz como el conjunto de comandos y métodos
que permiten la intercomunicación del programa con cualquier otro programa o elem
ento interno o externo. De hecho, los periféricos son controlados por interfaces.
Para un mejor entendimiento de esta acepción pongamos un ejemplo. Si extrapoláramos
este concepto a la vida real, podríamos decir que el teclado de un teléfono sería una
interfaz de usuario, mientras que la clavija sería la interfaz que permite al teléfo
no comunicarse con la central telefónica.
? En software también se habla de interfaz gráfica de usuario, que es un método
para facilitar la interacción del usuario con el ordenador o la computadora a través
de la utilización de un conjunto de imágenes y objetos pictóricos (iconos, ventanas..
) además de texto.
? En electrónica, telecomunicaciones y hardware, una interfaz (electrónica) es
el puerto (circuito físico) a través del que se envían o reciben señales desde un siste
ma o subsistemas hacia otros. No existe un interfaz universal, sino que existen
diferentes estándares (Interfaz USB, interfaz SCSI, etc.) que establecen especific
aciones técnicas concretas (características comunes), con lo que la interconexión sólo e
s posible utilizando el mismo interfaz en origen y destino. En materia de hardwa
re encontramos términos que se refieren a las interfaces: puerto, puerto de datos,
bus, bus de datos, slot, slot de expansión. También, en materia de hardware, se con
sidera interfaz al medio mediante el cual un disco duro se comunica con los demás
componentes del ordenador; puede ser IDE, SCSI, USB o Firewire.
? En química, una interfaz es la superficie entre dos fases distintas en una
mezcla heterogénea.
En geología, una interfaz es una capa superficial o anómala que marca el punto de tr
ansición entre dos épocas o tipos geológicos
Además, la palabra interfaz también se utiliza metafóricamente en distintos contextos:
Interfaz como instrumento: desde esta perspectiva la interfaz es una "prótesis" o
"extensión" (McLuhan) de nuestro cuerpo. El ratón es un instrumento que extiende las
funciones de nuestra mano y las lleva a la pantalla bajo forma de cursor. Así, po
r ejemplo, la pantalla de una computadora es una interfaz entre el usuario y el
disco duro de la misma.
Interfaz como superficie: algunos consideran que la interfaz nos trasmite instru
cciones ("affordances") que nos informan sobre su uso. La superficie de un objet
o (real o virtual) nos habla por medio de sus formas, texturas, colores, etc.
Interfaz como espacio: desde esta perspectiva la interfaz es el lugar de la inte
racción, el espacio donde se desarrollan los intercambios.

Obtenido de: http://es.wikipedia.org/wiki/Herencia_m%C3%BAltiple


--------------------------------------------------------------------------------
--------------------
C# soporta interfaces que se utilizan para definir un protocolo de comportamient
o que se puede implementar por cualquier clase en cualquier parte de la jerarquía
de clases. En esencia una interfaz es un sistema o dispositivo que utiliza entid
ades no relacionadas que interactuan. Ejemplos: mando a distancia (control remo
to) para televisón, navegardor de internet, etc.
LAS INTERFACES EN C# TIENEN LA PROPIEDAD DE PODER OBTENER UN EFECTO SIMILAR A LA
HERENCIA MÚLTIPLE QUE SOPORTAN OTROS LENGUAJES COMO C++. Una interfaz se consider
a como una clase especial, que se puede compilar en un archivo independiente tal
como una clase ordinaria, donde se definen un conjunto de miembros sin especifi
car sus implementaciones
No se pueden crear instancias de una interfaz. En la mayoria de los casos sin em
bargo se puede utilizar una interfaz de un modo similar a como se utiliza una cl
ase abstracta. La interfaz sería como una clase abstracta pura que solo almacenar
a miembros abstractos y en la que hay que tener en cuenta que:
? Todos los miembros son implícitamente públicos (no hay que declaralos públicos
)
? Todos los métodos son implícitamente abstractos (se especifica el descriptor
del método y no hay que declararlos abstract)
En C# una clase solo puede heredar de una clase, pero puede implementar múltiples
interfaces. Por otra parte, una estructura, que no puede heredar de una clase, t
ambién puede implementar múltiples interfaces.

Fragmento obtenido de: C# Manual de Programación, Luis Joyanes Aguilar, McGrawHill


. Pág 191,192.

AP35-Herencia Múltiple
La herencia múltiple es un concepto proveniente de la programación orientada a objet
os.
Si una clase cualquiera tiene más de una superclase directa en la jerarquía de clase
s, se considera que existe herencia múltiple. En términos concretos, una instancia d
e objeto de la clase hija, poseerá todos los atributos y métodos de sus clases ances
tro.
Ejemplos de lenguajes que soportan herencia múltiple son C++, Smalltalk, Eiffel y
Object REXX.
EL POPULAR LENGUAJE DE PROGRAMACIÓN JAVA NO SOPORTA LA HERENCIA MÚLTIPLE, EN SU LUGA
R UTILIZA EL CONCEPTO DE INTERFACE.
Herencia múltiple
La herencia múltiple Una de las oportunidades que nos ofrece el lenguaje c++ es la
posibilidad de que un objeto tenga la herencia de mas de una clase; ESTA VENTAJ
A FUE CONSIDERADA POR LOS DESARROLLADORES DE JAVA COMO UNA PEGA Y LA QUITARON, e
incluso hay desarrolladores de c++ que prefieren evitar este tipo de herencia y
a que puede complicar mucho la depuración de programas.

AP36-Funciones Virtuales
En programación orientada a objetos (POO), una función virtual o método virtual es una
función cuyo comportamiento, al ser declarado "virtual", es determinado por la de
finición de una función con la misma cabecera en alguna de sus subclases. Este conce
pto es una parte muy importante del polimorfismo en la POO.
El concepto de función virtual soluciona los siguientes problemas:
En POO, cuando una clase derivada hereda de una clase base, un objeto de la clas
e derivada puede ser referido (o coercionado) tanto como del tipo de la clase ba
se como del tipo de la clase derivada. Si hay funciones de la clase base redefin
idas por la clase derivada, aparece un problema cuando un objeto derivado ha sid
o cohercionado como del tipo de la clase base.
Cuando un objeto derivado es referido como del tipo de la base, el comportamient
o de la llamada a la función deseado es ambiguo.
Distinguir entre virtual y no virtual sirve para resolver este problema. Si la f
unción en cuestión es designada "virtual", se llamará a la función de la clase derivada
(si existe). Si no es virtual, se llamará a la función de la clase base.

Clases abstractas y funciones virtuales puras


Una función virtual pura o método virtual puro es una función virtual que necesita ser
implementada por una clase derivada que no sea abstracta. Las clases que contie
nen métodos virtuales puros son denominadas "abstractas". Éstas no pueden ser instan
ciadas directamente, y una subclase de una clase abstracta sólo puede ser instanci
ada directamente si todos los métodos virtuales puros han sido implementados por e
sa clase o una clase padre.
Los métodos virtuales puros normalmente tienen una declaración (cabecera) pero no ti
enen definición (implementación). Como ejemplo, una clase base abstracta como "Simbo
loMatematico" puede ofrecer una función virtual pura como hazOperacion, y las clas
es derivadas "Suma" y "Resta" pueden implementar hazOperacion para ofercer imple
mentaciones concretas. La implementación de hazOperacion no tendría sentido en la cl
ase "SimboloMatematico" porque "SimboloMatematico" es un concepto abstracto cuyo
comportamiento es definido solamente por cada tipo (subclase) de "SimboloMatema
tico" dado.
De forma similar, una subclase dada de "SimboloMatematico" no sería completa sin u
na implementación de hazOperacion. Aunque los métodos virtuales puros normalmente no
tienen implementación en la clase que los declara, en C++ permite hacer esto, ofr
eciendo un comportamiento por omisión en el que la clase derivada puede delegar si
es apropiado.
Las funciones virtuales puras también son utilizadas donde las declaraciones de méto
dos se utilizan para definir una interfaz para la que las clases derivadas prove
erán todas las implementaciones. Una clase abstracta sirviendo como interfaz conti
ene sólo funciones virtuales puras, y ningún miembro de datos (variables, constantes
, etc.) ni métodos ordinarios.
El uso de clases puramente abstractas como interfaces funciona en C++ ya que éste
soporta herencia múltiple. Debido a que muchos lenguajes orientados a objetos no s
oportan herencia múltiple, normalmente ofrecen un mecanismo por separado para hace
r interfaces. Esto es así por ejemplo en Java.

Obtenido de: http://es.wikipedia.org/wiki/Funci%C3%B3n_virtual

AP29-Objeto
Un objeto es una abstracción de cosas del mundo real, tales que:
Todas las cosas del mundo real dentro de un conjunto denominadas instancias- tien
en las mismas características.
Todas las instancias siguen las mismas reglas
Cada objeto consta de:
Estado (propiedades)
Operaciones o comportamiento (métodos invocados por mensajes)
La idea fundamental en los lenguajes orientados a objetos es combinar en una sol
a unidad datos y funciones, dicha unidad es la que representa un objeto. Las fun
ciones dentro de los objetos deben ser el único medio permitido para acceder a los
datos que se ocultarán, cuidando así, la posibilidad de acceder a los datos directa
mente o evitar que estos se puedan modificar accidentalmente por entes externos
al objeto.
Un objeto es una entidad que contiene los atributos que describen el estado de u
n objeto y las acciones que se asocian con el objeto del mundo real, designado p
or un nombre o identificador.
Atributos: datos o variables que caracterizan el estado de un objeto.
Métodos: Procedimientos o acciones que cambian el estado de un objeto.
Los objetos se consideran tipos abstractos de datos, (tipos que encapsulan sus d
atos y funciones, que operan sobre esos datos). Así mismo la propiedad que permite
incluir en una sola entidad (objeto) la información (datos o atributos) y las ope
raciones (métodos o funciones) se conoce como encapsulación.

Ejemplos:
Objeto Estado Operaciones
Número racional valor actual sumar, multiplicar, asig
nar etc.
Vehículo velocidad, posición, precio acelerar, frenar, para
Conjunto elementos añadir, quitar, vi
sualizar
Avión fabricante, modelo, matricula aterrizar, despegar, nav
egar
Los objetos tiene una interfaz pública y una representación privada que permite ocul
tar la información que se desee del exterior.
La encapsulación y la ocultación de datos son términos importantes en la descripción de
los lenguajes orientados a objetos.

Identificación de los Objetos


El primer problema que se nos plantea al analizar un problema que se desea imple
mentar mediante un programa orientado a objetos es identificar los objetos; es d
ecir, ¿que cosas son objetos?, ¿cómo deducimos los objetos dentro del dominio de la de
finición del problema?
La identificación de objetos se obtiene examinando la descripción del problema y loc
alizando los nombres. Normalmente estos nombres y sus sinónimos se suelen escribir
en una tabla de la que luego deduciremos los objetos reales.
Los objetos pueden caer dentro de las siguientes categorías:
Cosas tangibles
Roles o papeles
Organizaciones
Incidentes
Interacciones
Especificaciones
Lugares
Una vez identificados los objetos, será preciso identificar los atributos y las op
eraciones que actuarán sobre ellos.
Los atributos describen las características individuales que poseen todos los obje
tos.
Las operaciones cambian al objeto -su comportamiento- de alguna manera, es decir
, cambian valores de uno o más atributos contenidos en los objetos. Aunque existen
gran numero de operaciones que se pueden realizar sobre un objeto, generalmente
se dividen en tres grandes grupos:
Operaciones que manipulan datos (añadir, borrar, cambiar formato, etc)
Operaciones que realizan cálculos o procesos.
Operaciones de monitoreo (sobre un objeto).
La identificación de las operaciones se realiza haciendo un nuevo análisis gramatica
l de la descripción del problema, buscando y aislando verbos del texto.
Duración de los Objetos
Los objetos son entidades que existen en el tiempo; por ello deben ser creados o
instanciados (normalmente por otros objetos). Esta operación se hace a través de op
eraciones especiales llamadas constructores. Esta operaciones pueden ejecutarse
implícitamente por el compilador o explícitamente por el programador.
La idea fundamental en los lenguajes orientados a objetos es combinar en una sol
a unidad datos y funciones que operan sobre esos datos. Tal unidad se denomina o
bjeto. Por consiguiente, dentro de los objetos residen los datos de los lenguaje
s de programación tradicionales , tales como números , arrays, cadenas y registros ,
así como funciones o subrutinas que operan sobre ellos.
Las funciones dentro de los objetos (funciones miembros en C++ , métodos en object
-Pascal y Smalltalk) son el ultimo medio de acceder a los datos privados de un o
bjeto. Si se desea leer un elemento de datos de un objeto se llama a la función mi
embro del objeto. Se lee el elemento y se devuelve el valor . No se puede accede
r a los datos diferentes. Los datos están ocultos , y eso se asegura que no se pue
de modificar accidentalmente por funciones externas al objeto.
Los datos y las funciones (procedimientos en Object-Pascal)asociados se dicen qu
e están encapsulados en una unidad entidad o módulo. La encapsulación de datos y ocult
ación de datos son términos importantes en la descripción de lenguajes orientados a ob
jetos.
Si se desea modificar los datos de un objeto, se conoce exactamente cuáles son las
funciones que interactúan con el mismo. Ninguna otra función puede acceder a los da
tos. Esta característica simplifica la escritura , depuración y mantenimiento del pr
ograma.
Ejemplos de objetos:
¿ Qué clase de cosas pueden ser objetos en un programa orientado a objetos? La respu
esta está sólo limitada a su imaginación. Algunos ejemplos típicos pueden ser:
Objetos físicos:
Aviones en un sistema de control de trafico aéreo.
Automóviles en un sistema de control de trafico aéreo.
Casa.
Elementos de interfaces gráficas de usuario:
Ventanas.
Menús.
Objetos gráficos (cuadrados, triángulos, etc.).
Teclado.
Cuadros de diálogo.
Ratón.
Animales:
Animales vertebrados.
Animales invertebrados.
Pescados.
Tipos de datos definidos por el usuario:
Datos complejos.
Puntos de un sistema de coordenadas.
Alimentos:
Carnes.
Frutas.
Pescados.
Verduras.
Paste.
Un objeto es una entidad que contiene los atributos que describen el estado de u
n objeto del mundo real y las acciones que se asocian con el objeto del mundo re
al . se designan por un nombre o identificador del objeto.
Dentro del contexto de un lenguaje orientado a objetos (LOO), un objeto encapsul
a datos y los procedimientos/funciones (métodos) que manejan esos datos. La notación
gráfica de un objeto varia de una metodología a otras.
AP30-Clases
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 much
os objetos de la misma clase. Dicho de otra manera 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. Cada vez que se constr
uye un objeto a partir de una clase estamos creando lo que se llama una instanci
a de esa clase. Por lo tanto, los objetos no son más que instancias de una clase.
Una instancia es una variable de tipo objeto.
Cada vez que se construye un objeto de una clase se crea una instancia de esa cl
ase. Los objetos se crean cuando un mensaje de creación es recibido por la clase b
ase.
Una clase es una colección de objetos similares.
Un conjunto de características que permite definir una clase incluyen las siguient
es:
? Una clase es un nivel de abstracción alto
? Una clase es una colección de objetos
? Un objeto es una instancia especifica de una clase
? Una clase tiene una jerarquía implicada
Una clase es una colección de objetos que comparten las mismas características, método
s y datos. Todos los objetos de una clase tienen el mismo formato y comportamien
to; son diferentes únicamente en los datos que contienen sus variables.
Un sistema orientado a objetos es una descripción de estos objetos, su estructura
y comportamiento. La estructura de un objeto se describe por los datos miembro.
El comportamiento se describe por las funciones miembro. La tarea de programación
consiste en identificar entidades y conceptos en una aplicación y modelarla utiliz
ando clases.
La importancia de la creación de clases y objetos es que soportan una descomposición
orientada a objetos en entidades del mundo real. La cuestión practica es ¿cómo crear
clases y objetos en las diferentes fases de desarrollo? El punto inicial es segu
ir un conjunto de directrices para clasificar los requisitos del sistema en cier
tas categorías de clases.
Las categorías de clases que se pueden utilizar como resultado del estudio del análi
sis de requisitos de un sistema son:
Clases de interfaz de dispositivos
Clases de interfaz de usuario
Clases externas del sistema
Clases de roles
Clases computacionales
Clases de abstracción de datos
Este conjunto de categorías de clases es el punto de arranque para encontrar clase
s y objetos del mundo real que se pueden utilizar en el análisis y diseño de un sist
ema.
Las clases identificadas en el AOO y DOO tendrán poco valor, a menos que incluyan
interfaces apropiados que permitan a los clientes acceder a las clases; por esta
razón, una actividad importante es la identificación de operaciones adecuadas a cad
a clase. Estas operaciones representaran abstracciones procedimentales de una únic
a entidad funcional; por ejemplo: calcular distancia, calcular intereses, compro
bar UID, obtener edad etc.
Las funciones miembro que proporcionan el conjunto de operaciones que un usuario
puede realizar sobre el tipo clase. Este conjunto se conoce como interfaz público
de la clase. El éxito o fallo de un clase depende de la compleción y eficiencia de
este conjunto de funciones miembro. Las operaciones necesarias para manipular in
stancias de la clase se pueden clasificar en las siguientes categorías:
Operaciones gerente
Operaciones implementadoras
Operaciones de ayuda
Operaciones de acceso
finalmente la accesibilidad de un miembro de la clase depende de la posición del s
egmento de código en que se encuentra. Los miembros de una clase pueden ser públicos
, privados o protegidos.
Miembros privados. Son accesibles sólo por las funciones miembro de la clase. Ningú
otro acceso esta permitido. Los miembros privados ocultan las estructuras de da
tos y los procedimientos internos de un objeto.
Miembros públicos. Son accesibles desde cualquier parte del programa completo. La
colección de miembros públicos forman el interfaz externo a través del cual se utiliza
un objeto.
Miembros protegidos. Son accesibles por las funciones miembro de la clase y tamb
ién por las funciones miembro de las clases derivadas de ella.
Constructores
Son unos métodos especiales que se ejecutan automáticamente al crear un objeto de la
clase. En su declaración no se especifica el tipo de dato que devuelven, y poseen
el mismo nombre que la clase a la que pertenecen. Al igual que otros métodos, pue
de haber varios constructores sobrecargados, aunque no pueden existir constructo
res virtuales.
Como característica especial a la hora de implementar un constructor, justo después
de la declaración de los parámetros, se encuentra lo que se llama "lista de iniciali
zadores". Su objetivo es llamar a los constructores de los atributos que conform
an el objeto a construir.
Cabe destacar que no es necesario declarar un constructor al igual que un destru
ctor, pues el compilador lo puede hacer, aunque no es la mejor forma de programa
r.
Destructores
Los destructores son funciones miembro especiales llamadas automáticamente en la e
jecución del programa, y por tanto no tienen por qué ser llamadas explícitamente por e
l programador. Su cometido es liberar los recursos computacionales que el objeto
de dicha clase haya adquirido en tiempo de ejecución al expirar este.
Los destructores son invocados automáticamente al alcanzar el flujo del programa e
l fin del ámbito en el que está declarado el objeto.

Obtenido de: http://es.wikipedia.org/wiki/C%2B%2B - El_Concepto_de_Clase


AP31-Clases y Objetos
Un objeto es un simple elemento, no importa lo complejo que pueda ser. Una clase
, por el contrario, describe una familia de elementos similares. En la práctica, u
na clase es como un esquema o plantilla que se utiliza para definir o crear obje
tos.
A partir de una clase se puede definir un número determinado de objetos. Cada uno
de estos objetos generalmente tendrá un estado particular propio (una pluma puede
estar llena, otra puede estar medio llena y otra totalmente vacía) y otras caracte
rísticas (como su color), aunque compartan algunas operaciones comunes (como <<esc
ribir>> o <<llenar su deposito de tinta>>).
Los objetos tienen las siguientes características:
Se agrupan en tipos llamadas clases.
Tienen datos internos que definen su estado actual.
Soportan ocultación de datos.
Pueden heredar propiedades de otros objetos.
Pueden comunicarse con otros objetos pasando mensajes.
Tiene métodos que definen su comportamiento.

Con frecuencia los términos clases y objetos se utilizan con frecuencia uno por ot
ro, es decir, se intercambian entre sí, existe una gran diferencia entre ellos: la
clase es el tipo de dato, mientras que el objeto es la instancia del tipo de da
to. Es la misma diferencia que existe en otros lenguajes de programación entre una
tipo de dato y una variable.
En C++ existen otras características que muestran la diferencia: el concepto de cl
ase es estático, ya que su definición se escribe en el código del programa. El concept
o de objeto, en su lugar, es dinámico, ya que solo existe en tiempo de ejecución y r
epresenta una posición en la memoria de la computadora.
Los objetos y las clases se comparan con las variables y los tipos de datos en l
enguajes de programación convencional. Una variable es una instancia de un tipo, c
omo un objeto es una instancia de una clase, sin embargo, una clase es mas expre
siva que un tipo. Una clase describe un grupo similar de objetos y encapsula el
estado de un objeto: las estructuras de datos y las funciones que manipulan esas
estructuras.

AP32-Herencia
La herencia en C++ es un mecanismo de abstracción creado para poder facilitar y me
jorar el diseño de las clases de un programa. Con ella se pueden crear nuevas clas
es a partir de clases ya hechas, siempre y cuando tengan un tipo de relación espec
ial.
En la herencia, las clases derivadas "heredan" los datos y las funciones miembro
de las clases base, pudiendo las clases derivadas redefinir estos comportamient
os (polimorfismo) y añadir comportamientos nuevos propios de las clases derivadas.
Para no romper el principio de encapsulamiento (ocultar datos cuyo conocimiento
no es necesario para el uso de las clases), se proporciona un nuevo modo de vis
ibilidad de los datos/funciones: "protected". Cualquier cosa que tenga visibilid
ad protected se comportará como pública en la clase Base y en las que componen la je
rarquía de herencia, y como privada en las clases que NO sean de la jerarquía de la
herencia.
Antes de utilizar la herencia, nos tenemos que hacer una pregunta, y si tiene se
ntido, podemos intentar usar esta jerarquía: Si la frase <claseB> ES-UN <claseA> t
iene sentido, entonces estamos ante un posible caso de herencia donde clase A se
rá la clase base y clase B la derivada.
Obtenido de: http://es.wikipedia.org/wiki/C%2B%2B - Herencia
AP33-Clases Abstractas
En C++ es posible definir clases abstractas. Una clase abstracta, o clase base a
bstracta (ABC), es una que está diseñada sólo como clase padre de las cuales se deben
derivar clases hijas. Una clase abstracta se usa para representar aquellas entid
ades o métodos que después se implementarán en las clases derivadas, pero la clase abs
tracta en sí no contiene ninguna implementación -- solamente representa los métodos qu
e se deben implementar. Por ello, no es posible instanciar una clase abstracta,
pero sí una clase concreta que implemente los métodos definidos en ella.
Las clases abstractas son útiles para definir interfaces, es decir, un conjunto de
métodos que definen el comportamiento de un módulo determinado. Estas definiciones
pueden utilizarse sin tener en cuenta la implementación que se hará de ellos.
Obtenido de: http://es.wikipedia.org/wiki/C%2B%2B - El_Concepto_de_Clase
AP34-Interfaces
En general, una interfaz es el punto, el área, o la superficie a lo largo de la cu
al dos cosas de naturaleza distinta convergen.
Por extensión, se denomina interfaz a cualquier medio que permita la interconexión d
e dos procesos diferenciados con un único propósito común.
En software, una interfaz de usuario es la parte del programa informático que perm
ite el flujo de información entre varias aplicaciones o entre el propio programa y
el usuario. Metafóricamente se entiende la Interfaz como conversación entre el usua
rio y el sistema (o entre el usuario y el diseñador): durante muchos años se vio a l
a interacción como un diálogo hombre-máquina (para trabajar con una interfaz alfanuméric
a era necesario conocer el "lenguaje" de la máquina). Desde una perspectiva semiótic
a, los usuarios no dialogan con el sistema sino con su creador por medio de un c
omplejo juego de estrategias (del diseñador y del usuario).
En sentido amplio, puede definirse interfaz como el conjunto de comandos y métodos
que permiten la intercomunicación del programa con cualquier otro programa o elem
ento interno o externo. De hecho, los periféricos son controlados por interfaces.
Para un mejor entendimiento de esta acepción pongamos un ejemplo. Si extrapoláramos
este concepto a la vida real, podríamos decir que el teclado de un teléfono sería una
interfaz de usuario, mientras que la clavija sería la interfaz que permite al teléfo
no comunicarse con la central telefónica.
? En software también se habla de interfaz gráfica de usuario, que es un método
para facilitar la interacción del usuario con el ordenador o la computadora a través
de la utilización de un conjunto de imágenes y objetos pictóricos (iconos, ventanas..
) además de texto.
? En electrónica, telecomunicaciones y hardware, una interfaz (electrónica) es
el puerto (circuito físico) a través del que se envían o reciben señales desde un siste
ma o subsistemas hacia otros. No existe un interfaz universal, sino que existen
diferentes estándares (Interfaz USB, interfaz SCSI, etc.) que establecen especific
aciones técnicas concretas (características comunes), con lo que la interconexión sólo e
s posible utilizando el mismo interfaz en origen y destino. En materia de hardwa
re encontramos términos que se refieren a las interfaces: puerto, puerto de datos,
bus, bus de datos, slot, slot de expansión. También, en materia de hardware, se con
sidera interfaz al medio mediante el cual un disco duro se comunica con los demás
componentes del ordenador; puede ser IDE, SCSI, USB o Firewire.
? En química, una interfaz es la superficie entre dos fases distintas en una
mezcla heterogénea.
En geología, una interfaz es una capa superficial o anómala que marca el punto de tr
ansición entre dos épocas o tipos geológicos
Además, la palabra interfaz también se utiliza metafóricamente en distintos contextos:
Interfaz como instrumento: desde esta perspectiva la interfaz es una "prótesis" o
"extensión" (McLuhan) de nuestro cuerpo. El ratón es un instrumento que extiende las
funciones de nuestra mano y las lleva a la pantalla bajo forma de cursor. Así, po
r ejemplo, la pantalla de una computadora es una interfaz entre el usuario y el
disco duro de la misma.
Interfaz como superficie: algunos consideran que la interfaz nos trasmite instru
cciones ("affordances") que nos informan sobre su uso. La superficie de un objet
o (real o virtual) nos habla por medio de sus formas, texturas, colores, etc.
Interfaz como espacio: desde esta perspectiva la interfaz es el lugar de la inte
racción, el espacio donde se desarrollan los intercambios.

Obtenido de: http://es.wikipedia.org/wiki/Herencia_m%C3%BAltiple


--------------------------------------------------------------------------------
--------------------
C# soporta interfaces que se utilizan para definir un protocolo de comportamient
o que se puede implementar por cualquier clase en cualquier parte de la jerarquía
de clases. En esencia una interfaz es un sistema o dispositivo que utiliza entid
ades no relacionadas que interactuan. Ejemplos: mando a distancia (control remo
to) para televisón, navegardor de internet, etc.
LAS INTERFACES EN C# TIENEN LA PROPIEDAD DE PODER OBTENER UN EFECTO SIMILAR A LA
HERENCIA MÚLTIPLE QUE SOPORTAN OTROS LENGUAJES COMO C++. Una interfaz se consider
a como una clase especial, que se puede compilar en un archivo independiente tal
como una clase ordinaria, donde se definen un conjunto de miembros sin especifi
car sus implementaciones
No se pueden crear instancias de una interfaz. En la mayoria de los casos sin em
bargo se puede utilizar una interfaz de un modo similar a como se utiliza una cl
ase abstracta. La interfaz sería como una clase abstracta pura que solo almacenar
a miembros abstractos y en la que hay que tener en cuenta que:
? Todos los miembros son implícitamente públicos (no hay que declaralos públicos
)
? Todos los métodos son implícitamente abstractos (se especifica el descriptor
del método y no hay que declararlos abstract)
En C# una clase solo puede heredar de una clase, pero puede implementar múltiples
interfaces. Por otra parte, una estructura, que no puede heredar de una clase, t
ambién puede implementar múltiples interfaces.

Fragmento obtenido de: C# Manual de Programación, Luis Joyanes Aguilar, McGrawHill


. Pág 191,192.

AP35-Herencia Múltiple
La herencia múltiple es un concepto proveniente de la programación orientada a objet
os.
Si una clase cualquiera tiene más de una superclase directa en la jerarquía de clase
s, se considera que existe herencia múltiple. En términos concretos, una instancia d
e objeto de la clase hija, poseerá todos los atributos y métodos de sus clases ances
tro.
Ejemplos de lenguajes que soportan herencia múltiple son C++, Smalltalk, Eiffel y
Object REXX.
EL POPULAR LENGUAJE DE PROGRAMACIÓN JAVA NO SOPORTA LA HERENCIA MÚLTIPLE, EN SU LUGA
R UTILIZA EL CONCEPTO DE INTERFACE.
Herencia múltiple
La herencia múltiple Una de las oportunidades que nos ofrece el lenguaje c++ es la
posibilidad de que un objeto tenga la herencia de mas de una clase; ESTA VENTAJ
A FUE CONSIDERADA POR LOS DESARROLLADORES DE JAVA COMO UNA PEGA Y LA QUITARON, e
incluso hay desarrolladores de c++ que prefieren evitar este tipo de herencia y
a que puede complicar mucho la depuración de programas.

AP36-Funciones Virtuales
En programación orientada a objetos (POO), una función virtual o método virtual es una
función cuyo comportamiento, al ser declarado "virtual", es determinado por la de
finición de una función con la misma cabecera en alguna de sus subclases. Este conce
pto es una parte muy importante del polimorfismo en la POO.
El concepto de función virtual soluciona los siguientes problemas:
En POO, cuando una clase derivada hereda de una clase base, un objeto de la clas
e derivada puede ser referido (o coercionado) tanto como del tipo de la clase ba
se como del tipo de la clase derivada. Si hay funciones de la clase base redefin
idas por la clase derivada, aparece un problema cuando un objeto derivado ha sid
o cohercionado como del tipo de la clase base.
Cuando un objeto derivado es referido como del tipo de la base, el comportamient
o de la llamada a la función deseado es ambiguo.
Distinguir entre virtual y no virtual sirve para resolver este problema. Si la f
unción en cuestión es designada "virtual", se llamará a la función de la clase derivada
(si existe). Si no es virtual, se llamará a la función de la clase base.

Clases abstractas y funciones virtuales puras


Una función virtual pura o método virtual puro es una función virtual que necesita ser
implementada por una clase derivada que no sea abstracta. Las clases que contie
nen métodos virtuales puros son denominadas "abstractas". Éstas no pueden ser instan
ciadas directamente, y una subclase de una clase abstracta sólo puede ser instanci
ada directamente si todos los métodos virtuales puros han sido implementados por e
sa clase o una clase padre.
Los métodos virtuales puros normalmente tienen una declaración (cabecera) pero no ti
enen definición (implementación). Como ejemplo, una clase base abstracta como "Simbo
loMatematico" puede ofrecer una función virtual pura como hazOperacion, y las clas
es derivadas "Suma" y "Resta" pueden implementar hazOperacion para ofercer imple
mentaciones concretas. La implementación de hazOperacion no tendría sentido en la cl
ase "SimboloMatematico" porque "SimboloMatematico" es un concepto abstracto cuyo
comportamiento es definido solamente por cada tipo (subclase) de "SimboloMatema
tico" dado.
De forma similar, una subclase dada de "SimboloMatematico" no sería completa sin u
na implementación de hazOperacion. Aunque los métodos virtuales puros normalmente no
tienen implementación en la clase que los declara, en C++ permite hacer esto, ofr
eciendo un comportamiento por omisión en el que la clase derivada puede delegar si
es apropiado.
Las funciones virtuales puras también son utilizadas donde las declaraciones de méto
dos se utilizan para definir una interfaz para la que las clases derivadas prove
erán todas las implementaciones. Una clase abstracta sirviendo como interfaz conti
ene sólo funciones virtuales puras, y ningún miembro de datos (variables, constantes
, etc.) ni métodos ordinarios.
El uso de clases puramente abstractas como interfaces funciona en C++ ya que éste
soporta herencia múltiple. Debido a que muchos lenguajes orientados a objetos no s
oportan herencia múltiple, normalmente ofrecen un mecanismo por separado para hace
r interfaces. Esto es así por ejemplo en Java.

Obtenido de: http://es.wikipedia.org/wiki/Funci%C3%B3n_virtual

You might also like