Monografias | Programación orientada a Objetos - (OOP, Object Oriented Programming)Programación orientada a Objetos - (OOP, Object Oriented Programming)Resumen: Diseño de aplicaciones y elección de entorno. Aplicaciones orientadas a objetos. Características de los lenguajes OOP. Panorámica de los lenguajes OOP. Bases de datos orientadas a objetos. Objetos y asociaciones. La relación de herencia. l término de Programación Orientada a Objetos indica más una forma de diseñoy
una metodología de desarrollo de software que un lenguaje de programación,ya que
en realidad se puede aplicar el Diseño Orientado a Objetos (En inglésabreviado
OOD, Object Oriented Design), a cualquier tipo de lenguaje deprogramación. El desarrollo de la OOP empieza a destacar durante la década de lo 80tomando
en cuenta la programación estructurada, a la que engloba y dotando alprogramador
de nuevos elementos para el análisis y desarrollo de software.
El propósito de este trabajo es explicar el diseño orientado a objeto y nouna
explicación de su programación, puesto que no nos alcanzaría toda la
currículapara hacerlo. Básicamente la OOP permite a los programadores escribir software, de formaque
esté organizado en la misma manera que el problema que trata de modelizar.Los
lenguajes de programación convencionales son poco más que una lista deacciones a
realizar sobre un conjunto de datos en una determinada secuencia. Sien algún
punto del programa modificamos la estructura de los datos o la acciónrealizada
sobre ellos, el programa cambia. La OOP aporta un enfoque nuevo, convirtiendo la estructura de datos en
elcentro sobre el que pivotan las operaciones. De esta forma, cualquier
modificaciónde la estructura de datos tiene efecto inmediato sobre las acciones
a realizarsobre ella, siendo esta una de la diferencias radicales respecto a la
programaciónestructurada. Para quienes no están familiarizados con la programación estructurada diréque
una de las bases de esta escuela de programación parte del diseño arriba– abajo.
En esta forma de diseño se descomponen los requerimientos delprograma paso a
paso, hasta llegar a un nivel que permite expresarlos medianteprocedimientos y
funciones. La OOP estructura los datos en objetos que puedenalmacenar, manipular
y combinar información. En resumen, la programación estructurada presta atención al conjunto
deacciones que manipulan el flujo de datos (desde la situación inicial a
lafinal), mientras que la programación orientada a objetos presta atención a
lainterrelación que existe entre los datos y las acciones a realizar con ellos. Muchos habrán oído comentarios sobre la incidencia de la OOP sobre
laprogramación convencional. Se ha llegado a decir que el cambio introducido
porla OOP es similar al producido por la aparición del ensamblador sobre el
códigode máquina. La OOP proporciona las siguientes ventajas sobre otros lenguajes
deprogramación Uniformidad. Ya que la representación de los objetos lleva implica
tantoel análisis como el diseño y la codificación de los mismos. Comprensión. Tanto los datos que componen los objetos, como
losprocedimientos que los manipulan, están agrupados en clases, que
secorresponden con las estructuras de información que el programa trata. Flexibilidad. Al tener relacionados los procedimientos que manipulan
losdatos con los datos a tratar, cualquier cambio que se realice sobre ellos
quedaráreflejado automáticamente en cualquier lugar donde estos datos aparezcan. Estabilidad. Dado que permite un tratamiento diferenciado de
aquellosobjetos que permanecen constantes en el tiempo sobre aquellos que
cambian confrecuencia permite aislar las partes del programa que permanecen
inalterables enel tiempo. Reusabilidad. La noción de objeto permite que programas que traten
lasmismas estructuras de información reutilicen las definiciones de
objetosempleadas en otros programas e incluso los procedimientos que los
manipulan. Deesta forma, el desarrollo de un programa puede llegar a ser una
simple combinaciónde objetos ya definidos donde estos están relacionados de una
maneraparticular. Uno de los puntos clave a remarcar en esta introducción es que la
programaciónorientada a objetos no sustituye a ninguna metodología ni lenguaje
deprogramación anterior. Todos los programas que se realizan según OOD se
puedenrealizar igualmente mediante programación estructurada. Su uso en la
actualidadse justifica porque el desarrollo de todas las nuevas herramientas
basadas en uninterface de usuario gráfico como Windows, OS/2, x-Windows, etc. Es
mucho mássencillo Características de los Objetos Identidad del Objeto La identidad expresa que aunque dos objetos sean exactamente iguales en
susatributos, son distintos entre sí. De esta forma incluso una serie de
Objetoscoches, recién fabricados son distintos los unos de los otros. La afirmación anterior, aunque parece obvia, tiene importancia
cuandodescendemos al nivel de programación. En este ámbito cada uno de los
objetostiene un controlador pro el cual se identifica. Este puede ser una
variable, unaestructura de datos, una cadena de caracteres, etc. El controlador
serádistinto para cada uno de los objeto, aunque las referencias a éstos
seanuniformes e independientes del contenido, permitiendo crear agrupaciones
deobjetos con el mismo tratamiento. Clasificación Con la clasificación comienza la verdadera programación orientada aobjetos.
Ellos nos obliga a una abstracción del concepto de objeto denominadaclase. Las clases permiten la agrupación de objetos que comparten las
mismaspropiedades y comportamiento. Si bien clase y objeto suelen usarse como
sinónimos,no lo son. El esfuerzo del programador ante una aplicación orientada a objetos secentra
en la identificación de las clases, sus atributos y operacionesasociadas Las propiedades de cada clase deben cumplir una serie de premisas Las propiedades deber ser significativas dentro del entorno de la
aplicaciónes decir, deben servir para identificar claramente y de una manera
única (yunivoca) a cada uno de los objetos El número de propiedades de un objeto debe ser el mínimo para realizartodas
las operaciones que requiera la aplicación. Definamos una clase rectángulo. Esta clase puede tener como atributos unpunto
(x,y), la anchura (a) y la longitud (l). Las operaciones a realizar son:mover,
agrandar, reducir, et. ¿Es posible realizarlas con las propiedades de laclase? Un análisis posterior nos indica que es posible la realización de
estasoperaciones con los atributos definidos. Pero si incluimos la operación
girar ,vemos que con las propiedades definidas para la clase esta operación no
sepuede realizar. Para incluir esta nueva operación debemos redefinir
laspropiedades del objeto, en este caso las coordenadas de los vértices. Encapsulación y ocultación de datos La capacidad de presentación de información dentro de un objeto se divideen
dos partes bien diferenciadas: Interna: La información que necesita el objeto para operar y que
esinnecesaria para los demás objetos de la aplicación. Estos atributos
sedenominada privados y tienen como marco de aplicación únicamente a
lasoperaciones asociadas al objeto. Externa La que necesitan el resto de los objetos para interactuar con
elobjeto que definimos . Estas propiedades se denominan públicas y corresponde
ala información que necesitan conocer los restantes objetos de la
aplicaciónrespecto del objeto definido para poder operar. Podemos imaginarla encapsulación como introducir el objeto dentro de unacaja
negra donde existen dos ranuras denominadas entrada y salida. Siintroducimos
datos por la entrada automáticamente obtendrá un resultado en lasalida. No
necesita conocer ningún detalle del funcionamiento interno de lacaja. El término encapsulación indica l capacidad que tienen los objetos
deconstruir una cápsula a su alrededor, ocultando la información que
contienen(aquélla que es necesaria para su funcionamiento interno, pero
innecesaria paralos demás objetos) a las otras clases que componen la
aplicación. Aunque a primera vista la encapsulación puede parecer superflua, tengamos
encuenta que existen muchas variables utilizadas de forma temporal: contadores
yvariables que contienen resultados intermedios, etc. D no ser por la
encapsulaciónestas variables ocuparían memoria y podrían interferir en el
funcionamientodel resto de los objetos. La encapsulación no es exclusiva de los lenguajes de programaciónorientados a
objetos. Aparece en los lenguajes basados en procedimientos(PASCAL, C, COBOL,
ETC) como una forma de proteger los datos que se manipulandentro de las
funciones. Los lenguajes OOP incorporan la posibilidad de encapsular también
lasestructuras de datos que sirven como base a las funciones. Aportan por tanto
unnivel superior en cuanto a protección de información. La encapsulación nos permite el uso de librerías de objetos para eldesarrollo
de nuestros programas. Recordemos que las librerías son definicionesde objetos
de propósito general que se incorporan a los programas. Al ser elobjeto
parcialmente independiente en su funcionamiento del programa en donde
estádefinido, ya que contiene y define todo lo que necesita para poder
funcionar, esfácil utilizarlo en los mas variados tipos de aplicaciones. Si
aseguramos ,depurando las propiedades y las operaciones dentro de la clase que
el objetofunción bien dentro de una aplicación, con una correcta encapsulación
elobjeto podrá funcionar en cualquier otra. Otra de las ventajas de la encapsulación es que , al definir el objeto
comouna caja negra con entradas y salida asociadas, en cualquier momento
podemoscambiar el contenido de las operaciones del objeto, de manera que no
afecte alfuncionamiento general del programa. La encapsulación está en el núcleo de dos grandes pilares de la
construcciónde sistemas; mantenibilidad y reusabilidad.
Mantenibilidad Cualidad que indica que un programa o sistema debe ser fácilmentemodificable.
Es decir que los cambios en las condiciones externas (como ladefinición de una
nueva variable) implicarán modificaciones pequeñas en elprograma / sistema. El
concepto de mantenibilidad implica que un programa, aligual que un ser vivo debe
ser capaz de adaptarse a un medio ambiente siemprecambiante. Reusabilidad Cualidad que nos indica que partes del programa ( en este caso objetos)pueden
ser reutilizados en la confección de otros programas. Ello implica quelos
objetos definidos en un programa pueden ser extraídos del mismo eimplantados en
otro sin tener que realizar modificaciones importantes en el códigodel objeto.
El objeto final es que el programador construya una librería deobjetos que le
permita realizar programas basándose en la técnica de cortar ypegar. Esta extrae
(corta) código de otras aplicaciones ya realizadas y lasimplementa (pega) en la
aplicación a realizar donde, tras algunos retoques, lanueva aplicación estará
lista para funcionar. Como podrá observar el conceptode reusabilidad, permite
reducir el tiempo de realización , ganando enclaridad, mantenibilidad y
productividad. La encapsulación de datos se muestra como una herramienta poderosa que
nospermite ganar en tiempo de desarrollo y claridad, con el único coste
adicionalde definir con precisión las entradas y salida de nuestras operaciones. Poliformismo El polimorfismo es una nueva característica aportada por la OOP.
Estapropiedad indica la posibilidad de definir varias operaciones con el
mismonombre, diferenciándolas únicamente en los parámetros de entrada.
Dependiendodel objeto que se introduzca como parámetro de entrada, se elegirá
automáticamentecual de las operaciones se va a realizar. Ya está habituado al operador <<suma>> que está presenteen todos los
lenguajes de programación. Sin embargo, los operadores <<sumade fracciones>>
y <<suma de números complejos>> noexisten en casi ningún lenguaje de
programación. Los lenguajes OOP permiten definir un operador <<suma>>tal que
reconozca que tipo de objeto se le está aplicando, a través deoperaciones de
objetos. Previamente deberá definir la fracción y el númerocomplejo como una
clase y la operación suma como una operación de una clase. Definiendo adecuadamente las operaciones suma de fracciones y
sumade números imaginarios, el operador suma devolverá, en el caso que
losoperandos sean fracciones, una fracción y , en el caso de los
númerosimaginarios, otros número imaginario. Es posible extender el concepto e incluso definir operaciones como suma
debases de datos
El operador suma de base de datos. Aunque a primera vista la expresión C=A B,
siendo A y B bases de datos, nos pudiera parecer una
extraordinariasimplificación, nos conduce a la pregunta: ¿Qué es la suma de una
base ddatos? Consideremos varias posibilidades: Introducción de registros: Lo que exige que A y B tengan la mismaestructura. Unión de campos: Aquellos campos que aparezcan en B pero no en A serán
añadidosa C ¿Alguna de estas dos opciones es verdaderamente una suma? Es decir ¿Cumplelas
propiedades conmutativa, asociativa, de elemento neutro, etc.? ¿Qué ocurresi
sumo dos bases de datos con estructuras distintas? Como puede observar, la definición de un operador sobre un tipo complejo
dedatos, intentando utilizar identificadores de operadores de datos simples,
puedetener resultados impredecibles. Una de las ventajas más importantes, sin entrar en la redefinición
deoperadores es permitir la realización de las clases que definen un programa
deforma totalmente independiente al programa donde se utilizan. Gracias a
laencapsulación y el polimorfismo, aunque se utilicen los mismos nombre con
lasoperaciones en dos clases distintas, el programa reconoce a que clase se
aplicadurante la ejecución. Como se podrá observar el polimorfismo y la encapsulación de datos
estáníntimamente ligados y nos permiten un mayor grado de mantenibilidad
yreusabilidad que los lenguajes tradicionales Esta ese precisamente una de
lascausas de la revolución que ha supuesto la introducción de los
lenguajesorientados a objetos dentro de la programación. Herencia La herencia es la última de las propiedades relativas a la OOP, Consiste enla
propagación de los atributos y las operaciones a través de distintassub-clases
definidas a partir de una clase común. Introduce, por tanto, una posibilidad de refinamiento sucesivo del conceptode
clase. Nos permite definir una clase principal y , a través de
sucesivasaproximaciones, cualquier característica de los objetos. A partir de
ahoradefiniremos como sub-clases todas aquellas clases obtenidas
medianterefinamiento de una (o varias) clases principales. La herencia nos permite crear estructuras jerárquicas de clases donde
esposible la creación de sub-clases que incluyan nuevas propiedades y
atributos.Estas sub-clases admiten la definición de nuevos atributos, así como
crear,modificar o inhabilitar propiedades. Para pensarlo de manera más fácil podemos abstraernos al siguiente ejemplo. Pensemos en los distintos sub-modelo s asociados a un modelo básico de
automóvil.A partir de este modelo básico, los fabricantes introducen distintas
características(aire acondicionado, ABS, distintas tapicerías , acabados, etc.)
que crean sub– clases. Todas estas sub-clases tienen en común la estructura
básica(chasis , dirección , etc.) u varían sólo en algunos de sus componentes. Asociemos a este tipo básico una clase cuyos atributos representen laspiezas
que componen el coche. Las sub-clases aportarán sus propios atributos(en el caso
de vehículos con aire acondicionado, todos aquellas piezas que locomponen),
permitiendo la definición de todos los posibles modelos.
Además, es posible que una sub-clase herede atributos y propiedades de másde
una clase. Este proceso se denomina herencia múltiple y lo veremos con
másdetalle en capítulos posteriores. La herencia es, sin duda alguna, una de las propiedades más importantes dela
OOP, ya que permite, a través de la definición de una clase básica, ir
añadiendopropiedades a medida que sean necesarias y, además, en el sub-conjunto
deobjetos que sea preciso. La herencia permite que los objetos pueden compartir datos y comportamientosa
través de las diferentes sub-clases, sin incurrir en redundancia. Másimportante
que el ahorro de código, es la claridad que aporta al identificarque las
distintas operaciones sobre los objetos son en realidad una misma cosa. Conclusión. Identidad, clasificación, polimorfismo y herencia caracterizan a loslenguajes
orientados a objetos. Cada uno de estos conceptos puede utilizarseaisladamente,
incluso aparecen en otras metodologías de programación, perojuntos se
complementan en una relación sinérgica. Los beneficios de laprogramación
orientada a objetos son más que los que pueden verse a simplevista. El énfasis
en las propiedades esenciales de un objeto, fuerza aldesarrollador a pensar
cuidadosamente que es un objeto y que es lo que hace conel resultado de que el
sistema es normalmente más preciso, general y robustoque si pusiéramos el
énfasis en los procedimientos y los datos por separado
Construcción de clases Tal como hemos definido con anterioridad, una clase de objeto describe a
ungrupo de objetos con similares: La abreviatura clase es utilizada en lugar de clase de objetos. Los
objetosdifieren en los valores asociados a sus atributos definidos dentro de la
clase.Cada objeto <<conoce>> cuál es su clase. La mayoría de loslenguajes
orientados a objetos pueden determinar a que clase pertenece un objetodurante la
ejecución del programa. A continuación expondremos una serie de pasos para definir una clase. Identificar los objetos. Para ello examine la aplicación e identifique las distintas estructuras
dedatos, algunos tips a tener en cuenta son los siguientes: Definir las operaciones Defina las operaciones a partir de los objetos, examinando las
distintasoperaciones asociadas a un conjunto de datos. Los atributos del objeto
se debendefinir de tal manera que éstos satisfagan todos los requerimientos de
cada unade las operaciones. A estas operaciones añada dos más: Crear y Destruir. Estas operaciones
nosservirán para inicializar y borrar el objeto dentro de la aplicación. A partir de la definición de las propiedades, un objeto siempre debe sercapaz
de responder a estas tres preguntas: ¿Qué soy ?, ¿Qué hago? ¿Quédejo ver al
resto del mundo? Algunas de las operaciones sólo se aplicarán a determinados
objetospertenecientes a las clases. Hemos visto que a través de la herencia
podemos<<especializar>> un sub conjunto de objetos creando una sub-clase. Únicamente aquellas operaciones que sean comunes a todos los objetos de
laclase deben incluirse dentro de las operaciones de la clase. El resto,
quecorresponden a las operaciones de sub-Grupos de objetos, se deben definir
dentrode la especializaciones de la clase. Definir los atributos de los objetos Una vez identificados los objetos, defina los atributos de la clase.
Unatributo es un valor almacenado en los objetos de la clase. Aplicaciones orientadas a objetos A lo largo de la historia de la programación, los lenguajes y las
metodologíashan pasado de una relativa simplicidad a una complejidad creciente.
Loslenguajes de programación orientados a objetos pretenden aportar simplicidad
ala tarea de programación de grandes aplicaciones. Cuando se crearon las primeras computadoras todavía no existían loslenguajes
de programación, tal como ahora los entendemos. El lenguajeensamblador puede
considerarse como el primer lenguaje de programaciónpropiamente dicho. Permitía
al usuario un diálogo más fluido con la máquinaa través de instrucciones que
tenían relación directa con el conjunto deoperaciones que la máquina podía
realizar. A partir de este momento empezó la evolución de los lenguajes de
programación._cada uno tenía su entorno definido y aunque en realidad todos los
lenguajesson polivalentes (en teoría, con cualquiera de ellos se puede
desarrollarcualquier programa de gestión o científico). Pronto apareció la
especializaciónfuncional. Así, COBOL (Common Business Orientated Language) se
introdujo comolenguaje mainframe para el diseño de aplicaciones de gestión.;
FORTRAN(Formula Translator) para el diseño de aplicaciones científicas; APL
(AProgramming Language) para el cálculo matemático, etc. A medida que el software tomaba importancia, aparecieron los
primerosproblemas relacionados con la programación. Al tiempo que aumenta el
volumen deun programa, disminuye el control del mismo por parte del programador
y lacapacidad de este de dar mantenimiento. En un intento de solucionar estos problemas aparecen las metodologías
deprogramación. Una metodología es un conjunto de reglas destinadas asimplificar
las tareas de diseño, estimación de costes, desarrollo ymantenimiento de un
sistema informático. A menudo se ven acompañadas con unasherramientas (CASE:
Computer Aided Software Engeneering) que permiten laelaboración estructurada y
documentada de los sistemas informáticos. DISEÑO DE APLICACIONES Y ELECCIÓN DEENTORNO. En entorno de programación implica tanto el lenguaje de programación comoal
empleo de una determinada metodología. Los lenguajes de programación no se producen por generación espontánea yse
ven influidos en gran manera por la forma en la que los profesionales piensanque
se debe programar. De esta manera se crea un conjunto de reglas parasimplificar
la tarea de programación. Generalizadas y codificadas, seconvierten en
<<principios>> de los que surgen los lenguajes deprogramación en un afán por
darles soporte. Estos <<principios>> son modelos que proporcionan técnicas que ,a su vez,
deben aplicarse en el diseño e implementación de los programas.Estas técnicas
nos indican la forma de resolver los distintos problemas quesurgen a la hora de
programar. Decimos que un lenguaje de programación <<soporta>> un conjuntode
<<principios>> si el lenguaje simplifica la aplicación de estastécnicas. A estos
<<principios>> se les denomina metodologías deprogramación. Las metodologías de programación son modelos sobre como diseñar eimplementar
los programas. Diferentes modelos tienen como resultado diferentes técnicas.Que
cada técnica sea distinta no implica que una sea la verdadera y que las
demásfalsas. Por el contrario, las metodologías se complementan entre sí. Lo
quetodas las metodologías tienen en común es la premisa de que hay que partir
deabstracciones que corresponden a elementos del problema a resolver, y que
laimplementación de la solución se debe realizar mediante un conjunto de
módulospreferiblemente reutilizables. Las metodologías orientadas a objetos se centran en las estructuras de
datosque sin embargo se relegan a un segundo plano en los modelos procedurales.
Labase de esta metodología es que una estructura de datos debe contener
lasoperaciones que los modifican. La técnica que se utiliza para obtener
esta<<abstracción de datos>> es la encapsulación de los mismos en unaestructura
conocida como clase. El accesos a los datos contenidos en la clase se realiza mediante
lasoperaciones que la propia clase define. Por tanto, la metodología orientada
aobjetos complementa el punto de vista procedural de operaciones realizadas
sobreun flujo de datos, al asociar a cada dato el conjunto de operaciones que
lomodifican. Como podrá ver, ambos enfoques son complementarios. Para ilustrar las diferencias entre las aproximaciones orientadas
aprocedimientos y las orientadas a objetos, considere el diseño de
un<<compilador>> El compilador es un programa que a partir de un conjunto de fichero
fuente(programa) construye el código objeto que posteriormente se convierte
enprograma. Para realizar su trabajo, el compilador lee el fichero fuente y
separade él las variables y las instrucciones. Las variables constituyen la
tabla desímbolos del programa, mientras que las instrucciones se organizan en un
árbolsintáctico donde se plasman todas la referencias que realizan los mandatos
yfunciones entre sí.
El modelo mejor establecido es el basado en funciones (procedural)
quetrata de la construcción de un programa como una colección de funciones.
Lasmetodologías proporcionan una gruía sobre cómo diseñar, organizar
eimplementar las funciones que componen un programa. El método de diseño es
ladescomposición funcional que identifica las funciones como los pasos a
seguiren la resolución de un problema. La organización en archivos permite que
lasfunciones se agrupen módulos separados, mientras que las técnicas
deprogramación estructurada permiten que las implementaciones de las
funcionessean fáciles de consultar y mantener. La programación orientada a objetos está basada en un modelo deconstrucciones
de programas como un conjunto de clases. El diseño orientado aobjetos identifica
los tipos que representan los distintos objetos en elprograma. Las operaciones a
realizar con cada uno delos objetos son, al igualque en el modelo procedural,
los pasos destinados a solucionar el problema. Elobjeto sirve además de módulo
que puede reutilizarse para la solución de unproblema de similares
características en otro programa. Ninguna metodología resuelve con acierto todos los tipos de problemas.
Laprogramación requiere una especialización como la que se produce en
laingeniería pero todavía no es posible identificarla como una ciencia. Las
técnicasa emplear se han de utilizar con exquisito cuidado, sin perder de vista
elobjetivo de resolver un determinado problema. Actualmente existe la tendencia de identificar la programación con
unadisciplina como la ingeniería. Sin embargo, debe considerarse más como un
artecomo la arquitectura, donde se unen la inspiración y el dominio de la
técnica. Para la elección de un determinado entorno debemos fijar los
criteriosnecesarios, como los que describimos a continuación.: Tamaño de la aplicación Cuanto mayor sea el volumen de información a procesar, mas necesidad habráde
estructurar dicha información de forma que se fácil su manipulación. Complejidad Podemos dividir el problema de la complejidad en dos grandes apartados. Datos: La complejidad viene reflejada por el tipo de datos a tratar, por
lasrelaciones que puedan tener los datos entre si, etc. Funciones: El método para la obtención de nuevos datos es complicado
orequiere un esfuerzo de programación importante. Aunque tratados como grupos independientes, ambos están
generalmenteinterrelacionados. De esta forma una estructura de datos compleja
suele iracompañada de un conjunto de funciones de diseño complejo. Asimismo, una mayor abstracción se traduce en unas instrucciones maspotentes
y un soporte de estructuras de datos más complejas. Esto a menudo setraduce en
que el compilador (programa que traduce el programa introducido porel usuario en
código ejecutable por la máquina) ha de introducir una cantidadgrande de código
auxiliar para poder ejecutar el código fuente. Si ha programado en C o en Turbo Pascal, habrá observado que los
ejecutablesson en general de pequeño tamaño. Un simple programa <<Holamundo>>,
clásico de programación. Nunca es mayor de seis líneas de códigoy su ejecutable
es siempre inferior a 10 Kbytes. Si tomamos Clipper el programano ocupa más de
una línea pero más de 200 Kbytes. Rapidez En algunos problemas la rapidez de respuesta es crítica. Este factor
dependemucho de soporte hardware y lentamente va asumiendo menos importancia. Portabilidad La portabilidad es la capacidad que ha de tener el programa para funcionar
endistintos entornos operativos. La realización de un programa portable ,
engeneral, depende de la elección de un lenguaje de programación , así como
delalejamiento de las ventajas e inconvenientes que proporciona el soporte
hardwarey el sistema operativo. La creación de un programa portable a menudo
incidenegativamente en los apartados de tamaño y rapidez, ya que un alejamiento
de laplataforma hardware y del sistema operativo, a menudo se consigue emulando
suscaracterísticas. Esto conlleva un aumento del tamaño y la complejidad
delprograma, así como un incremento en el tiempo de ejecución. Gestión de recursos Este factor indica las exigencias que hace nuestro lenguaje de los
recursosdisponibles por el ordenado. El más limitado, aun más que el espacio en
disco,es la memoria. Un programa grande que gestione de manera incorrecta la
memoriapronto agotará todos los recursos del sistema. Interface de usuario. Aunque no se puede contar como un factor a considerar, la importancia que
elinterface de usuario está tomando en los últimos años hace que loconsideremos
por separado. El diseño del interface de usuario aporta unacomplejidad propia al
desarrollo de aplicaciones. De hecho, se considera que enun principio este
apartado ocupaba apenas entre el 10 y el 30 por ciento delesfuerzo de
programación, para llegar a absorber entre el 50 y 70 por ciento dedicho
esfuerzo en la actualidad. La aparición de interfaces gráficos de usuario estándar (Windows,
os2,X-Windows, etc.) ha hecho que factores como la rapidez o el tamaño vuelvan
atomarse en cuenta, después de que el consumo de recursos de la parte
delinterface de usuario creciera de forma espectacular. APLICACIONES ORIENTADAS A OBJETOS Cómo afectan los requerimientos anteriores para la elección de un
lenguajeorientado a objetos como herramienta para el desarrollo de nuestros
programas? Claridad Al ligar de forma evidente la estructura de la información con
losprocedimientos que la manipulan, los programas ganan en claridad a la hora
dedesarrollarlos y mantenerlos. Esto supone una ventaja frente a los
lenguajesprocedurales , aunque éstos podrían suplir esta deficiencia mediante
unacorrecta elección de los nombres de las variables y funciones, lo que
sedenomina una <<oportuna codificación>>. Complejidad Cuando la complejidad de un problema es abarcable por una sola
persona,resolverlo con una herramienta u otra no aporta grandes ventajas. Pero
cuandoeste desarrollo la tiene que realizar un equipo grande, debe existir una
formapara aislar partes de problema. Uno de los problemas más comunes , y a su vez más simples de solucionar enel
diseño de grandes sistemas, es el nombre que se da a las funciones y quetipo de
datos manipulan éstas. En la realización de un sistema informático se utiliza un equipo de
variaspersonas. El trabajo se divide en tres áreas funcionales: una parte del
equipose encarga del interface de usuario, otra de la manipulación de datos y,
la últimadel diseño de salidas impresas. Cada quipo utiliza funciones y datos suministrados por los otros miembros
delequipo y a su vez diseña funciones para su uso interno y para el uso del
restode los grupos. Si no se realiza la división del trabajo de forma adecuada
puedeproducirse el caos. He aquí una pequeña enumeración de los problemas que
sepueden encontrar. Las aplicaciones orientadas a objetos son ideales para la realización
deprogramas de gran tamaño. Las facilidades de encapsulación y asociación delas
funciones a los datos que manipulan, simplifican el proceso de desarrollo.De
hecho las bases de datos orientadas a objetos suponen un gran adelanto, yaque
aúnan la flexibilidad en la manipulación de los OOP con la capacidad deconsulta
de un DBMS (Data Base Management System) Relación entre Datos Por el mismo motivo se verán beneficiados aquellos programas que impliquenuna
relación compleja entre los datos. Este tipo de complejidad permite
lautilización de todas las ventajas de los lenguajes de programación orientadosa
objetos. Propiedades como la herencia ( donde los objetos pueden
heredarestructura y operaciones de objetos predecesores), la encapsulación,
etc.Muestran en este tipo de programas todas sus ventajas. Rapidez En este aspecto, los lenguajes orientados a objetos muestran una
claradesventaja frente a otros lenguajes que se acercan más a las
especificacionesde la máquina. Si la rapidez es crítica, puede elegir un
lenguaje deprogramación como C , que aporta toda la funcionalidad de los
lenguajesorientados a objetos con la rapidez y la compatibilidad de C. Gestión de recursos Las aplicaciones orientadas a objetos demandan normalmente más recursos
delsistema que las aplicaciones procedurales. La creación dinámica de
objetos,que ocupa un lugar en la memoria del ordenador, puede acarrear graves
problemas.Una de las soluciones, que incluye alguno delos lenguajes OOP, es
liberar amenudo el espacio que los objetos dejan de utilizar. Este procedimiento
deoptimización como garbage collection (recolección de basura, implementado
enjava), minimiza los efecto de la creación dinámica de objetos. Interface de usuario. El interface de usuario es uno de los aspectos más importantes en
laprogramación actual. La aparición de sistemas de explotación que soportan
uninterface gráfico de usuario como Windows, X-Windows o Presentation
Managerhace que la mayoría de los usuarios prefieran que sus programas corran
bajoeste tipo de interface. Este es uno de los puntos fuertes para la elección
deun lenguaje OOP. La mayoría de los interfaces gráficos actuales han sido
diseñadoso rediseñados en base a la OOP. Existen en el mercado librerías de
clases quesoportan todos los dispositivos de control de ventanas como menús,
combo box,listas, barras de herramientas, etc. Lenguajes orientados a objetos Los lenguajes OOP implementan de manera distinta los conceptos de
programaciónorientada a objetos. No existe el lenguaje perfecto capaz de
satisfacer todaslas necesidades y que se adapte a todos los estilos A Continuación unos consejos que nos facilitarán la elección del lenguajede
programación adecuado: CARACTERÍSTICAS DE LOS LENGUAJES OOP Herencia múltiple Esta característica suele ser común a la mayoría de los lenguajes OOP,aunque
introduce un problema al existir la posibilidad de que el objeto sucesorherede
el mismo atributo, aunque con distinto tipo y valor, de mas de unpredecesor.
Alguno de los lenguajes de programación solucionan este problema deforma
automática, aunque los más populares generan un error en el tiempo
decompilación. Recomendamos que se examinen con cuidado las clases para evitar
enlo posible estos errores. Eficiencia. Los lenguajes OOP arrastraron en un principio la reputación de serineficaces.
Esto se debía en gran medida a que los primeros lenguajes (comoSmalltalk) eran
interpretados y no compilados. La existencia de compiladorespermite a los
desarrolladores ganar rapidez. Actualmente, usando un buenlenguaje orientado a
objetos como C , Java, etc. Junto con las libreríasapropiadas para la
realización de un programa, puede que se ejecute más rápidamenteque el mismo
programa compilado con un lenguaje procedural. Asignación de tipos. Los lenguajes orientados a objetos varían de forma sustancial la forma porla
que se aproximan a la asignación de tipos. Por asignación de tipos entendemos que cada variable sea identificada
comoperteneciente a una clase (asignación fuerte) o sea simplemente un
objetoindeterminado (asignación débil). Eiffel y C son dos lenguajes basados en
laasignación fuerte, frente a Smalltalk, en el que todas las variables
definidaspertenecen a una clase indeterminada. La asignación fuerte sirve a dos propósitos. Por una parte para que
eldesarrollador pueda identificar a que clase pertenece cada operación. De
formaconcreta, en aquellos lenguajes donde está implementado el operator
overloading(refefinición de operador), el compilador puede reconocer a través de
lasclases que entran como parámetros en la operación que operación tiene
queutilizar. Por otra, este tipo de declaración permite al compilador un mayor grado
deoptimización, ya que conoce en todo momento el espacio que ha de asignar. Manejo de memoria. Los OOP son lenguajes que utilizan de manera intensiva la memoria de
lacomputadora. Hay dos tipos de aproximación a la gestión de memoria. El sistema en tiempo de ejecución libera la memoria automáticamente amedida
que los objetos dejan de utilizarse. El sistema tiene instrucciones concretas para liberar l memoria
explícitamente.Este el enfoque adoptado por lenguajes como C , que aportan dos
operadores:crear y destruir. El primero reserva automáticamente memoria,
mientras que elsegundo la libera. Encapsulación Consiste en separar aquellos atributos del objeto que deben ser conocidos
porel resto, de aquellos necesario para su funcionamiento propio. No es propio
delos lenguajes orientados a objetos, pero la capacidad de éstos para unir
lasestructuras de datos a los procedimientos que los modifican lo hacen
máspotente que los lenguajes llamados <<Modulares>> PANORAMICA DE LOS LENGUAJES OOP A continuación, una pequeña panorámica de los lenguajes orientados aobjetos SMALLTALK Fue el primer lenguaje de programación orientado a objetos. Desarrollado enel
Xerox PARC, en sus primeras implementaciones no ofrece solamente uninterprete,
sino que es mucho más ambicioso, integrando intérprete on-line yotros aspectos
que le convierten en un <<pseudo>> sistema operativo.Es el primero en aportar la
arquitectura de Modelo/Visor/Controlador. Elinterface de usuario se divide en
una definición sobre la que se aplicandeterminado número de vistas gestionadas
por un controlador. El MVC permite aldesarrollador concentrarse en la parte
esencial de la aplicación (el modelo) yañadir interfaces de usuarios ( las
vistas y controles) de forma independiente. Ventajas Inconvenientes Eiffel Es un lenguaje de programación escrito por Bertrand Meyer. Al contrario
queSmalltalk, incluye un preprocesador que permite la traducción de código
Eiffela Lenguaje C. Es ideal para la ingeniería de software, que permite
laencapsulación , control de acceso y ámbito de las modificaciones. Comolenguaje
orientado a objetos <<puro>>, es presumiblemente el mejorpor sus capacidades
técnicas. Los programas consisten en la declaración de colecciones de clases
queincluyen métodos. El punto primordial de un programa Eiffel es la
declaraciónde clases, que asocia atributos. Ambos, clases y atributos, son
accesibles apartir de la implementación de un concepto llamado característica.
Unacaracterística es, por tanto, una agrupación de datos y unas formas típicasde
tratarlos. En Eiffel una declaración de clases puede incluir: Ventajas Desventajas C Es un lenguaje de uso general que deriva del C. Añade a su predecesor una serie de características que le convierten en
unlenguaje orientado a objetos. Dentro de estas características debemos
resaltar: C conserva todas las capacidades de su predecesor C. De hecho, el código
Cpuede tratarse con compiladores C y ejecutarse sin ningún problema. En
unprincipio C era traducido a código C a través de una utilidad
llamadaprecompilador. También es cierto que se pueden utilizar algunas de las ventajas de C (como C
mejorado) para escribir código no orientado a objetos. Enumeramos los aspectos más importantes que hacen del C un lenguajeorientado
a objetos: Otras características no relativas a la programación orientada a
objetos,simplifican el diseño y desarrollo. BASES DE DATOS ORIENTADAS A OBJETOS La programación orientada a objetos es muy versátil. No se restringe
únicamenteal diseño de programas, sino que es posible aplicar los mismo
conceptos al diseñode bases de datos. El uso de una técnica orientada a objetos
trasciende a laelección de la base de datos. El uso de esta técnica en el diseño de bases de datos aporta las cualidadesde
esta metodología a nuestro diseño. Eficiencia, coherencia y un menor costea la
hora de actualizar la estructura de las bases de datos son los
principalesbeneficios que aporta. Como valor añadido, el uso de una misma técnica en el diseño, tanto de
losprogramas como de las bases de datos proporciona coherencia a nuestro
sistema. Las bases de datos orientadas a objetos unen dos tecnologías: La de las bases de datos y la de los lenguajes orientados a objetos.
LosLenguajes OOP aportan gran capacidad en la manipulación de datos, pero
noimplementan el almacenamiento y consulta de grandes volúmenes de datos. Por el contrario, las bases de datos convencionales aportan un dominio de
lastécnicas de almacenamiento y consulta de grandes volúmenes de datos, aunque
sucapacidad de manipulación es limitada. Las bases de datos orientadas a objetos pretenden unir la capacidad
demanipulación de datos de los OPP con la capacidad de almacenamiento y
consultade los DBMS. Las aplicaciones convencionales que agrupan programas y bases de
datos,separan ambos entornos de manera clara. El desarrollador usa técnicas procedurales para la descomposición deproblemas
y su codificación en funciones. Posteriormente se emplean técnicascomo las de
Entidad – Relación para el diseño de la base de datos. Su codificación suele realizarse en un lenguaje de alto nivel como C,
quelleva embebido código SQL. El término embebido describe la inclusión de un
móduloescrito bajo otro lenguaje de programación dentro del código fuente.
Elcompilador incorpora durante la fase de enlace el Run-Time correspondiente
paraque pueda funcionar el código embebido. Como podrá observar, esta técnica presenta defectos evidentes: Por una parte, se utilizan diferentes técnicas para el desarrollo de
ambosapartados, por lo que la tarea de diseño no se puede considerara como un
todoúnico Por otra y en gran medida debida a la primera, los lenguajes que se
utilizanpara la implementación difieren, dificultando las labores de
mantenimiento. Ejemplos Como habrá podido observar a lo largo de esta monografía, nuestro propósitono
ha siso el de enseñar una metodología ni la enseñanza de un determinadolenguaje
de programación. El objetivo es por el contrario dar una panorámica de los conceptos de
laprogramación orientada a objetos, de las metodologías y de las técnicas
dedesarrollo de aplicaciones. En este apartado nos centraremos en lo aspectos más importantes en
eldesarrollo de aplicaciones bajo OOP: identificación de objetos y análisis
deasociaciones. La parte más importante de todo diseño es el punto de entrada de ladefinición
de requerimientos. En la observación atenta de los requerimientosse pueden
hallar la mayoría de los objetos pertenecientes a nuestra aplicación. En este ejemplo nos centraremos en la identificación de objetos a partir
delos requerimientos básicos de la aplicación. Este análisis es el primero que debe hacerse dentro de OOP y es también
útilpara cualquier otra técnica de programación. Analicemos la siguiente definición de requerimientos: El <<sistema de tratamiento de información documental>> es ungestor de
<<documentos>>, de tal manera que puedan clasificar en unoo varios <<índices>>,
recuperar para su modificación, visualizar,para su consulta, reclasificar,
archivar y destruir. El <<sistema>>procesa la petición del <<usuario>>,
devolviendo un mensaje eindicando el éxito o el fracaso de la petición. De una manera general hemos indicado entre comillas los sustantivos y
encursiva los verbos. De esta forma hemos identificado los objetos principales
dela aplicación y las operaciones asociadas a cada uno de los objetos. Observe el siguiente diagrama.
Hemos traducido los requerimientos a un conjunto de objetos. Estos están inconexos entre sí, pero aplicando la <<lógica>>podemos ver las relaciones que existen entre ellos. Sin salirnos de lasespecificaciones de la aplicación, vemos que existen las asociaciones queaparecen en la siguiente figura:
Como podemos observar, algunas asociaciones cíclicas como Indice <->Documento. Estas asociaciones pueden simplificarse. También existen otras implícitasque examinaremos más adelante, como Usuario->Documento->Indice. Observemos gráficamente las asociaciones que mantienen los objetos entre síen la siguiente figura
Como puede verse hay dos asociaciones sospechosas, ya que no son verbos sinolos sustantivos <<petición>> y <<mensaje>>. Estas dosasociaciones se pueden <<objetivar>> de tal manera que reúnan lascondiciones de un objeto. Para ello debemos volver a las especificacionesiniciales. Cuando se archiva un documento se debe indicar el nombre del documento asícomo los índices a los que se va a asociar. Las peticiones de recuperacióndeben incluir un índice y el nombre del archivo. Las consultas a los índicesdeben incluir el nombre del indice y una condición. A partir de este análisis se puede depurar con HERENCIA y posteriormenterealizar un <<ajuste fino>> A continuación vamos a centrarnos en la relación de herencia. Como ya sabemos ésta puede agrupar objeto son similares característica obien especializar objetos a partir de una genérico. Observemos nuevamente losrequerimientos de nuestro sistema:
Principles of Component Design 1518A Microsoft Autorized academic triningprogram Fundamentos del diseño y la programación orientada a objetos Sergio M FernándezSastre, editorial McGraw Hill Ingeniería de software, Sommerville I, editorial Addison-Wesley Object-Oriented Programming, Coad P . Editorial Yourdon Press. Apuntes de cátedra Programación 3 lenguae C Universidad Nacional de laMatanza.
Autor: Tejerina Martín Publicación enviada por Tejerina Martín Contactar mailto:mtejerina@hotmail.com Código ISPN de la Publicación EpyuVuuAlEAFjVSJEI Publicado Thursday 25 de September de 2003 Ultimas Publicaciones en ilustrados.com
ilustrados.com nace con el fin difundir el conocimiento publicando trabajos de investigación, monografias, tesis, presentaciones powerpoint y afines. Publicar trabajos en ilustrados.com ha alcanzado prestigio y reconocimiento internacional siendo cada vez más el número de académicos, empresas, investigadores, científicos que consultan las publicaciones de nuestro portal. | |||||||||