2983238 programacion-orientada-a-objetos

49
Programación orientada a objetos De Wikipedia, la enciclopedia libre Saltar a navegación, búsqueda La Programación Orientada a Objetos (POO u OOP según sus siglas en inglés) es un paradigma de programación que usa objetos y sus interacciones para diseñar aplicaciones y programas de computadora. Está basado en varias técnicas, incluyendo herencia, modularidad, polimorfismo, y encapsulamiento. Su uso se popularizó a principios de la década de 1990. Actualmente son muchos los lenguajes de programación que soportan la orientación a objetos. Introducción [editar] Los objetos son entidades que combinan estado, comportamiento e identidad: El estado está compuesto de datos, serán uno o varios atributos a los que se habrán asignado unos valores concretos (datos). El comportamiento está definido por los procedimientos o métodos con que puede operar dicho objeto, es decir, qué operaciones se pueden realizar con él. La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante). La programación orientada a objetos expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Esto permite hacer los programas y módulos más fáciles de escribir, mantener y reutilizar. De esta forma, un objeto contiene toda la información que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase, al poder tener valores bien diferenciados en sus atributos. A su vez, los objetos disponen de mecanismos de interacción llamados métodos que favorecen la comunicación entre ellos. Esta comunicación favorece a su vez el cambio de estado en los propios objetos. Esta característica lleva a tratarlos como unidades indivisibles, en las que no se separan ni deben separarse el estado y el comportamiento. Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a ninguno de ellos, hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado

description

 

Transcript of 2983238 programacion-orientada-a-objetos

Page 1: 2983238 programacion-orientada-a-objetos

Programacioacuten orientada a objetosDe Wikipedia la enciclopedia libre

Saltar a navegacioacuten buacutesqueda

La Programacioacuten Orientada a Objetos (POO u OOP seguacuten sus siglas en ingleacutes) es un paradigma de programacioacuten que usa objetos y sus interacciones para disentildear aplicaciones y programas de computadora Estaacute basado en varias teacutecnicas incluyendo herencia modularidad polimorfismo y encapsulamiento Su uso se popularizoacute a principios de la deacutecada de 1990 Actualmente son muchos los lenguajes de programacioacuten que soportan la orientacioacuten a objetos

bull

Introduccioacuten [editar]

Los objetos son entidades que combinan estado comportamiento e identidad

bull El estado estaacute compuesto de datos seraacuten uno o varios atributos a los que se habraacuten asignado unos valores concretos (datos)

bull El comportamiento estaacute definido por los procedimientos o meacutetodos con que puede operar dicho objeto es decir queacute operaciones se pueden realizar con eacutel

bull La identidad es una propiedad de un objeto que lo diferencia del resto dicho con otras palabras es su identificador (concepto anaacutelogo al de identificador de una variable o una constante)

La programacioacuten orientada a objetos expresa un programa como un conjunto de estos objetos que colaboran entre ellos para realizar tareas Esto permite hacer los programas y moacutedulos maacutes faacuteciles de escribir mantener y reutilizar

De esta forma un objeto contiene toda la informacioacuten que permite definirlo e identificarlo frente a otros objetos pertenecientes a otras clases e incluso frente a objetos de una misma clase al poder tener valores bien diferenciados en sus atributos A su vez los objetos disponen de mecanismos de interaccioacuten llamados meacutetodos que favorecen la comunicacioacuten entre ellos Esta comunicacioacuten favorece a su vez el cambio de estado en los propios objetos Esta caracteriacutestica lleva a tratarlos como unidades indivisibles en las que no se separan ni deben separarse el estado y el comportamiento

Los meacutetodos (comportamiento) y atributos (estado) estaacuten estrechamente relacionados por la propiedad de conjunto Esta propiedad destaca que una clase requiere de meacutetodos para poder tratar los atributos con los que cuenta El programador debe pensar indistintamente en ambos conceptos sin separar ni darle mayor importancia a ninguno de ellos hacerlo podriacutea producir el haacutebito erroacuteneo de crear clases contenedoras de informacioacuten por un lado

y clases con meacutetodos que manejen a las primeras por el otro De esta manera se estariacutea realizando una programacioacuten estructurada camuflada en un lenguaje de programacioacuten orientado a objetos

Esto difiere de la programacioacuten estructurada tradicional en la que los datos y los procedimientos estaacuten separados y sin relacioacuten ya que lo uacutenico que se busca es el procesamiento de unos datos de entrada para obtener otros de salida La programacioacuten estructurada anima al programador a pensar sobre todo en teacuterminos de procedimientos o funciones y en segundo lugar en las estructuras de datos que esos procedimientos manejan En la programacioacuten estructurada soacutelo se escriben funciones que procesan datos Los programadores que emplean eacuteste nuevo paradigma en cambio primero definen objetos para luego enviarles mensajes solicitaacutendoles que realicen sus meacutetodos por siacute mismos

Origen [editar]

Los conceptos de la programacioacuten orientada a objetos tienen origen en Simula 67 un lenguaje disentildeado para hacer simulaciones creado por Ole-Johan Dahl y Kristen Nygaard del Centro de Coacutemputo Noruego en Oslo Al parecer en este centro trabajaban en simulaciones de naves y fueron confundidos por la explosioacuten combinatoria de coacutemo las diversas cualidades de diversas naves podiacutean afectar unas a las otras La idea ocurrioacute para agrupar los diversos tipos de naves en diversas clases de objetos siendo responsable cada clase de objetos de definir sus propios datos y comportamiento Fueron refinados maacutes tarde en Smalltalk que fue desarrollado en Simula en Xerox PARC (y cuya primera versioacuten fue escrita sobre Basic) pero disentildeado para ser un sistema completamente dinaacutemico en el cual los objetos se podriacutean crear y modificar en marcha en lugar de tener un sistema basado en programas estaacuteticos

La programacioacuten orientada a objetos tomoacute posicioacuten como el estilo de programacioacuten dominante a mediados de los antildeos ochenta en gran parte debido a la influencia de C++ una extensioacuten del lenguaje de programacioacuten C Su dominacioacuten fue consolidada gracias al auge de las Interfaces graacuteficas de usuario para las cuales la programacioacuten orientada a objetos estaacute particularmente bien adaptada En este caso se habla tambieacuten de programacioacuten dirigida por eventos

Las caracteriacutesticas de orientacioacuten a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo incluyendo Ada BASIC Lisp Pascal entre otros La adicioacuten de estas caracteriacutesticas a los lenguajes que no fueron disentildeados inicialmente para ellas condujo a menudo a problemas de compatibilidad y a la capacidad de mantenimiento del coacutedigo Los lenguajes orientados a objetos puros por otra parte careciacutean de las caracteriacutesticas de las cuales muchos programadores habiacutean venido a depender Para saltar este obstaacuteculo se hicieron muchas tentativas para crear nuevos lenguajes basados en meacutetodos orientados a objetos pero permitiendo algunas caracteriacutesticas imperativas de maneras seguras El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos pero ahora ha sido esencialmente reemplazado por Java en gran parte debido a la aparicioacuten de Internet y a

la implementacioacuten de la maacutequina virtual de Java en la mayoriacutea de navegadores PHP en su versioacuten 5 se ha ido modificando y soporta una orientacioacuten completa a objetos cumpliendo todas las caracteriacutesticas propias de la orientacioacuten a objetos

Conceptos fundamentales [editar]

La programacioacuten orientada a objetos es una nueva forma de programar que trata de encontrar una solucioacuten a estos problemas Introduce nuevos conceptos que superan y ampliacutean conceptos antiguos ya conocidos Entre ellos destacan los siguientes

bull Clase definiciones de las propiedades y comportamiento de un tipo de objeto concreto La instanciacioacuten es la lectura de estas definiciones y la creacioacuten de un objeto a partir de ellas (de c a d)Es la facilidad mediante la cual la clase D ha definido en ella cada uno de los atributos y operaciones de C como si eso atributos y operaciones hubiesen sido definidos por la misma D

bull Objeto entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (meacutetodos) Corresponden a los objetos reales del mundo que nos rodea o a objetos internos del sistema (del programa) Es una instancia a una clase

bull Meacutetodo algoritmo asociado a un objeto (o a una clase de objetos) cuya ejecucioacuten se desencadena tras la recepcioacuten de un mensaje Desde el punto de vista del comportamiento es lo que el objeto puede hacer Un meacutetodo puede producir un cambio en las propiedades del objeto o la generacioacuten de un evento con un nuevo mensaje para otro objeto del sistema

bull Evento un suceso en el sistema (tal como una interaccioacuten del usuario con la maacutequina o un mensaje enviado por un objeto) El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente Tambieacuten se puede definir como evento a la reaccioacuten que puede desencadenar un objeto es decir la accioacuten que genera

bull Mensaje una comunicacioacuten dirigida a un objeto que le ordena que ejecute uno de sus meacutetodos con ciertos paraacutemetros asociados al evento que lo generoacute

bull Propiedad o atributo contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos) que hace los datos visibles desde fuera del objeto y esto se define como sus caracteriacutesticas predeterminadas y cuyo valor puede ser alterado por la ejecucioacuten de alguacuten meacutetodo

bull Estado interno es una propiedad invisible de los objetos que puede ser uacutenicamente accedida y alterada por un meacutetodo del objeto y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos)

bull Componentes de un objetoatributos identidad relaciones y meacutetodos bull Representacioacuten de un objeto un objeto se representa por medio de una tabla o

entidad que esteacute compuesta por sus atributos y funciones correspondientes

En comparacioacuten con un lenguaje imperativo una variable no es maacutes que un contenedor interno del atributo del objeto o de un estado interno asiacute como la funcioacuten es un procedimiento interno del meacutetodo del objeto

Caracteriacutesticas de la POO [editar]

Hay un cierto desacuerdo sobre exactamente queacute caracteriacutesticas de un meacutetodo de programacioacuten o lenguaje le definen como orientado a objetos pero hay un consenso general en que las caracteriacutesticas siguientes son las maacutes importantes (para maacutes informacioacuten seguir los enlaces respectivos)

bull Abstraccioacuten Cada objeto en el sistema sirve como modelo de un agente abstracto que puede realizar trabajo informar y cambiar su estado y comunicarse con otros objetos en el sistema sin revelar coacutemo se implementan estas caracteriacutesticas Los procesos las funciones o los meacutetodos pueden tambieacuten ser abstraiacutedos y cuando lo estaacuten una variedad de teacutecnicas son requeridas para ampliar una abstraccioacuten

bull Encapsulamiento Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad al mismo nivel de abstraccioacuten Esto permite aumentar la cohesioacuten de los componentes del sistema Algunos autores confunden este concepto con el principio de ocultacioacuten principalmente porque se suelen emplear conjuntamente

bull Principio de ocultacioacuten Cada objeto estaacute aislado del exterior es un moacutedulo natural y cada tipo de objeto expone una interfaz a otros objetos que especifica coacutemo pueden interactuar con los objetos de la clase El aislamiento protege a las propiedades de un objeto contra su modificacioacuten por quien no tenga derecho a acceder a ellas solamente los propios meacutetodos internos del objeto pueden acceder a su estado Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas eliminando efectos secundarios e interacciones inesperadas Algunos lenguajes relajan esto permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstraccioacuten La aplicacioacuten entera se reduce a un agregado o rompecabezas de objetos

bull Polimorfismo comportamientos diferentes asociados a objetos distintos pueden compartir el mismo nombre al llamarlos por ese nombre se utilizaraacute el comportamiento correspondiente al objeto que se esteacute usando O dicho de otro modo las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos y la invocacioacuten de un comportamiento en una referencia produciraacute el comportamiento correcto para el tipo real del objeto referenciado Cuando esto ocurre en tiempo de ejecucioacuten esta uacuteltima caracteriacutestica se llama asignacioacuten tardiacutea o asignacioacuten dinaacutemica Algunos lenguajes proporcionan medios maacutes estaacuteticos (en tiempo de compilacioacuten) de polimorfismo tales como las plantillas y la sobrecarga de operadores de C++

bull Herencia las clases no estaacuten aisladas sino que se relacionan entre siacute formando una jerarquiacutea de clasificacioacuten Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes Estos pueden compartir (y extender) su comportamiento sin tener que reimplementar su comportamiento Esto suele hacerse habitualmente agrupando los objetos en

clases y estas en aacuterboles o enrejados que reflejan un comportamiento comuacuten Cuando un objeto hereda de maacutes de una clase se dice que hay herencia muacuteltiple

Lenguajes orientados a objetos [editar]

Entre los lenguajes orientados a objetos destacan los siguientes

bull ActionScript bull ActionScript 3 bull Ada bull C++ bull C bull Clarion bull Lenguaje de programacioacuten D bull Object Pascal (Delphi) bull Harbour bull Eiffel bull Java bull JavaScript (la herencia se realiza por medio de la programacioacuten basada en

prototipos) bull Lexico (en castellano) bull Objective-C bull Ocaml bull Oz bull Lenguaje de programacioacuten R bull Perl (soporta herencia muacuteltiple La resolucioacuten se realiza en preorden pero puede

modificarse al algoritmo C3 por medio del moacutedulo ClassC3 en CPAN) bull PHP (en su versioacuten 5) bull Python bull Ruby bull Smalltalk bull Magik (SmallWorld) bull VBNET bull Visual FoxPro bull XBase++ bull Gambas bull Flex builder (adobe)

Muchos de estos lenguajes de programacioacuten no son puramente orientados a objetos sino que son hiacutebridos que combinan la POO con otros paradigmas

Al igual que C++ otros lenguajes como OOCOBOL OOLISP OOPROLOG y Object REXX han sido creados antildeadiendo extensiones orientadas a objetos a un lenguaje de programacioacuten claacutesico

Un nuevo paso en la abstraccioacuten de paradigmas de programacioacuten es la Programacioacuten Orientada a Aspectos (POA) Aunque es todaviacutea una metodologiacutea en estado de maduracioacuten cada vez atrae a maacutes investigadores e incluso proyectos comerciales en todo el mundo

Monografiacuteascom

Programacioacuten Orientada a ObjetosSistemas de Procesamiento de Datos

INTRODUCCION

Actualmente una de las aacutereas maacutes candentes en la industria y en el aacutembito acadeacutemico es la orientacioacuten a objetos La orientacioacuten a objetos promete mejoras de amplio alcance en la forma de disentildeo desarrollo y mantenimiento del software ofreciendo una solucioacuten a largo plazo a los problemas y preocupaciones que han existido desde el comienzo en el desarrollo de software la falta de portabilidad del coacutedigo y reusabilidad coacutedigo que es dificil de modificar ciclos de desarrollo largos y tecnicas de codificacion no intuituvas

Un lenguaje orientado a objetos ataca estos problemas Tiene tres caracteriacutesticas basicas debe estar basado en objetos basado en clases y capaz de tener herencia de clases Muchos lenguajes cumplen uno o dos de estos puntos muchos menos cumplen los tres La barrera maacutes difiacutecil de sortear es usualmente la herencia

El concepto de programacioacuten orientada a objetos (OOP) no es nuevo lenguajes claacutesicos como SmallTalk se basan en ella Dado que la OOP se basa en la idea natural de la existencia de un mundo lleno de objetos y que la resolucioacuten del problema se realiza en teacuterminos de objetos un lenguaje se dice que estaacute basado en objetos si soporta objetos como una caracteriacutestica fundamental del mismo

El elemento fundamental de la OOP es como su nombre lo indica el objeto Podemos definir un objeto como un conjunto complejo de datos y programas que poseen estructura y forman parte de una organizacioacuten

Esta definicioacuten especifica varias propiedades importantes de los objetos En primer lugar un objeto no es un dato simple sino que contiene en su interior cierto nuacutemero de componentes bieacuten estructurados En segundo lugar cada objeto no es un ente aislado sino que forma parte de una organizacioacuten jeraacuterquica o de otro tipo

ESTRUCTURA DE UN OBJETO

Un objeto puede considerarse como una especie de caacutepsula dividida en tres partes

1 - RELACIONES

2 - PROPIEDADES

3 - METODOS

Cada uno de estos componentes desempentildea un papel totalmente independiente

Las relaciones permiten que el objeto se insterte en la organizacioacuten y estaacuten formadas esencialmente por punteros a otros objetos

Las propiedades distinguen un objeto determinado de los restantes que forman parte de la misma organizacioacuten y tiene valores que dependen de la propiedad de que se trate Las propiedades de un objeto pueden ser heredadas a sus descendientes en la organizacioacuten

Los meacutetodos son las operaciones que pueden realizarse sobre el objeto que normalmente estaraacuten incorporados en forma de programas (coacutedigo) que el objeto es capaz de ejecutar y que tambieacuten pone a disposicioacuten de sus descendientes a traveacutes de la herencia

Encapsulamiento y ocultacioacuten

Como hemos visto cada objeto es una estructura compleja en cuyo interior hay datos y programas todos ellos relacionados entre siacute como si estuvieran encerrados conjuntamente en una caacutepsula Esta propiedad (encapsulamiento) es una de las caracteriacutesticas fundamentales en la OOP

Los objetos son inaccesibles e impiden que otros objetos los usuarios o incluso los programadores conozcan coacutemo estaacute distribuiacuteda la informacioacuten o queacute informacioacuten hay disponible Esta propiedad de los objetos se denomina ocultacioacuten de la informacioacuten

Esto no quiere decir sin embargo que sea imposible conocer lo necesario respecto a un objeto y a lo que contiene Si asiacute fuera no se podriacutea hacer gran cosa con eacutel Lo que sucede es que las peticiones de informacioacuten a un objeto deben realizarse a traveacutes de mensajes dirigidos a eacutel con la orden de realizar la operacioacuten pertinente La respuesta a estas ordenes seraacute la informacioacuten requerida siempre que el objeto considere que quien enviacutea el mensaje estaacute autorizado para obtenerla

El hecho de que cada objeto sea una caacutepsula facilita enormemente que un objeto determinado pueda ser transportado a otro punto de la organizacioacuten o incluso a otra organizacioacuten totalmente diferente que precise de eacutel Si el objeto ha sido bien construiacutedo sus meacutetodos seguiraacuten funcionando en el nuevo entorno sin problemas Esta cualidad hace que la OOP sea muy apta para la reutilizacioacuten de programas

Organizacioacuten de los objetos

En principio los objetos forman siempre una organizacioacuten jeraacuterquica en el sentido de que ciertos objetos son superiores a otros de cierto modo

Existen varios tipos tipos de jerarquiacuteas seraacuten simples cuando su estructura pueda ser representada por medio de un arbol En otros casos puede ser maacutes compleja

En cualquier caso sea la estructura simple o compleja podraacuten distinguirse en ella tres niveles de objetos

-La raiacutez de la jerarquiacutea Se trata de un objeto uacutenico y especial Este se caracteriacuteza por estar en el nivel maacutes alto de la estructura y suele recibir un nombre muy geneacuterico que indica su categoriacutea especial como por ejemplo objeto madre Raiacutez o Entidad

-Los objetos intermedios Son aquellos que descienden directamente de la raiacutez y que a su vez tienen descendientes Representan conjuntos o clases de objetos que pueden ser muy generales o muy especializados seguacuten la aplicacioacuten Normalmente reciben nombres geneacutericos que denotan al conjunto de objetos que representan por ejemplo VENTANA CUENTA FICHERO En un conjunto reciben el nombre de clases o tipos si descienden de otra clase o subclase

-Los objetos terminales Son todos aquellos que descienden de una clase o subclase y no tienen descendientes Suelen llamarse casos particulares instancias o iacutetems porque representan los elementos del conjunto representado por la clase o subclase a la que pertenecen

Veamos ahora en detalle los tres elementos mencionados en Estructura de un Objeto

1 RELACIONES

Las relaciones entre objetos son precisamente los enlaces que permiten a un objeto relacionarse con aquellos que forman parte de la misma organizacioacuten

Las hay de dos tipos fundamentales

-Relaciones jeraacuterquicas Son esenciales para la existencia misma de la aplicacioacuten porque la construyen Son bidireccionales es decir un objeto es padre de otro cuando el primer objeto se encuentra situado inmediatamente encima del segundo en la organizacioacuten en la que ambos forman parte asimismo si un objeto es padre de otro el segundo es hijo del primero (en la fig 2 B es padre de DE y F es decir DE y F son hijos de B en la fig 3 los objetos B y C son padres de F que a su vez es hijo de ambos)

Una organizacioacuten jeraacuterquica simple puede definirse como aquella en la que un objeto puede tener un solo padre mientras que en una organizacion jeraacuterquica compleja un hijo puede tener varios padres)

-Relaciones semaacutenticas Se refieren a las relaciones que no tienen nada que ver con la organizacioacuten de la que forman parte los objetos que las establecen Sus

propiedades y consecuencia solo dependen de los objetos en siacute mismos (de su significado) y no de su posicioacuten en la organizacioacuten

Se puede ver mejor con un ejemplo supongamos que vamos a construir un diccionario informatizado que permita al usuario obtener la definicioacuten de una palabra cualquiera Supongamos que en dicho diccionario las palabras son objetos y que la organizacioacuten jeraacuterquica es la que proviene de forma natural de la estructura de nuestros conocimientos sobre el mundo

La raiacutez del diccionario podriacutea llamarse TEMAS De eacuteste teacutermino geneacuterico descenderaacuten tres grandes ramas de objetos llamadas VIDA MUNDO y HOMBRE El primero (vida) comprenderaacute las ciencias bioloacutegicas Biologiacutea y Medicina El segundo (mundo) las ciencias de la naturaleza inerte las Matemaacuteticas la Fiacutesica la Quiacutemica y la Geologiacutea El tercero (hombre) comprenderaacute las ciencias humanas la Geografiacutea la Historia etc

Veamos un ejemplo estableceremos la relacioacuten trabajo entre los objetos NEWTON y OPTICA y la interpretaremos diciendo que significa que Newton trabajoacute en oacuteptica (veacutease la fig 4) La relacioacuten es evidentemente semaacutentica pueacutes no establece ninguna connotacioacuten jeraacuterquica entre NEWTON y OPTICA y su interpretacioacuten depende exclusivamente del significado de ambos objetos

La existencia de esta relacioacuten nos permitiraacute responder a preguntas como

iquestQuieacuten trabajoacute en oacuteptica

iquestEn queacute trabajoacute Newton

iquestQuien trabajoacute en Fiacutesica

Las dos primeras se deducen inmediatamente de la existencia de la relacioacuten trabajo Para la tercera observamos que si Newton trabajoacute en oacuteptica automaacuteticamente sabemos que trabajoacute en Fiacutesica por ser oacuteptica una rama de la Fiacutesica (en nuestro diccionario el objeto OPTICA es hijo del objeto FISICA) Entonces gracias a la OOP podemos responder a la tercera pregunta sin necesidad de establecer una relacioacuten entre NEWTON y FISICA apoyandonos soacutelo en la relacioacuten definida entre NEWTON y OPTICA y en que OPTICA es hijo de FISICA De este modo se elimina toda redundancia innecesaria y la cantidad de informacioacuten que tendremos que definir para todo el diccionario seraacute miacutenima

2 PROPIEDADES

Todo objeto puede tener cierto nuacutemero de propiedades cada una de las cuales tendraacute a su vez uno o varios valores En OOP las propiedades corresponden a las claacutesicas variables de la programacioacuten estructurada Son por lo tanto datos encapsulados dentro del objeto junto con los meacutetodos (programas) y las relaciones (punteros a otros objetos) Las propiedades de un objeto pueden tener un valor uacutenico o pueden contener un conjunto de valores mas o menos estructurados (matrices vectores listas etc) Ademaacutes los valores pueden ser de cualquier tipo (numeacuterico alfabeacutetico etc) si el sistema de programacioacuten lo permite

Pero existe una diferencia con las variables y es que las propiedades se pueden heredar de unos objetos a otros En consecuencia un objeto puede tener una propiedad de maneras diferentes

-Propiedades propias Estaacuten formadas dentro de la caacutepsula del objeto

-Propiedades heredadas Estan definidas en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estas propiedades se llaman propiedades miembro porque el objeto las posee por el mero hecho de ser miembro de una clase

3 METODOS

Una operacioacuten que realiza acceso a los datos Podemos definir meacutetodo como un programa procedimental o procedural escrito en cualquier lenguaje que estaacute asociado a un objeto determinado y cuya ejecucioacuten soacutelo puede desencadenarse a traveacutes de un mensaje recibido por eacuteste o por sus descendientes

Son sinoacutenimos de meacutetodo todos aquellos teacuterminos que se han aplicado tradicionalmente a los programas como procedimiento funcioacuten rutina etc Sin embargo es conveniente utilizar el teacutermino meacutetodo para que se distingan claramente las propiedades especiales que adquiere un programa en el entorno OOP que afectan fundamentalmente a la forma de invocarlo (uacutenicamente a traveacutes de un mensaje) y a su campo de accioacuten limitado a un objeto y a sus descendientes aunque posiblemente no a todos

Si los meacutetodos son programas se deduce que podriacutean tener argumentos o paraacutemetros Puesto que los meacutetodos pueden heredarse de unos objetos a otros un objeto puede disponer de un meacutetodo de dos maneras diferentes

-Meacutetodos propios Estaacuten incluiacutedos dentro de la caacutepsula del objeto

-Meacutetodos heredados Estan definidos en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estos meacutetodos se llaman meacutetodos miembro porque el objeto los posee por el mero hecho de ser miembro de una clase

Polimorfiacutesmo

Una de las caracteriacutesticas fundamentales de la OOP es el polimorfiacutesmo que no es otra cosa que la posibilidad de construir varios meacutetodos con el mismo nombre pero con relacioacuten a la clase a la que pertenece cada uno con comportamientos diferentes Esto conlleva la habilidad de enviar un mismo mensaje a objetos de clases diferentes Estos objetos recibiriacutean el mismo mensaje global pero responderiacutean a eacutel de formas diferentes por ejemplo un mensaje + a un objeto ENTERO significariacutea suma mientras que para un objeto STRING significariacutea concatenacioacuten (pegar strings uno seguido al otro)

Demonios

Es un tipo especial de meacutetodos relativamente poco frecuente en los sistemas de OOP que se activa automaacuteticamente cuando sucede algo especial Es decir es un programa como los meacutetodos ordinarios pero se diferencia de estos porque su ejecucioacuten no se activa con un mensaje sino que se desencadena autmaacuteticamente

cuando ocurre un suceso determinado la asignacioacuten de un valor a una propiedad de un objeto la lectura de un valor determinado etc

Los demonios cuando existen se diferencian de otros meacutetodos por que no son heredables y porque a veces estaacuten ligados a una de las propiedades de un objeto mas que al objeto entero

CONSIDERACIONES FINALES

Beneficios que se obtienen del desarrollo con OOP

Diacutea a diacutea los costos del Hardware decrecen Asiacute surgen nuevas aacutereas de aplicacioacuten cotidianamente procesamiento de imaacutegenes y sonido bases de datos multimediales automatizacioacuten de oficinas ambientes de ingenieriacutea de software etc Auacuten en las aplicaciones tradicionales encontramos que definir interfases hombre-maacutequina a-la-Windows suele ser bastante conveniente

Lamentablemente los costos de produccioacuten de software siguen aumentando el mantenimiento y la modificacioacuten de sistemas complejos suele ser una tarea trabajosa cada aplicacioacuten (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo etc

Todos estos problemas auacuten no han sido solucionados en forma completa Pero como los objetos son portables (teoacutericamente) mientras que la herencia permite la reusabilidad del coacutedigo orientado a objetos es maacutes sencillo modificar coacutedigo existente porque los objetos no interaccionan excepto a traveacutes de mensajes en consecuencia un cambio en la codificacioacuten de un objeto no afectaraacute la operacioacuten con otro objeto siempre que los meacutetodos respectivos permanezcan intactos La introduccioacuten de tecnologiacutea de objetos como una herramienta concepual para analizar disentildear e implementar aplicaciones permite obtener aplicaciones maacutes modificables faacutecilmente extendibles y a partir de componentes reusables Esta reusabilidad del coacutedigo disminuye el tiempo que se utiliza en el desarrollo y hace que el desarrollo del software sea mas intuitivo porque la gente piensa naturalmente en teacuterminos de objetos maacutes que en teacuterminos de algoritmos de software

Problemas derivados de la utilizacioacuten de OOP en la actualidad

Un sistema orientado a objetos por lo visto puede parecer un paraiacuteso virtual El problema sin embargo surge en la implementacioacuten de tal sistema Muchas compantildeiacuteas oyen acerca de los beneficios de un sistema orientado a objetos e invierten gran cantidad de recursos luego comienzan a darse cuenta que han impuesto una nueva cultura que es ajena a los programadores actuales Especiacuteficamente los siguientes temas suelen aparecer repetidamente

Curvas de aprendizaje largas Un sistema orientado a objetos ve al mundo en una forma uacutenica Involucra la conceptualizacioacuten de todos los elementos de un programa desde subsistemas a los datos en la forma de objetos Toda la comunicacioacuten entre los objetos debe realizarse en la forma de mensajes Esta no es la forma en que estaacuten escritos los programas orientados a objetos actualmente al hacer la transicioacuten a un sistema orientado a objetos la mayoriacutea de los programadores deben capacitarse nuevamente antes de poder usarlo

Dependencia del lenguaje A pesar de la portabilidad conceptual de los objetos en un sistema orientado a objetos en la praacutectica existen muchas dependencias Muchos lenguajes orientados a objetos estaacuten compitiendo actualmente para dominar el mercado Cambiar el lenguaje de implementacioacuten de un sistema orientado a objetos no es una tarea sencilla por ejemplo C++ soporta el concepto de herencia multiple mientras que SmallTalk no lo soporta en consecuencia la eleccioacuten de un lenguaje tiene ramificaciones de disentildeo muy importamtes

Determinacion de las clases Una clase es un molde que se utiliza para crear nuevos objetos En consecuencia es importante crear el conjunto de clases adecuado para un proyecto Desafortunadamente la definicioacuten de las clases es maacutes un arte que una ciencia Si bien hay muchas jerarquiacuteas de clase predefinidas usualmente se deben crear clases especiacuteficas para la aplicacioacuten que se este desarrollando Luego en 6 meses oacute 1 antildeo se da cuenta que las clases que se establecieron no son posibles en ese caso seraacute necesario reestructurar la jerarquiacutea de clases devastando totalmente la planificacioacuten original

Performance En un sistema donde todo es un objeto y toda interaccion es a traveacutes de mensajes el traacutefico de mensajes afecta la performance A medida que la tecnologiacutea avanza y la velocidad de microprocesamiento potencia y tamantildeo de la memoria aumentan la situacion mejoraraacute pero en la situacioacuten actual un disentildeo de una aplicacioacuten orientada a objetos que no tiene en cuenta la performance no seraacute viable comercialmente

Idealmente habriacutea una forma de atacar estos problemas eficientemente al mismo tiempo que se obtienen los beneficios del desarrollo de una estrategia orientada a objetos Deberia existir una metodologiacutea faacutecil de aprender e independiente del lenguaje y facil de reestructurar que no drene la performance del sistema

Monografiacuteascom

Programacioacuten orientada a Objetos(OOP Object Oriented Programming)

1 Introduccioacuten 2 Objetos 3 Disentildeo de aplicaciones y eleccioacuten de entorno 4 Aplicaciones orientadas a objetos 5 Caracteriacutesticas de los lenguajes OOP 6 Panoraacutemica de los lenguajes OOP 7 Bases de datos orientadas a objetos 8 Objetos y asociaciones

9 La relacioacuten de herencia 10 Bibliografiacutea infografiacutea

Introduccioacuten

l teacutermino de Programacioacuten Orientada a Objetos indica maacutes una forma de disentildeo y una metodologiacutea de desarrollo de software que un lenguaje de programacioacuten ya que en realidad se puede aplicar el Disentildeo Orientado a Objetos (En ingleacutes abreviado OOD Object Oriented Design) a cualquier tipo de lenguaje de programacioacuten

El desarrollo de la OOP empieza a destacar durante la deacutecada de lo 80 tomando en cuenta la programacioacuten estructurada a la que engloba y dotando al programador de nuevos elementos para el anaacutelisis y desarrollo de software

El propoacutesito de este trabajo es explicar el disentildeo orientado a objeto y no una explicacioacuten de su programacioacuten puesto que no nos alcanzariacutea toda la curriacutecula para hacerlo

Baacutesicamente la OOP permite a los programadores escribir software de forma que esteacute organizado en la misma manera que el problema que trata de modelizar Los lenguajes de programacioacuten convencionales son poco maacutes que una lista de acciones a realizar sobre un conjunto de datos en una determinada secuencia Si en alguacuten punto del programa modificamos la estructura de los datos o la accioacuten realizada sobre ellos el programa cambia

La OOP aporta un enfoque nuevo convirtiendo la estructura de datos en el centro sobre el que pivotan las operaciones De esta forma cualquier modificacioacuten de la estructura de datos tiene efecto inmediato sobre las acciones a realizar sobre ella

siendo esta una de la diferencias radicales respecto a la programacioacuten estructurada

Para quienes no estaacuten familiarizados con la programacioacuten estructurada direacute que una de las bases de esta escuela de programacioacuten parte del disentildeo arriba ndash abajo En esta forma de disentildeo se descomponen los requerimientos del programa paso a paso hasta llegar a un nivel que permite expresarlos mediante procedimientos y funciones La OOP estructura los datos en objetos que pueden almacenar manipular y combinar informacioacuten

En resumen la programacioacuten estructurada presta atencioacuten al conjunto de acciones que manipulan el flujo de datos (desde la situacioacuten inicial a la final) mientras que la programacioacuten orientada a objetos presta atencioacuten a la interrelacioacuten que existe entre los datos y las acciones a realizar con ellos

Muchos habraacuten oiacutedo comentarios sobre la incidencia de la OOP sobre la programacioacuten convencional Se ha llegado a decir que el cambio introducido por la OOP es similar al producido por la aparicioacuten del ensamblador sobre el coacutedigo de maacutequina

La OOP proporciona las siguientes ventajas sobre otros lenguajes de programacioacuten

Uniformidad Ya que la representacioacuten de los objetos lleva implica tanto el anaacutelisis como el disentildeo y la codificacioacuten de los mismos

Comprensioacuten Tanto los datos que componen los objetos como los procedimientos que los manipulan estaacuten agrupados en clases que se corresponden con las estructuras de informacioacuten que el programa trata

Flexibilidad Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar cualquier cambio que se realice sobre ellos quedaraacute reflejado automaacuteticamente en cualquier lugar donde estos datos aparezcan

Estabilidad Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo

Reusabilidad La nocioacuten de objeto permite que programas que traten las mismas estructuras de informacioacuten reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan De esta forma el desarrollo de un programa puede llegar a ser una simple combinacioacuten de objetos ya definidos donde estos estaacuten relacionados de una manera particular

Uno de los puntos clave a remarcar en esta introduccioacuten es que la programacioacuten orientada a objetos no sustituye a ninguna metodologiacutea ni lenguaje de programacioacuten anterior Todos los programas que se realizan seguacuten OOD se pueden realizar igualmente mediante programacioacuten estructurada Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas

basadas en un interface de usuario graacutefico como Windows OS2 x-Windows etc Es mucho maacutes sencillo

OBJETOS

Caracteriacutesticas de los Objetos

Identidad del Objeto

La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos son distintos entre siacute De esta forma incluso una serie de Objetos coches recieacuten fabricados son distintos los unos de los otros

La afirmacioacuten anterior aunque parece obvia tiene importancia cuando descendemos al nivel de programacioacuten En este aacutembito cada uno de los objetos tiene un controlador pro el cual se identifica Este puede ser una variable una estructura de datos una cadena de caracteres etc El controlador seraacute distinto para cada uno de los objeto aunque las referencias a eacutestos sean uniformes e independientes del contenido permitiendo crear agrupaciones de objetos con el mismo tratamiento

Clasificacioacuten

Con la clasificacioacuten comienza la verdadera programacioacuten orientada a objetos Ellos nos obliga a una abstraccioacuten del concepto de objeto denominada clase

Las clases permiten la agrupacioacuten de objetos que comparten las mismas propiedades y comportamiento Si bien clase y objeto suelen usarse como sinoacutenimos no lo son

El esfuerzo del programador ante una aplicacioacuten orientada a objetos se centra en la identificacioacuten de las clases sus atributos y operaciones asociadas

Las propiedades de cada clase deben cumplir una serie de premisas

Las propiedades deber ser significativas dentro del entorno de la aplicacioacuten es decir deben servir para identificar claramente y de una manera uacutenica (y univoca) a cada uno de los objetos

El nuacutemero de propiedades de un objeto debe ser el miacutenimo para realizar todas las operaciones que requiera la aplicacioacuten

Definamos una clase rectaacutengulo Esta clase puede tener como atributos un punto (xy) la anchura (a) y la longitud (l) Las operaciones a realizar son mover agrandar reducir et iquestEs posible realizarlas con las propiedades de la clase

Un anaacutelisis posterior nos indica que es posible la realizacioacuten de estas operaciones con los atributos definidos Pero si incluimos la operacioacuten girar vemos que con las propiedades definidas para la clase esta operacioacuten no se puede realizar Para incluir esta nueva operacioacuten debemos redefinir las propiedades del objeto en este caso las coordenadas de los veacutertices

Encapsulacioacuten y ocultacioacuten de datos

La capacidad de presentacioacuten de informacioacuten dentro de un objeto se divide en dos partes bien diferenciadas

Interna La informacioacuten que necesita el objeto para operar y que es innecesaria para los demaacutes objetos de la aplicacioacuten Estos atributos se denominada privados y tienen como marco de aplicacioacuten uacutenicamente a las operaciones asociadas al objeto

Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos Estas propiedades se denominan puacuteblicas y corresponde a la informacioacuten que necesitan conocer los restantes objetos de la aplicacioacuten respecto del objeto definido para poder operar

Podemos imaginarla encapsulacioacuten como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida Si introducimos datos por la entrada automaacuteticamente obtendraacute un resultado en la salida No necesita conocer ninguacuten detalle del funcionamiento interno de la caja

El teacutermino encapsulacioacuten indica l capacidad que tienen los objetos de construir una caacutepsula a su alrededor ocultando la informacioacuten que contienen (aqueacutella que es necesaria para su funcionamiento interno pero innecesaria para los demaacutes objetos) a las otras clases que componen la aplicacioacuten

Aunque a primera vista la encapsulacioacuten puede parecer superflua tengamos en cuenta que existen muchas variables utilizadas de forma temporal contadores y variables que contienen resultados intermedios etc D no ser por la encapsulacioacuten estas variables ocupariacutean memoria y podriacutean interferir en el funcionamiento del resto de los objetos

La encapsulacioacuten no es exclusiva de los lenguajes de programacioacuten orientados a objetos Aparece en los lenguajes basados en procedimientos (PASCAL C COBOL ETC) como una forma de proteger los datos que se manipulan dentro de las funciones

Los lenguajes OOP incorporan la posibilidad de encapsular tambieacuten las estructuras de datos que sirven como base a las funciones Aportan por tanto un nivel superior en cuanto a proteccioacuten de informacioacuten

La encapsulacioacuten nos permite el uso de libreriacuteas de objetos para el desarrollo de nuestros programas Recordemos que las libreriacuteas son definiciones de objetos de propoacutesito general que se incorporan a los programas Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde estaacute definido ya que contiene y define todo lo que necesita para poder funcionar es faacutecil utilizarlo en los mas variados tipos de aplicaciones Si aseguramos depurando las propiedades y las operaciones dentro de la clase que el objeto funcioacuten bien dentro de una aplicacioacuten con una correcta encapsulacioacuten el objeto podraacute funcionar en cualquier otra

Otra de las ventajas de la encapsulacioacuten es que al definir el objeto como una caja negra con entradas y salida asociadas en cualquier momento podemos cambiar el contenido de las operaciones del objeto de manera que no afecte al funcionamiento general del programa

La encapsulacioacuten estaacute en el nuacutecleo de dos grandes pilares de la construccioacuten de sistemas mantenibilidad y reusabilidad

Mantenibilidad

Cualidad que indica que un programa o sistema debe ser faacutecilmente modificable Es decir que los cambios en las condiciones externas (como la definicioacuten de una nueva variable) implicaraacuten modificaciones pequentildeas en el programa sistema El concepto de mantenibilidad implica que un programa al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante

Reusabilidad

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccioacuten de otros programas Ello implica que los objetos definidos en un programa pueden ser extraiacutedos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el coacutedigo del objeto El objeto final es que el programador construya una libreriacutea de objetos que le permita realizar programas basaacutendose en la teacutecnica de cortar y pegar Esta extrae (corta) coacutedigo de otras aplicaciones ya realizadas y las implementa (pega) en la aplicacioacuten a realizar donde tras algunos retoques la nueva aplicacioacuten estaraacute lista para funcionar Como podraacute observar el concepto de reusabilidad permite reducir el tiempo de realizacioacuten ganando en claridad mantenibilidad y productividad

La encapsulacioacuten de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad con el uacutenico coste adicional de definir con precisioacuten las entradas y salida de nuestras operaciones

Poliformismo

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 2: 2983238 programacion-orientada-a-objetos

y clases con meacutetodos que manejen a las primeras por el otro De esta manera se estariacutea realizando una programacioacuten estructurada camuflada en un lenguaje de programacioacuten orientado a objetos

Esto difiere de la programacioacuten estructurada tradicional en la que los datos y los procedimientos estaacuten separados y sin relacioacuten ya que lo uacutenico que se busca es el procesamiento de unos datos de entrada para obtener otros de salida La programacioacuten estructurada anima al programador a pensar sobre todo en teacuterminos de procedimientos o funciones y en segundo lugar en las estructuras de datos que esos procedimientos manejan En la programacioacuten estructurada soacutelo se escriben funciones que procesan datos Los programadores que emplean eacuteste nuevo paradigma en cambio primero definen objetos para luego enviarles mensajes solicitaacutendoles que realicen sus meacutetodos por siacute mismos

Origen [editar]

Los conceptos de la programacioacuten orientada a objetos tienen origen en Simula 67 un lenguaje disentildeado para hacer simulaciones creado por Ole-Johan Dahl y Kristen Nygaard del Centro de Coacutemputo Noruego en Oslo Al parecer en este centro trabajaban en simulaciones de naves y fueron confundidos por la explosioacuten combinatoria de coacutemo las diversas cualidades de diversas naves podiacutean afectar unas a las otras La idea ocurrioacute para agrupar los diversos tipos de naves en diversas clases de objetos siendo responsable cada clase de objetos de definir sus propios datos y comportamiento Fueron refinados maacutes tarde en Smalltalk que fue desarrollado en Simula en Xerox PARC (y cuya primera versioacuten fue escrita sobre Basic) pero disentildeado para ser un sistema completamente dinaacutemico en el cual los objetos se podriacutean crear y modificar en marcha en lugar de tener un sistema basado en programas estaacuteticos

La programacioacuten orientada a objetos tomoacute posicioacuten como el estilo de programacioacuten dominante a mediados de los antildeos ochenta en gran parte debido a la influencia de C++ una extensioacuten del lenguaje de programacioacuten C Su dominacioacuten fue consolidada gracias al auge de las Interfaces graacuteficas de usuario para las cuales la programacioacuten orientada a objetos estaacute particularmente bien adaptada En este caso se habla tambieacuten de programacioacuten dirigida por eventos

Las caracteriacutesticas de orientacioacuten a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo incluyendo Ada BASIC Lisp Pascal entre otros La adicioacuten de estas caracteriacutesticas a los lenguajes que no fueron disentildeados inicialmente para ellas condujo a menudo a problemas de compatibilidad y a la capacidad de mantenimiento del coacutedigo Los lenguajes orientados a objetos puros por otra parte careciacutean de las caracteriacutesticas de las cuales muchos programadores habiacutean venido a depender Para saltar este obstaacuteculo se hicieron muchas tentativas para crear nuevos lenguajes basados en meacutetodos orientados a objetos pero permitiendo algunas caracteriacutesticas imperativas de maneras seguras El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos pero ahora ha sido esencialmente reemplazado por Java en gran parte debido a la aparicioacuten de Internet y a

la implementacioacuten de la maacutequina virtual de Java en la mayoriacutea de navegadores PHP en su versioacuten 5 se ha ido modificando y soporta una orientacioacuten completa a objetos cumpliendo todas las caracteriacutesticas propias de la orientacioacuten a objetos

Conceptos fundamentales [editar]

La programacioacuten orientada a objetos es una nueva forma de programar que trata de encontrar una solucioacuten a estos problemas Introduce nuevos conceptos que superan y ampliacutean conceptos antiguos ya conocidos Entre ellos destacan los siguientes

bull Clase definiciones de las propiedades y comportamiento de un tipo de objeto concreto La instanciacioacuten es la lectura de estas definiciones y la creacioacuten de un objeto a partir de ellas (de c a d)Es la facilidad mediante la cual la clase D ha definido en ella cada uno de los atributos y operaciones de C como si eso atributos y operaciones hubiesen sido definidos por la misma D

bull Objeto entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (meacutetodos) Corresponden a los objetos reales del mundo que nos rodea o a objetos internos del sistema (del programa) Es una instancia a una clase

bull Meacutetodo algoritmo asociado a un objeto (o a una clase de objetos) cuya ejecucioacuten se desencadena tras la recepcioacuten de un mensaje Desde el punto de vista del comportamiento es lo que el objeto puede hacer Un meacutetodo puede producir un cambio en las propiedades del objeto o la generacioacuten de un evento con un nuevo mensaje para otro objeto del sistema

bull Evento un suceso en el sistema (tal como una interaccioacuten del usuario con la maacutequina o un mensaje enviado por un objeto) El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente Tambieacuten se puede definir como evento a la reaccioacuten que puede desencadenar un objeto es decir la accioacuten que genera

bull Mensaje una comunicacioacuten dirigida a un objeto que le ordena que ejecute uno de sus meacutetodos con ciertos paraacutemetros asociados al evento que lo generoacute

bull Propiedad o atributo contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos) que hace los datos visibles desde fuera del objeto y esto se define como sus caracteriacutesticas predeterminadas y cuyo valor puede ser alterado por la ejecucioacuten de alguacuten meacutetodo

bull Estado interno es una propiedad invisible de los objetos que puede ser uacutenicamente accedida y alterada por un meacutetodo del objeto y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos)

bull Componentes de un objetoatributos identidad relaciones y meacutetodos bull Representacioacuten de un objeto un objeto se representa por medio de una tabla o

entidad que esteacute compuesta por sus atributos y funciones correspondientes

En comparacioacuten con un lenguaje imperativo una variable no es maacutes que un contenedor interno del atributo del objeto o de un estado interno asiacute como la funcioacuten es un procedimiento interno del meacutetodo del objeto

Caracteriacutesticas de la POO [editar]

Hay un cierto desacuerdo sobre exactamente queacute caracteriacutesticas de un meacutetodo de programacioacuten o lenguaje le definen como orientado a objetos pero hay un consenso general en que las caracteriacutesticas siguientes son las maacutes importantes (para maacutes informacioacuten seguir los enlaces respectivos)

bull Abstraccioacuten Cada objeto en el sistema sirve como modelo de un agente abstracto que puede realizar trabajo informar y cambiar su estado y comunicarse con otros objetos en el sistema sin revelar coacutemo se implementan estas caracteriacutesticas Los procesos las funciones o los meacutetodos pueden tambieacuten ser abstraiacutedos y cuando lo estaacuten una variedad de teacutecnicas son requeridas para ampliar una abstraccioacuten

bull Encapsulamiento Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad al mismo nivel de abstraccioacuten Esto permite aumentar la cohesioacuten de los componentes del sistema Algunos autores confunden este concepto con el principio de ocultacioacuten principalmente porque se suelen emplear conjuntamente

bull Principio de ocultacioacuten Cada objeto estaacute aislado del exterior es un moacutedulo natural y cada tipo de objeto expone una interfaz a otros objetos que especifica coacutemo pueden interactuar con los objetos de la clase El aislamiento protege a las propiedades de un objeto contra su modificacioacuten por quien no tenga derecho a acceder a ellas solamente los propios meacutetodos internos del objeto pueden acceder a su estado Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas eliminando efectos secundarios e interacciones inesperadas Algunos lenguajes relajan esto permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstraccioacuten La aplicacioacuten entera se reduce a un agregado o rompecabezas de objetos

bull Polimorfismo comportamientos diferentes asociados a objetos distintos pueden compartir el mismo nombre al llamarlos por ese nombre se utilizaraacute el comportamiento correspondiente al objeto que se esteacute usando O dicho de otro modo las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos y la invocacioacuten de un comportamiento en una referencia produciraacute el comportamiento correcto para el tipo real del objeto referenciado Cuando esto ocurre en tiempo de ejecucioacuten esta uacuteltima caracteriacutestica se llama asignacioacuten tardiacutea o asignacioacuten dinaacutemica Algunos lenguajes proporcionan medios maacutes estaacuteticos (en tiempo de compilacioacuten) de polimorfismo tales como las plantillas y la sobrecarga de operadores de C++

bull Herencia las clases no estaacuten aisladas sino que se relacionan entre siacute formando una jerarquiacutea de clasificacioacuten Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes Estos pueden compartir (y extender) su comportamiento sin tener que reimplementar su comportamiento Esto suele hacerse habitualmente agrupando los objetos en

clases y estas en aacuterboles o enrejados que reflejan un comportamiento comuacuten Cuando un objeto hereda de maacutes de una clase se dice que hay herencia muacuteltiple

Lenguajes orientados a objetos [editar]

Entre los lenguajes orientados a objetos destacan los siguientes

bull ActionScript bull ActionScript 3 bull Ada bull C++ bull C bull Clarion bull Lenguaje de programacioacuten D bull Object Pascal (Delphi) bull Harbour bull Eiffel bull Java bull JavaScript (la herencia se realiza por medio de la programacioacuten basada en

prototipos) bull Lexico (en castellano) bull Objective-C bull Ocaml bull Oz bull Lenguaje de programacioacuten R bull Perl (soporta herencia muacuteltiple La resolucioacuten se realiza en preorden pero puede

modificarse al algoritmo C3 por medio del moacutedulo ClassC3 en CPAN) bull PHP (en su versioacuten 5) bull Python bull Ruby bull Smalltalk bull Magik (SmallWorld) bull VBNET bull Visual FoxPro bull XBase++ bull Gambas bull Flex builder (adobe)

Muchos de estos lenguajes de programacioacuten no son puramente orientados a objetos sino que son hiacutebridos que combinan la POO con otros paradigmas

Al igual que C++ otros lenguajes como OOCOBOL OOLISP OOPROLOG y Object REXX han sido creados antildeadiendo extensiones orientadas a objetos a un lenguaje de programacioacuten claacutesico

Un nuevo paso en la abstraccioacuten de paradigmas de programacioacuten es la Programacioacuten Orientada a Aspectos (POA) Aunque es todaviacutea una metodologiacutea en estado de maduracioacuten cada vez atrae a maacutes investigadores e incluso proyectos comerciales en todo el mundo

Monografiacuteascom

Programacioacuten Orientada a ObjetosSistemas de Procesamiento de Datos

INTRODUCCION

Actualmente una de las aacutereas maacutes candentes en la industria y en el aacutembito acadeacutemico es la orientacioacuten a objetos La orientacioacuten a objetos promete mejoras de amplio alcance en la forma de disentildeo desarrollo y mantenimiento del software ofreciendo una solucioacuten a largo plazo a los problemas y preocupaciones que han existido desde el comienzo en el desarrollo de software la falta de portabilidad del coacutedigo y reusabilidad coacutedigo que es dificil de modificar ciclos de desarrollo largos y tecnicas de codificacion no intuituvas

Un lenguaje orientado a objetos ataca estos problemas Tiene tres caracteriacutesticas basicas debe estar basado en objetos basado en clases y capaz de tener herencia de clases Muchos lenguajes cumplen uno o dos de estos puntos muchos menos cumplen los tres La barrera maacutes difiacutecil de sortear es usualmente la herencia

El concepto de programacioacuten orientada a objetos (OOP) no es nuevo lenguajes claacutesicos como SmallTalk se basan en ella Dado que la OOP se basa en la idea natural de la existencia de un mundo lleno de objetos y que la resolucioacuten del problema se realiza en teacuterminos de objetos un lenguaje se dice que estaacute basado en objetos si soporta objetos como una caracteriacutestica fundamental del mismo

El elemento fundamental de la OOP es como su nombre lo indica el objeto Podemos definir un objeto como un conjunto complejo de datos y programas que poseen estructura y forman parte de una organizacioacuten

Esta definicioacuten especifica varias propiedades importantes de los objetos En primer lugar un objeto no es un dato simple sino que contiene en su interior cierto nuacutemero de componentes bieacuten estructurados En segundo lugar cada objeto no es un ente aislado sino que forma parte de una organizacioacuten jeraacuterquica o de otro tipo

ESTRUCTURA DE UN OBJETO

Un objeto puede considerarse como una especie de caacutepsula dividida en tres partes

1 - RELACIONES

2 - PROPIEDADES

3 - METODOS

Cada uno de estos componentes desempentildea un papel totalmente independiente

Las relaciones permiten que el objeto se insterte en la organizacioacuten y estaacuten formadas esencialmente por punteros a otros objetos

Las propiedades distinguen un objeto determinado de los restantes que forman parte de la misma organizacioacuten y tiene valores que dependen de la propiedad de que se trate Las propiedades de un objeto pueden ser heredadas a sus descendientes en la organizacioacuten

Los meacutetodos son las operaciones que pueden realizarse sobre el objeto que normalmente estaraacuten incorporados en forma de programas (coacutedigo) que el objeto es capaz de ejecutar y que tambieacuten pone a disposicioacuten de sus descendientes a traveacutes de la herencia

Encapsulamiento y ocultacioacuten

Como hemos visto cada objeto es una estructura compleja en cuyo interior hay datos y programas todos ellos relacionados entre siacute como si estuvieran encerrados conjuntamente en una caacutepsula Esta propiedad (encapsulamiento) es una de las caracteriacutesticas fundamentales en la OOP

Los objetos son inaccesibles e impiden que otros objetos los usuarios o incluso los programadores conozcan coacutemo estaacute distribuiacuteda la informacioacuten o queacute informacioacuten hay disponible Esta propiedad de los objetos se denomina ocultacioacuten de la informacioacuten

Esto no quiere decir sin embargo que sea imposible conocer lo necesario respecto a un objeto y a lo que contiene Si asiacute fuera no se podriacutea hacer gran cosa con eacutel Lo que sucede es que las peticiones de informacioacuten a un objeto deben realizarse a traveacutes de mensajes dirigidos a eacutel con la orden de realizar la operacioacuten pertinente La respuesta a estas ordenes seraacute la informacioacuten requerida siempre que el objeto considere que quien enviacutea el mensaje estaacute autorizado para obtenerla

El hecho de que cada objeto sea una caacutepsula facilita enormemente que un objeto determinado pueda ser transportado a otro punto de la organizacioacuten o incluso a otra organizacioacuten totalmente diferente que precise de eacutel Si el objeto ha sido bien construiacutedo sus meacutetodos seguiraacuten funcionando en el nuevo entorno sin problemas Esta cualidad hace que la OOP sea muy apta para la reutilizacioacuten de programas

Organizacioacuten de los objetos

En principio los objetos forman siempre una organizacioacuten jeraacuterquica en el sentido de que ciertos objetos son superiores a otros de cierto modo

Existen varios tipos tipos de jerarquiacuteas seraacuten simples cuando su estructura pueda ser representada por medio de un arbol En otros casos puede ser maacutes compleja

En cualquier caso sea la estructura simple o compleja podraacuten distinguirse en ella tres niveles de objetos

-La raiacutez de la jerarquiacutea Se trata de un objeto uacutenico y especial Este se caracteriacuteza por estar en el nivel maacutes alto de la estructura y suele recibir un nombre muy geneacuterico que indica su categoriacutea especial como por ejemplo objeto madre Raiacutez o Entidad

-Los objetos intermedios Son aquellos que descienden directamente de la raiacutez y que a su vez tienen descendientes Representan conjuntos o clases de objetos que pueden ser muy generales o muy especializados seguacuten la aplicacioacuten Normalmente reciben nombres geneacutericos que denotan al conjunto de objetos que representan por ejemplo VENTANA CUENTA FICHERO En un conjunto reciben el nombre de clases o tipos si descienden de otra clase o subclase

-Los objetos terminales Son todos aquellos que descienden de una clase o subclase y no tienen descendientes Suelen llamarse casos particulares instancias o iacutetems porque representan los elementos del conjunto representado por la clase o subclase a la que pertenecen

Veamos ahora en detalle los tres elementos mencionados en Estructura de un Objeto

1 RELACIONES

Las relaciones entre objetos son precisamente los enlaces que permiten a un objeto relacionarse con aquellos que forman parte de la misma organizacioacuten

Las hay de dos tipos fundamentales

-Relaciones jeraacuterquicas Son esenciales para la existencia misma de la aplicacioacuten porque la construyen Son bidireccionales es decir un objeto es padre de otro cuando el primer objeto se encuentra situado inmediatamente encima del segundo en la organizacioacuten en la que ambos forman parte asimismo si un objeto es padre de otro el segundo es hijo del primero (en la fig 2 B es padre de DE y F es decir DE y F son hijos de B en la fig 3 los objetos B y C son padres de F que a su vez es hijo de ambos)

Una organizacioacuten jeraacuterquica simple puede definirse como aquella en la que un objeto puede tener un solo padre mientras que en una organizacion jeraacuterquica compleja un hijo puede tener varios padres)

-Relaciones semaacutenticas Se refieren a las relaciones que no tienen nada que ver con la organizacioacuten de la que forman parte los objetos que las establecen Sus

propiedades y consecuencia solo dependen de los objetos en siacute mismos (de su significado) y no de su posicioacuten en la organizacioacuten

Se puede ver mejor con un ejemplo supongamos que vamos a construir un diccionario informatizado que permita al usuario obtener la definicioacuten de una palabra cualquiera Supongamos que en dicho diccionario las palabras son objetos y que la organizacioacuten jeraacuterquica es la que proviene de forma natural de la estructura de nuestros conocimientos sobre el mundo

La raiacutez del diccionario podriacutea llamarse TEMAS De eacuteste teacutermino geneacuterico descenderaacuten tres grandes ramas de objetos llamadas VIDA MUNDO y HOMBRE El primero (vida) comprenderaacute las ciencias bioloacutegicas Biologiacutea y Medicina El segundo (mundo) las ciencias de la naturaleza inerte las Matemaacuteticas la Fiacutesica la Quiacutemica y la Geologiacutea El tercero (hombre) comprenderaacute las ciencias humanas la Geografiacutea la Historia etc

Veamos un ejemplo estableceremos la relacioacuten trabajo entre los objetos NEWTON y OPTICA y la interpretaremos diciendo que significa que Newton trabajoacute en oacuteptica (veacutease la fig 4) La relacioacuten es evidentemente semaacutentica pueacutes no establece ninguna connotacioacuten jeraacuterquica entre NEWTON y OPTICA y su interpretacioacuten depende exclusivamente del significado de ambos objetos

La existencia de esta relacioacuten nos permitiraacute responder a preguntas como

iquestQuieacuten trabajoacute en oacuteptica

iquestEn queacute trabajoacute Newton

iquestQuien trabajoacute en Fiacutesica

Las dos primeras se deducen inmediatamente de la existencia de la relacioacuten trabajo Para la tercera observamos que si Newton trabajoacute en oacuteptica automaacuteticamente sabemos que trabajoacute en Fiacutesica por ser oacuteptica una rama de la Fiacutesica (en nuestro diccionario el objeto OPTICA es hijo del objeto FISICA) Entonces gracias a la OOP podemos responder a la tercera pregunta sin necesidad de establecer una relacioacuten entre NEWTON y FISICA apoyandonos soacutelo en la relacioacuten definida entre NEWTON y OPTICA y en que OPTICA es hijo de FISICA De este modo se elimina toda redundancia innecesaria y la cantidad de informacioacuten que tendremos que definir para todo el diccionario seraacute miacutenima

2 PROPIEDADES

Todo objeto puede tener cierto nuacutemero de propiedades cada una de las cuales tendraacute a su vez uno o varios valores En OOP las propiedades corresponden a las claacutesicas variables de la programacioacuten estructurada Son por lo tanto datos encapsulados dentro del objeto junto con los meacutetodos (programas) y las relaciones (punteros a otros objetos) Las propiedades de un objeto pueden tener un valor uacutenico o pueden contener un conjunto de valores mas o menos estructurados (matrices vectores listas etc) Ademaacutes los valores pueden ser de cualquier tipo (numeacuterico alfabeacutetico etc) si el sistema de programacioacuten lo permite

Pero existe una diferencia con las variables y es que las propiedades se pueden heredar de unos objetos a otros En consecuencia un objeto puede tener una propiedad de maneras diferentes

-Propiedades propias Estaacuten formadas dentro de la caacutepsula del objeto

-Propiedades heredadas Estan definidas en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estas propiedades se llaman propiedades miembro porque el objeto las posee por el mero hecho de ser miembro de una clase

3 METODOS

Una operacioacuten que realiza acceso a los datos Podemos definir meacutetodo como un programa procedimental o procedural escrito en cualquier lenguaje que estaacute asociado a un objeto determinado y cuya ejecucioacuten soacutelo puede desencadenarse a traveacutes de un mensaje recibido por eacuteste o por sus descendientes

Son sinoacutenimos de meacutetodo todos aquellos teacuterminos que se han aplicado tradicionalmente a los programas como procedimiento funcioacuten rutina etc Sin embargo es conveniente utilizar el teacutermino meacutetodo para que se distingan claramente las propiedades especiales que adquiere un programa en el entorno OOP que afectan fundamentalmente a la forma de invocarlo (uacutenicamente a traveacutes de un mensaje) y a su campo de accioacuten limitado a un objeto y a sus descendientes aunque posiblemente no a todos

Si los meacutetodos son programas se deduce que podriacutean tener argumentos o paraacutemetros Puesto que los meacutetodos pueden heredarse de unos objetos a otros un objeto puede disponer de un meacutetodo de dos maneras diferentes

-Meacutetodos propios Estaacuten incluiacutedos dentro de la caacutepsula del objeto

-Meacutetodos heredados Estan definidos en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estos meacutetodos se llaman meacutetodos miembro porque el objeto los posee por el mero hecho de ser miembro de una clase

Polimorfiacutesmo

Una de las caracteriacutesticas fundamentales de la OOP es el polimorfiacutesmo que no es otra cosa que la posibilidad de construir varios meacutetodos con el mismo nombre pero con relacioacuten a la clase a la que pertenece cada uno con comportamientos diferentes Esto conlleva la habilidad de enviar un mismo mensaje a objetos de clases diferentes Estos objetos recibiriacutean el mismo mensaje global pero responderiacutean a eacutel de formas diferentes por ejemplo un mensaje + a un objeto ENTERO significariacutea suma mientras que para un objeto STRING significariacutea concatenacioacuten (pegar strings uno seguido al otro)

Demonios

Es un tipo especial de meacutetodos relativamente poco frecuente en los sistemas de OOP que se activa automaacuteticamente cuando sucede algo especial Es decir es un programa como los meacutetodos ordinarios pero se diferencia de estos porque su ejecucioacuten no se activa con un mensaje sino que se desencadena autmaacuteticamente

cuando ocurre un suceso determinado la asignacioacuten de un valor a una propiedad de un objeto la lectura de un valor determinado etc

Los demonios cuando existen se diferencian de otros meacutetodos por que no son heredables y porque a veces estaacuten ligados a una de las propiedades de un objeto mas que al objeto entero

CONSIDERACIONES FINALES

Beneficios que se obtienen del desarrollo con OOP

Diacutea a diacutea los costos del Hardware decrecen Asiacute surgen nuevas aacutereas de aplicacioacuten cotidianamente procesamiento de imaacutegenes y sonido bases de datos multimediales automatizacioacuten de oficinas ambientes de ingenieriacutea de software etc Auacuten en las aplicaciones tradicionales encontramos que definir interfases hombre-maacutequina a-la-Windows suele ser bastante conveniente

Lamentablemente los costos de produccioacuten de software siguen aumentando el mantenimiento y la modificacioacuten de sistemas complejos suele ser una tarea trabajosa cada aplicacioacuten (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo etc

Todos estos problemas auacuten no han sido solucionados en forma completa Pero como los objetos son portables (teoacutericamente) mientras que la herencia permite la reusabilidad del coacutedigo orientado a objetos es maacutes sencillo modificar coacutedigo existente porque los objetos no interaccionan excepto a traveacutes de mensajes en consecuencia un cambio en la codificacioacuten de un objeto no afectaraacute la operacioacuten con otro objeto siempre que los meacutetodos respectivos permanezcan intactos La introduccioacuten de tecnologiacutea de objetos como una herramienta concepual para analizar disentildear e implementar aplicaciones permite obtener aplicaciones maacutes modificables faacutecilmente extendibles y a partir de componentes reusables Esta reusabilidad del coacutedigo disminuye el tiempo que se utiliza en el desarrollo y hace que el desarrollo del software sea mas intuitivo porque la gente piensa naturalmente en teacuterminos de objetos maacutes que en teacuterminos de algoritmos de software

Problemas derivados de la utilizacioacuten de OOP en la actualidad

Un sistema orientado a objetos por lo visto puede parecer un paraiacuteso virtual El problema sin embargo surge en la implementacioacuten de tal sistema Muchas compantildeiacuteas oyen acerca de los beneficios de un sistema orientado a objetos e invierten gran cantidad de recursos luego comienzan a darse cuenta que han impuesto una nueva cultura que es ajena a los programadores actuales Especiacuteficamente los siguientes temas suelen aparecer repetidamente

Curvas de aprendizaje largas Un sistema orientado a objetos ve al mundo en una forma uacutenica Involucra la conceptualizacioacuten de todos los elementos de un programa desde subsistemas a los datos en la forma de objetos Toda la comunicacioacuten entre los objetos debe realizarse en la forma de mensajes Esta no es la forma en que estaacuten escritos los programas orientados a objetos actualmente al hacer la transicioacuten a un sistema orientado a objetos la mayoriacutea de los programadores deben capacitarse nuevamente antes de poder usarlo

Dependencia del lenguaje A pesar de la portabilidad conceptual de los objetos en un sistema orientado a objetos en la praacutectica existen muchas dependencias Muchos lenguajes orientados a objetos estaacuten compitiendo actualmente para dominar el mercado Cambiar el lenguaje de implementacioacuten de un sistema orientado a objetos no es una tarea sencilla por ejemplo C++ soporta el concepto de herencia multiple mientras que SmallTalk no lo soporta en consecuencia la eleccioacuten de un lenguaje tiene ramificaciones de disentildeo muy importamtes

Determinacion de las clases Una clase es un molde que se utiliza para crear nuevos objetos En consecuencia es importante crear el conjunto de clases adecuado para un proyecto Desafortunadamente la definicioacuten de las clases es maacutes un arte que una ciencia Si bien hay muchas jerarquiacuteas de clase predefinidas usualmente se deben crear clases especiacuteficas para la aplicacioacuten que se este desarrollando Luego en 6 meses oacute 1 antildeo se da cuenta que las clases que se establecieron no son posibles en ese caso seraacute necesario reestructurar la jerarquiacutea de clases devastando totalmente la planificacioacuten original

Performance En un sistema donde todo es un objeto y toda interaccion es a traveacutes de mensajes el traacutefico de mensajes afecta la performance A medida que la tecnologiacutea avanza y la velocidad de microprocesamiento potencia y tamantildeo de la memoria aumentan la situacion mejoraraacute pero en la situacioacuten actual un disentildeo de una aplicacioacuten orientada a objetos que no tiene en cuenta la performance no seraacute viable comercialmente

Idealmente habriacutea una forma de atacar estos problemas eficientemente al mismo tiempo que se obtienen los beneficios del desarrollo de una estrategia orientada a objetos Deberia existir una metodologiacutea faacutecil de aprender e independiente del lenguaje y facil de reestructurar que no drene la performance del sistema

Monografiacuteascom

Programacioacuten orientada a Objetos(OOP Object Oriented Programming)

1 Introduccioacuten 2 Objetos 3 Disentildeo de aplicaciones y eleccioacuten de entorno 4 Aplicaciones orientadas a objetos 5 Caracteriacutesticas de los lenguajes OOP 6 Panoraacutemica de los lenguajes OOP 7 Bases de datos orientadas a objetos 8 Objetos y asociaciones

9 La relacioacuten de herencia 10 Bibliografiacutea infografiacutea

Introduccioacuten

l teacutermino de Programacioacuten Orientada a Objetos indica maacutes una forma de disentildeo y una metodologiacutea de desarrollo de software que un lenguaje de programacioacuten ya que en realidad se puede aplicar el Disentildeo Orientado a Objetos (En ingleacutes abreviado OOD Object Oriented Design) a cualquier tipo de lenguaje de programacioacuten

El desarrollo de la OOP empieza a destacar durante la deacutecada de lo 80 tomando en cuenta la programacioacuten estructurada a la que engloba y dotando al programador de nuevos elementos para el anaacutelisis y desarrollo de software

El propoacutesito de este trabajo es explicar el disentildeo orientado a objeto y no una explicacioacuten de su programacioacuten puesto que no nos alcanzariacutea toda la curriacutecula para hacerlo

Baacutesicamente la OOP permite a los programadores escribir software de forma que esteacute organizado en la misma manera que el problema que trata de modelizar Los lenguajes de programacioacuten convencionales son poco maacutes que una lista de acciones a realizar sobre un conjunto de datos en una determinada secuencia Si en alguacuten punto del programa modificamos la estructura de los datos o la accioacuten realizada sobre ellos el programa cambia

La OOP aporta un enfoque nuevo convirtiendo la estructura de datos en el centro sobre el que pivotan las operaciones De esta forma cualquier modificacioacuten de la estructura de datos tiene efecto inmediato sobre las acciones a realizar sobre ella

siendo esta una de la diferencias radicales respecto a la programacioacuten estructurada

Para quienes no estaacuten familiarizados con la programacioacuten estructurada direacute que una de las bases de esta escuela de programacioacuten parte del disentildeo arriba ndash abajo En esta forma de disentildeo se descomponen los requerimientos del programa paso a paso hasta llegar a un nivel que permite expresarlos mediante procedimientos y funciones La OOP estructura los datos en objetos que pueden almacenar manipular y combinar informacioacuten

En resumen la programacioacuten estructurada presta atencioacuten al conjunto de acciones que manipulan el flujo de datos (desde la situacioacuten inicial a la final) mientras que la programacioacuten orientada a objetos presta atencioacuten a la interrelacioacuten que existe entre los datos y las acciones a realizar con ellos

Muchos habraacuten oiacutedo comentarios sobre la incidencia de la OOP sobre la programacioacuten convencional Se ha llegado a decir que el cambio introducido por la OOP es similar al producido por la aparicioacuten del ensamblador sobre el coacutedigo de maacutequina

La OOP proporciona las siguientes ventajas sobre otros lenguajes de programacioacuten

Uniformidad Ya que la representacioacuten de los objetos lleva implica tanto el anaacutelisis como el disentildeo y la codificacioacuten de los mismos

Comprensioacuten Tanto los datos que componen los objetos como los procedimientos que los manipulan estaacuten agrupados en clases que se corresponden con las estructuras de informacioacuten que el programa trata

Flexibilidad Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar cualquier cambio que se realice sobre ellos quedaraacute reflejado automaacuteticamente en cualquier lugar donde estos datos aparezcan

Estabilidad Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo

Reusabilidad La nocioacuten de objeto permite que programas que traten las mismas estructuras de informacioacuten reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan De esta forma el desarrollo de un programa puede llegar a ser una simple combinacioacuten de objetos ya definidos donde estos estaacuten relacionados de una manera particular

Uno de los puntos clave a remarcar en esta introduccioacuten es que la programacioacuten orientada a objetos no sustituye a ninguna metodologiacutea ni lenguaje de programacioacuten anterior Todos los programas que se realizan seguacuten OOD se pueden realizar igualmente mediante programacioacuten estructurada Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas

basadas en un interface de usuario graacutefico como Windows OS2 x-Windows etc Es mucho maacutes sencillo

OBJETOS

Caracteriacutesticas de los Objetos

Identidad del Objeto

La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos son distintos entre siacute De esta forma incluso una serie de Objetos coches recieacuten fabricados son distintos los unos de los otros

La afirmacioacuten anterior aunque parece obvia tiene importancia cuando descendemos al nivel de programacioacuten En este aacutembito cada uno de los objetos tiene un controlador pro el cual se identifica Este puede ser una variable una estructura de datos una cadena de caracteres etc El controlador seraacute distinto para cada uno de los objeto aunque las referencias a eacutestos sean uniformes e independientes del contenido permitiendo crear agrupaciones de objetos con el mismo tratamiento

Clasificacioacuten

Con la clasificacioacuten comienza la verdadera programacioacuten orientada a objetos Ellos nos obliga a una abstraccioacuten del concepto de objeto denominada clase

Las clases permiten la agrupacioacuten de objetos que comparten las mismas propiedades y comportamiento Si bien clase y objeto suelen usarse como sinoacutenimos no lo son

El esfuerzo del programador ante una aplicacioacuten orientada a objetos se centra en la identificacioacuten de las clases sus atributos y operaciones asociadas

Las propiedades de cada clase deben cumplir una serie de premisas

Las propiedades deber ser significativas dentro del entorno de la aplicacioacuten es decir deben servir para identificar claramente y de una manera uacutenica (y univoca) a cada uno de los objetos

El nuacutemero de propiedades de un objeto debe ser el miacutenimo para realizar todas las operaciones que requiera la aplicacioacuten

Definamos una clase rectaacutengulo Esta clase puede tener como atributos un punto (xy) la anchura (a) y la longitud (l) Las operaciones a realizar son mover agrandar reducir et iquestEs posible realizarlas con las propiedades de la clase

Un anaacutelisis posterior nos indica que es posible la realizacioacuten de estas operaciones con los atributos definidos Pero si incluimos la operacioacuten girar vemos que con las propiedades definidas para la clase esta operacioacuten no se puede realizar Para incluir esta nueva operacioacuten debemos redefinir las propiedades del objeto en este caso las coordenadas de los veacutertices

Encapsulacioacuten y ocultacioacuten de datos

La capacidad de presentacioacuten de informacioacuten dentro de un objeto se divide en dos partes bien diferenciadas

Interna La informacioacuten que necesita el objeto para operar y que es innecesaria para los demaacutes objetos de la aplicacioacuten Estos atributos se denominada privados y tienen como marco de aplicacioacuten uacutenicamente a las operaciones asociadas al objeto

Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos Estas propiedades se denominan puacuteblicas y corresponde a la informacioacuten que necesitan conocer los restantes objetos de la aplicacioacuten respecto del objeto definido para poder operar

Podemos imaginarla encapsulacioacuten como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida Si introducimos datos por la entrada automaacuteticamente obtendraacute un resultado en la salida No necesita conocer ninguacuten detalle del funcionamiento interno de la caja

El teacutermino encapsulacioacuten indica l capacidad que tienen los objetos de construir una caacutepsula a su alrededor ocultando la informacioacuten que contienen (aqueacutella que es necesaria para su funcionamiento interno pero innecesaria para los demaacutes objetos) a las otras clases que componen la aplicacioacuten

Aunque a primera vista la encapsulacioacuten puede parecer superflua tengamos en cuenta que existen muchas variables utilizadas de forma temporal contadores y variables que contienen resultados intermedios etc D no ser por la encapsulacioacuten estas variables ocupariacutean memoria y podriacutean interferir en el funcionamiento del resto de los objetos

La encapsulacioacuten no es exclusiva de los lenguajes de programacioacuten orientados a objetos Aparece en los lenguajes basados en procedimientos (PASCAL C COBOL ETC) como una forma de proteger los datos que se manipulan dentro de las funciones

Los lenguajes OOP incorporan la posibilidad de encapsular tambieacuten las estructuras de datos que sirven como base a las funciones Aportan por tanto un nivel superior en cuanto a proteccioacuten de informacioacuten

La encapsulacioacuten nos permite el uso de libreriacuteas de objetos para el desarrollo de nuestros programas Recordemos que las libreriacuteas son definiciones de objetos de propoacutesito general que se incorporan a los programas Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde estaacute definido ya que contiene y define todo lo que necesita para poder funcionar es faacutecil utilizarlo en los mas variados tipos de aplicaciones Si aseguramos depurando las propiedades y las operaciones dentro de la clase que el objeto funcioacuten bien dentro de una aplicacioacuten con una correcta encapsulacioacuten el objeto podraacute funcionar en cualquier otra

Otra de las ventajas de la encapsulacioacuten es que al definir el objeto como una caja negra con entradas y salida asociadas en cualquier momento podemos cambiar el contenido de las operaciones del objeto de manera que no afecte al funcionamiento general del programa

La encapsulacioacuten estaacute en el nuacutecleo de dos grandes pilares de la construccioacuten de sistemas mantenibilidad y reusabilidad

Mantenibilidad

Cualidad que indica que un programa o sistema debe ser faacutecilmente modificable Es decir que los cambios en las condiciones externas (como la definicioacuten de una nueva variable) implicaraacuten modificaciones pequentildeas en el programa sistema El concepto de mantenibilidad implica que un programa al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante

Reusabilidad

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccioacuten de otros programas Ello implica que los objetos definidos en un programa pueden ser extraiacutedos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el coacutedigo del objeto El objeto final es que el programador construya una libreriacutea de objetos que le permita realizar programas basaacutendose en la teacutecnica de cortar y pegar Esta extrae (corta) coacutedigo de otras aplicaciones ya realizadas y las implementa (pega) en la aplicacioacuten a realizar donde tras algunos retoques la nueva aplicacioacuten estaraacute lista para funcionar Como podraacute observar el concepto de reusabilidad permite reducir el tiempo de realizacioacuten ganando en claridad mantenibilidad y productividad

La encapsulacioacuten de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad con el uacutenico coste adicional de definir con precisioacuten las entradas y salida de nuestras operaciones

Poliformismo

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 3: 2983238 programacion-orientada-a-objetos

la implementacioacuten de la maacutequina virtual de Java en la mayoriacutea de navegadores PHP en su versioacuten 5 se ha ido modificando y soporta una orientacioacuten completa a objetos cumpliendo todas las caracteriacutesticas propias de la orientacioacuten a objetos

Conceptos fundamentales [editar]

La programacioacuten orientada a objetos es una nueva forma de programar que trata de encontrar una solucioacuten a estos problemas Introduce nuevos conceptos que superan y ampliacutean conceptos antiguos ya conocidos Entre ellos destacan los siguientes

bull Clase definiciones de las propiedades y comportamiento de un tipo de objeto concreto La instanciacioacuten es la lectura de estas definiciones y la creacioacuten de un objeto a partir de ellas (de c a d)Es la facilidad mediante la cual la clase D ha definido en ella cada uno de los atributos y operaciones de C como si eso atributos y operaciones hubiesen sido definidos por la misma D

bull Objeto entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (meacutetodos) Corresponden a los objetos reales del mundo que nos rodea o a objetos internos del sistema (del programa) Es una instancia a una clase

bull Meacutetodo algoritmo asociado a un objeto (o a una clase de objetos) cuya ejecucioacuten se desencadena tras la recepcioacuten de un mensaje Desde el punto de vista del comportamiento es lo que el objeto puede hacer Un meacutetodo puede producir un cambio en las propiedades del objeto o la generacioacuten de un evento con un nuevo mensaje para otro objeto del sistema

bull Evento un suceso en el sistema (tal como una interaccioacuten del usuario con la maacutequina o un mensaje enviado por un objeto) El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente Tambieacuten se puede definir como evento a la reaccioacuten que puede desencadenar un objeto es decir la accioacuten que genera

bull Mensaje una comunicacioacuten dirigida a un objeto que le ordena que ejecute uno de sus meacutetodos con ciertos paraacutemetros asociados al evento que lo generoacute

bull Propiedad o atributo contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos) que hace los datos visibles desde fuera del objeto y esto se define como sus caracteriacutesticas predeterminadas y cuyo valor puede ser alterado por la ejecucioacuten de alguacuten meacutetodo

bull Estado interno es una propiedad invisible de los objetos que puede ser uacutenicamente accedida y alterada por un meacutetodo del objeto y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos)

bull Componentes de un objetoatributos identidad relaciones y meacutetodos bull Representacioacuten de un objeto un objeto se representa por medio de una tabla o

entidad que esteacute compuesta por sus atributos y funciones correspondientes

En comparacioacuten con un lenguaje imperativo una variable no es maacutes que un contenedor interno del atributo del objeto o de un estado interno asiacute como la funcioacuten es un procedimiento interno del meacutetodo del objeto

Caracteriacutesticas de la POO [editar]

Hay un cierto desacuerdo sobre exactamente queacute caracteriacutesticas de un meacutetodo de programacioacuten o lenguaje le definen como orientado a objetos pero hay un consenso general en que las caracteriacutesticas siguientes son las maacutes importantes (para maacutes informacioacuten seguir los enlaces respectivos)

bull Abstraccioacuten Cada objeto en el sistema sirve como modelo de un agente abstracto que puede realizar trabajo informar y cambiar su estado y comunicarse con otros objetos en el sistema sin revelar coacutemo se implementan estas caracteriacutesticas Los procesos las funciones o los meacutetodos pueden tambieacuten ser abstraiacutedos y cuando lo estaacuten una variedad de teacutecnicas son requeridas para ampliar una abstraccioacuten

bull Encapsulamiento Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad al mismo nivel de abstraccioacuten Esto permite aumentar la cohesioacuten de los componentes del sistema Algunos autores confunden este concepto con el principio de ocultacioacuten principalmente porque se suelen emplear conjuntamente

bull Principio de ocultacioacuten Cada objeto estaacute aislado del exterior es un moacutedulo natural y cada tipo de objeto expone una interfaz a otros objetos que especifica coacutemo pueden interactuar con los objetos de la clase El aislamiento protege a las propiedades de un objeto contra su modificacioacuten por quien no tenga derecho a acceder a ellas solamente los propios meacutetodos internos del objeto pueden acceder a su estado Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas eliminando efectos secundarios e interacciones inesperadas Algunos lenguajes relajan esto permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstraccioacuten La aplicacioacuten entera se reduce a un agregado o rompecabezas de objetos

bull Polimorfismo comportamientos diferentes asociados a objetos distintos pueden compartir el mismo nombre al llamarlos por ese nombre se utilizaraacute el comportamiento correspondiente al objeto que se esteacute usando O dicho de otro modo las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos y la invocacioacuten de un comportamiento en una referencia produciraacute el comportamiento correcto para el tipo real del objeto referenciado Cuando esto ocurre en tiempo de ejecucioacuten esta uacuteltima caracteriacutestica se llama asignacioacuten tardiacutea o asignacioacuten dinaacutemica Algunos lenguajes proporcionan medios maacutes estaacuteticos (en tiempo de compilacioacuten) de polimorfismo tales como las plantillas y la sobrecarga de operadores de C++

bull Herencia las clases no estaacuten aisladas sino que se relacionan entre siacute formando una jerarquiacutea de clasificacioacuten Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes Estos pueden compartir (y extender) su comportamiento sin tener que reimplementar su comportamiento Esto suele hacerse habitualmente agrupando los objetos en

clases y estas en aacuterboles o enrejados que reflejan un comportamiento comuacuten Cuando un objeto hereda de maacutes de una clase se dice que hay herencia muacuteltiple

Lenguajes orientados a objetos [editar]

Entre los lenguajes orientados a objetos destacan los siguientes

bull ActionScript bull ActionScript 3 bull Ada bull C++ bull C bull Clarion bull Lenguaje de programacioacuten D bull Object Pascal (Delphi) bull Harbour bull Eiffel bull Java bull JavaScript (la herencia se realiza por medio de la programacioacuten basada en

prototipos) bull Lexico (en castellano) bull Objective-C bull Ocaml bull Oz bull Lenguaje de programacioacuten R bull Perl (soporta herencia muacuteltiple La resolucioacuten se realiza en preorden pero puede

modificarse al algoritmo C3 por medio del moacutedulo ClassC3 en CPAN) bull PHP (en su versioacuten 5) bull Python bull Ruby bull Smalltalk bull Magik (SmallWorld) bull VBNET bull Visual FoxPro bull XBase++ bull Gambas bull Flex builder (adobe)

Muchos de estos lenguajes de programacioacuten no son puramente orientados a objetos sino que son hiacutebridos que combinan la POO con otros paradigmas

Al igual que C++ otros lenguajes como OOCOBOL OOLISP OOPROLOG y Object REXX han sido creados antildeadiendo extensiones orientadas a objetos a un lenguaje de programacioacuten claacutesico

Un nuevo paso en la abstraccioacuten de paradigmas de programacioacuten es la Programacioacuten Orientada a Aspectos (POA) Aunque es todaviacutea una metodologiacutea en estado de maduracioacuten cada vez atrae a maacutes investigadores e incluso proyectos comerciales en todo el mundo

Monografiacuteascom

Programacioacuten Orientada a ObjetosSistemas de Procesamiento de Datos

INTRODUCCION

Actualmente una de las aacutereas maacutes candentes en la industria y en el aacutembito acadeacutemico es la orientacioacuten a objetos La orientacioacuten a objetos promete mejoras de amplio alcance en la forma de disentildeo desarrollo y mantenimiento del software ofreciendo una solucioacuten a largo plazo a los problemas y preocupaciones que han existido desde el comienzo en el desarrollo de software la falta de portabilidad del coacutedigo y reusabilidad coacutedigo que es dificil de modificar ciclos de desarrollo largos y tecnicas de codificacion no intuituvas

Un lenguaje orientado a objetos ataca estos problemas Tiene tres caracteriacutesticas basicas debe estar basado en objetos basado en clases y capaz de tener herencia de clases Muchos lenguajes cumplen uno o dos de estos puntos muchos menos cumplen los tres La barrera maacutes difiacutecil de sortear es usualmente la herencia

El concepto de programacioacuten orientada a objetos (OOP) no es nuevo lenguajes claacutesicos como SmallTalk se basan en ella Dado que la OOP se basa en la idea natural de la existencia de un mundo lleno de objetos y que la resolucioacuten del problema se realiza en teacuterminos de objetos un lenguaje se dice que estaacute basado en objetos si soporta objetos como una caracteriacutestica fundamental del mismo

El elemento fundamental de la OOP es como su nombre lo indica el objeto Podemos definir un objeto como un conjunto complejo de datos y programas que poseen estructura y forman parte de una organizacioacuten

Esta definicioacuten especifica varias propiedades importantes de los objetos En primer lugar un objeto no es un dato simple sino que contiene en su interior cierto nuacutemero de componentes bieacuten estructurados En segundo lugar cada objeto no es un ente aislado sino que forma parte de una organizacioacuten jeraacuterquica o de otro tipo

ESTRUCTURA DE UN OBJETO

Un objeto puede considerarse como una especie de caacutepsula dividida en tres partes

1 - RELACIONES

2 - PROPIEDADES

3 - METODOS

Cada uno de estos componentes desempentildea un papel totalmente independiente

Las relaciones permiten que el objeto se insterte en la organizacioacuten y estaacuten formadas esencialmente por punteros a otros objetos

Las propiedades distinguen un objeto determinado de los restantes que forman parte de la misma organizacioacuten y tiene valores que dependen de la propiedad de que se trate Las propiedades de un objeto pueden ser heredadas a sus descendientes en la organizacioacuten

Los meacutetodos son las operaciones que pueden realizarse sobre el objeto que normalmente estaraacuten incorporados en forma de programas (coacutedigo) que el objeto es capaz de ejecutar y que tambieacuten pone a disposicioacuten de sus descendientes a traveacutes de la herencia

Encapsulamiento y ocultacioacuten

Como hemos visto cada objeto es una estructura compleja en cuyo interior hay datos y programas todos ellos relacionados entre siacute como si estuvieran encerrados conjuntamente en una caacutepsula Esta propiedad (encapsulamiento) es una de las caracteriacutesticas fundamentales en la OOP

Los objetos son inaccesibles e impiden que otros objetos los usuarios o incluso los programadores conozcan coacutemo estaacute distribuiacuteda la informacioacuten o queacute informacioacuten hay disponible Esta propiedad de los objetos se denomina ocultacioacuten de la informacioacuten

Esto no quiere decir sin embargo que sea imposible conocer lo necesario respecto a un objeto y a lo que contiene Si asiacute fuera no se podriacutea hacer gran cosa con eacutel Lo que sucede es que las peticiones de informacioacuten a un objeto deben realizarse a traveacutes de mensajes dirigidos a eacutel con la orden de realizar la operacioacuten pertinente La respuesta a estas ordenes seraacute la informacioacuten requerida siempre que el objeto considere que quien enviacutea el mensaje estaacute autorizado para obtenerla

El hecho de que cada objeto sea una caacutepsula facilita enormemente que un objeto determinado pueda ser transportado a otro punto de la organizacioacuten o incluso a otra organizacioacuten totalmente diferente que precise de eacutel Si el objeto ha sido bien construiacutedo sus meacutetodos seguiraacuten funcionando en el nuevo entorno sin problemas Esta cualidad hace que la OOP sea muy apta para la reutilizacioacuten de programas

Organizacioacuten de los objetos

En principio los objetos forman siempre una organizacioacuten jeraacuterquica en el sentido de que ciertos objetos son superiores a otros de cierto modo

Existen varios tipos tipos de jerarquiacuteas seraacuten simples cuando su estructura pueda ser representada por medio de un arbol En otros casos puede ser maacutes compleja

En cualquier caso sea la estructura simple o compleja podraacuten distinguirse en ella tres niveles de objetos

-La raiacutez de la jerarquiacutea Se trata de un objeto uacutenico y especial Este se caracteriacuteza por estar en el nivel maacutes alto de la estructura y suele recibir un nombre muy geneacuterico que indica su categoriacutea especial como por ejemplo objeto madre Raiacutez o Entidad

-Los objetos intermedios Son aquellos que descienden directamente de la raiacutez y que a su vez tienen descendientes Representan conjuntos o clases de objetos que pueden ser muy generales o muy especializados seguacuten la aplicacioacuten Normalmente reciben nombres geneacutericos que denotan al conjunto de objetos que representan por ejemplo VENTANA CUENTA FICHERO En un conjunto reciben el nombre de clases o tipos si descienden de otra clase o subclase

-Los objetos terminales Son todos aquellos que descienden de una clase o subclase y no tienen descendientes Suelen llamarse casos particulares instancias o iacutetems porque representan los elementos del conjunto representado por la clase o subclase a la que pertenecen

Veamos ahora en detalle los tres elementos mencionados en Estructura de un Objeto

1 RELACIONES

Las relaciones entre objetos son precisamente los enlaces que permiten a un objeto relacionarse con aquellos que forman parte de la misma organizacioacuten

Las hay de dos tipos fundamentales

-Relaciones jeraacuterquicas Son esenciales para la existencia misma de la aplicacioacuten porque la construyen Son bidireccionales es decir un objeto es padre de otro cuando el primer objeto se encuentra situado inmediatamente encima del segundo en la organizacioacuten en la que ambos forman parte asimismo si un objeto es padre de otro el segundo es hijo del primero (en la fig 2 B es padre de DE y F es decir DE y F son hijos de B en la fig 3 los objetos B y C son padres de F que a su vez es hijo de ambos)

Una organizacioacuten jeraacuterquica simple puede definirse como aquella en la que un objeto puede tener un solo padre mientras que en una organizacion jeraacuterquica compleja un hijo puede tener varios padres)

-Relaciones semaacutenticas Se refieren a las relaciones que no tienen nada que ver con la organizacioacuten de la que forman parte los objetos que las establecen Sus

propiedades y consecuencia solo dependen de los objetos en siacute mismos (de su significado) y no de su posicioacuten en la organizacioacuten

Se puede ver mejor con un ejemplo supongamos que vamos a construir un diccionario informatizado que permita al usuario obtener la definicioacuten de una palabra cualquiera Supongamos que en dicho diccionario las palabras son objetos y que la organizacioacuten jeraacuterquica es la que proviene de forma natural de la estructura de nuestros conocimientos sobre el mundo

La raiacutez del diccionario podriacutea llamarse TEMAS De eacuteste teacutermino geneacuterico descenderaacuten tres grandes ramas de objetos llamadas VIDA MUNDO y HOMBRE El primero (vida) comprenderaacute las ciencias bioloacutegicas Biologiacutea y Medicina El segundo (mundo) las ciencias de la naturaleza inerte las Matemaacuteticas la Fiacutesica la Quiacutemica y la Geologiacutea El tercero (hombre) comprenderaacute las ciencias humanas la Geografiacutea la Historia etc

Veamos un ejemplo estableceremos la relacioacuten trabajo entre los objetos NEWTON y OPTICA y la interpretaremos diciendo que significa que Newton trabajoacute en oacuteptica (veacutease la fig 4) La relacioacuten es evidentemente semaacutentica pueacutes no establece ninguna connotacioacuten jeraacuterquica entre NEWTON y OPTICA y su interpretacioacuten depende exclusivamente del significado de ambos objetos

La existencia de esta relacioacuten nos permitiraacute responder a preguntas como

iquestQuieacuten trabajoacute en oacuteptica

iquestEn queacute trabajoacute Newton

iquestQuien trabajoacute en Fiacutesica

Las dos primeras se deducen inmediatamente de la existencia de la relacioacuten trabajo Para la tercera observamos que si Newton trabajoacute en oacuteptica automaacuteticamente sabemos que trabajoacute en Fiacutesica por ser oacuteptica una rama de la Fiacutesica (en nuestro diccionario el objeto OPTICA es hijo del objeto FISICA) Entonces gracias a la OOP podemos responder a la tercera pregunta sin necesidad de establecer una relacioacuten entre NEWTON y FISICA apoyandonos soacutelo en la relacioacuten definida entre NEWTON y OPTICA y en que OPTICA es hijo de FISICA De este modo se elimina toda redundancia innecesaria y la cantidad de informacioacuten que tendremos que definir para todo el diccionario seraacute miacutenima

2 PROPIEDADES

Todo objeto puede tener cierto nuacutemero de propiedades cada una de las cuales tendraacute a su vez uno o varios valores En OOP las propiedades corresponden a las claacutesicas variables de la programacioacuten estructurada Son por lo tanto datos encapsulados dentro del objeto junto con los meacutetodos (programas) y las relaciones (punteros a otros objetos) Las propiedades de un objeto pueden tener un valor uacutenico o pueden contener un conjunto de valores mas o menos estructurados (matrices vectores listas etc) Ademaacutes los valores pueden ser de cualquier tipo (numeacuterico alfabeacutetico etc) si el sistema de programacioacuten lo permite

Pero existe una diferencia con las variables y es que las propiedades se pueden heredar de unos objetos a otros En consecuencia un objeto puede tener una propiedad de maneras diferentes

-Propiedades propias Estaacuten formadas dentro de la caacutepsula del objeto

-Propiedades heredadas Estan definidas en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estas propiedades se llaman propiedades miembro porque el objeto las posee por el mero hecho de ser miembro de una clase

3 METODOS

Una operacioacuten que realiza acceso a los datos Podemos definir meacutetodo como un programa procedimental o procedural escrito en cualquier lenguaje que estaacute asociado a un objeto determinado y cuya ejecucioacuten soacutelo puede desencadenarse a traveacutes de un mensaje recibido por eacuteste o por sus descendientes

Son sinoacutenimos de meacutetodo todos aquellos teacuterminos que se han aplicado tradicionalmente a los programas como procedimiento funcioacuten rutina etc Sin embargo es conveniente utilizar el teacutermino meacutetodo para que se distingan claramente las propiedades especiales que adquiere un programa en el entorno OOP que afectan fundamentalmente a la forma de invocarlo (uacutenicamente a traveacutes de un mensaje) y a su campo de accioacuten limitado a un objeto y a sus descendientes aunque posiblemente no a todos

Si los meacutetodos son programas se deduce que podriacutean tener argumentos o paraacutemetros Puesto que los meacutetodos pueden heredarse de unos objetos a otros un objeto puede disponer de un meacutetodo de dos maneras diferentes

-Meacutetodos propios Estaacuten incluiacutedos dentro de la caacutepsula del objeto

-Meacutetodos heredados Estan definidos en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estos meacutetodos se llaman meacutetodos miembro porque el objeto los posee por el mero hecho de ser miembro de una clase

Polimorfiacutesmo

Una de las caracteriacutesticas fundamentales de la OOP es el polimorfiacutesmo que no es otra cosa que la posibilidad de construir varios meacutetodos con el mismo nombre pero con relacioacuten a la clase a la que pertenece cada uno con comportamientos diferentes Esto conlleva la habilidad de enviar un mismo mensaje a objetos de clases diferentes Estos objetos recibiriacutean el mismo mensaje global pero responderiacutean a eacutel de formas diferentes por ejemplo un mensaje + a un objeto ENTERO significariacutea suma mientras que para un objeto STRING significariacutea concatenacioacuten (pegar strings uno seguido al otro)

Demonios

Es un tipo especial de meacutetodos relativamente poco frecuente en los sistemas de OOP que se activa automaacuteticamente cuando sucede algo especial Es decir es un programa como los meacutetodos ordinarios pero se diferencia de estos porque su ejecucioacuten no se activa con un mensaje sino que se desencadena autmaacuteticamente

cuando ocurre un suceso determinado la asignacioacuten de un valor a una propiedad de un objeto la lectura de un valor determinado etc

Los demonios cuando existen se diferencian de otros meacutetodos por que no son heredables y porque a veces estaacuten ligados a una de las propiedades de un objeto mas que al objeto entero

CONSIDERACIONES FINALES

Beneficios que se obtienen del desarrollo con OOP

Diacutea a diacutea los costos del Hardware decrecen Asiacute surgen nuevas aacutereas de aplicacioacuten cotidianamente procesamiento de imaacutegenes y sonido bases de datos multimediales automatizacioacuten de oficinas ambientes de ingenieriacutea de software etc Auacuten en las aplicaciones tradicionales encontramos que definir interfases hombre-maacutequina a-la-Windows suele ser bastante conveniente

Lamentablemente los costos de produccioacuten de software siguen aumentando el mantenimiento y la modificacioacuten de sistemas complejos suele ser una tarea trabajosa cada aplicacioacuten (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo etc

Todos estos problemas auacuten no han sido solucionados en forma completa Pero como los objetos son portables (teoacutericamente) mientras que la herencia permite la reusabilidad del coacutedigo orientado a objetos es maacutes sencillo modificar coacutedigo existente porque los objetos no interaccionan excepto a traveacutes de mensajes en consecuencia un cambio en la codificacioacuten de un objeto no afectaraacute la operacioacuten con otro objeto siempre que los meacutetodos respectivos permanezcan intactos La introduccioacuten de tecnologiacutea de objetos como una herramienta concepual para analizar disentildear e implementar aplicaciones permite obtener aplicaciones maacutes modificables faacutecilmente extendibles y a partir de componentes reusables Esta reusabilidad del coacutedigo disminuye el tiempo que se utiliza en el desarrollo y hace que el desarrollo del software sea mas intuitivo porque la gente piensa naturalmente en teacuterminos de objetos maacutes que en teacuterminos de algoritmos de software

Problemas derivados de la utilizacioacuten de OOP en la actualidad

Un sistema orientado a objetos por lo visto puede parecer un paraiacuteso virtual El problema sin embargo surge en la implementacioacuten de tal sistema Muchas compantildeiacuteas oyen acerca de los beneficios de un sistema orientado a objetos e invierten gran cantidad de recursos luego comienzan a darse cuenta que han impuesto una nueva cultura que es ajena a los programadores actuales Especiacuteficamente los siguientes temas suelen aparecer repetidamente

Curvas de aprendizaje largas Un sistema orientado a objetos ve al mundo en una forma uacutenica Involucra la conceptualizacioacuten de todos los elementos de un programa desde subsistemas a los datos en la forma de objetos Toda la comunicacioacuten entre los objetos debe realizarse en la forma de mensajes Esta no es la forma en que estaacuten escritos los programas orientados a objetos actualmente al hacer la transicioacuten a un sistema orientado a objetos la mayoriacutea de los programadores deben capacitarse nuevamente antes de poder usarlo

Dependencia del lenguaje A pesar de la portabilidad conceptual de los objetos en un sistema orientado a objetos en la praacutectica existen muchas dependencias Muchos lenguajes orientados a objetos estaacuten compitiendo actualmente para dominar el mercado Cambiar el lenguaje de implementacioacuten de un sistema orientado a objetos no es una tarea sencilla por ejemplo C++ soporta el concepto de herencia multiple mientras que SmallTalk no lo soporta en consecuencia la eleccioacuten de un lenguaje tiene ramificaciones de disentildeo muy importamtes

Determinacion de las clases Una clase es un molde que se utiliza para crear nuevos objetos En consecuencia es importante crear el conjunto de clases adecuado para un proyecto Desafortunadamente la definicioacuten de las clases es maacutes un arte que una ciencia Si bien hay muchas jerarquiacuteas de clase predefinidas usualmente se deben crear clases especiacuteficas para la aplicacioacuten que se este desarrollando Luego en 6 meses oacute 1 antildeo se da cuenta que las clases que se establecieron no son posibles en ese caso seraacute necesario reestructurar la jerarquiacutea de clases devastando totalmente la planificacioacuten original

Performance En un sistema donde todo es un objeto y toda interaccion es a traveacutes de mensajes el traacutefico de mensajes afecta la performance A medida que la tecnologiacutea avanza y la velocidad de microprocesamiento potencia y tamantildeo de la memoria aumentan la situacion mejoraraacute pero en la situacioacuten actual un disentildeo de una aplicacioacuten orientada a objetos que no tiene en cuenta la performance no seraacute viable comercialmente

Idealmente habriacutea una forma de atacar estos problemas eficientemente al mismo tiempo que se obtienen los beneficios del desarrollo de una estrategia orientada a objetos Deberia existir una metodologiacutea faacutecil de aprender e independiente del lenguaje y facil de reestructurar que no drene la performance del sistema

Monografiacuteascom

Programacioacuten orientada a Objetos(OOP Object Oriented Programming)

1 Introduccioacuten 2 Objetos 3 Disentildeo de aplicaciones y eleccioacuten de entorno 4 Aplicaciones orientadas a objetos 5 Caracteriacutesticas de los lenguajes OOP 6 Panoraacutemica de los lenguajes OOP 7 Bases de datos orientadas a objetos 8 Objetos y asociaciones

9 La relacioacuten de herencia 10 Bibliografiacutea infografiacutea

Introduccioacuten

l teacutermino de Programacioacuten Orientada a Objetos indica maacutes una forma de disentildeo y una metodologiacutea de desarrollo de software que un lenguaje de programacioacuten ya que en realidad se puede aplicar el Disentildeo Orientado a Objetos (En ingleacutes abreviado OOD Object Oriented Design) a cualquier tipo de lenguaje de programacioacuten

El desarrollo de la OOP empieza a destacar durante la deacutecada de lo 80 tomando en cuenta la programacioacuten estructurada a la que engloba y dotando al programador de nuevos elementos para el anaacutelisis y desarrollo de software

El propoacutesito de este trabajo es explicar el disentildeo orientado a objeto y no una explicacioacuten de su programacioacuten puesto que no nos alcanzariacutea toda la curriacutecula para hacerlo

Baacutesicamente la OOP permite a los programadores escribir software de forma que esteacute organizado en la misma manera que el problema que trata de modelizar Los lenguajes de programacioacuten convencionales son poco maacutes que una lista de acciones a realizar sobre un conjunto de datos en una determinada secuencia Si en alguacuten punto del programa modificamos la estructura de los datos o la accioacuten realizada sobre ellos el programa cambia

La OOP aporta un enfoque nuevo convirtiendo la estructura de datos en el centro sobre el que pivotan las operaciones De esta forma cualquier modificacioacuten de la estructura de datos tiene efecto inmediato sobre las acciones a realizar sobre ella

siendo esta una de la diferencias radicales respecto a la programacioacuten estructurada

Para quienes no estaacuten familiarizados con la programacioacuten estructurada direacute que una de las bases de esta escuela de programacioacuten parte del disentildeo arriba ndash abajo En esta forma de disentildeo se descomponen los requerimientos del programa paso a paso hasta llegar a un nivel que permite expresarlos mediante procedimientos y funciones La OOP estructura los datos en objetos que pueden almacenar manipular y combinar informacioacuten

En resumen la programacioacuten estructurada presta atencioacuten al conjunto de acciones que manipulan el flujo de datos (desde la situacioacuten inicial a la final) mientras que la programacioacuten orientada a objetos presta atencioacuten a la interrelacioacuten que existe entre los datos y las acciones a realizar con ellos

Muchos habraacuten oiacutedo comentarios sobre la incidencia de la OOP sobre la programacioacuten convencional Se ha llegado a decir que el cambio introducido por la OOP es similar al producido por la aparicioacuten del ensamblador sobre el coacutedigo de maacutequina

La OOP proporciona las siguientes ventajas sobre otros lenguajes de programacioacuten

Uniformidad Ya que la representacioacuten de los objetos lleva implica tanto el anaacutelisis como el disentildeo y la codificacioacuten de los mismos

Comprensioacuten Tanto los datos que componen los objetos como los procedimientos que los manipulan estaacuten agrupados en clases que se corresponden con las estructuras de informacioacuten que el programa trata

Flexibilidad Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar cualquier cambio que se realice sobre ellos quedaraacute reflejado automaacuteticamente en cualquier lugar donde estos datos aparezcan

Estabilidad Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo

Reusabilidad La nocioacuten de objeto permite que programas que traten las mismas estructuras de informacioacuten reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan De esta forma el desarrollo de un programa puede llegar a ser una simple combinacioacuten de objetos ya definidos donde estos estaacuten relacionados de una manera particular

Uno de los puntos clave a remarcar en esta introduccioacuten es que la programacioacuten orientada a objetos no sustituye a ninguna metodologiacutea ni lenguaje de programacioacuten anterior Todos los programas que se realizan seguacuten OOD se pueden realizar igualmente mediante programacioacuten estructurada Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas

basadas en un interface de usuario graacutefico como Windows OS2 x-Windows etc Es mucho maacutes sencillo

OBJETOS

Caracteriacutesticas de los Objetos

Identidad del Objeto

La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos son distintos entre siacute De esta forma incluso una serie de Objetos coches recieacuten fabricados son distintos los unos de los otros

La afirmacioacuten anterior aunque parece obvia tiene importancia cuando descendemos al nivel de programacioacuten En este aacutembito cada uno de los objetos tiene un controlador pro el cual se identifica Este puede ser una variable una estructura de datos una cadena de caracteres etc El controlador seraacute distinto para cada uno de los objeto aunque las referencias a eacutestos sean uniformes e independientes del contenido permitiendo crear agrupaciones de objetos con el mismo tratamiento

Clasificacioacuten

Con la clasificacioacuten comienza la verdadera programacioacuten orientada a objetos Ellos nos obliga a una abstraccioacuten del concepto de objeto denominada clase

Las clases permiten la agrupacioacuten de objetos que comparten las mismas propiedades y comportamiento Si bien clase y objeto suelen usarse como sinoacutenimos no lo son

El esfuerzo del programador ante una aplicacioacuten orientada a objetos se centra en la identificacioacuten de las clases sus atributos y operaciones asociadas

Las propiedades de cada clase deben cumplir una serie de premisas

Las propiedades deber ser significativas dentro del entorno de la aplicacioacuten es decir deben servir para identificar claramente y de una manera uacutenica (y univoca) a cada uno de los objetos

El nuacutemero de propiedades de un objeto debe ser el miacutenimo para realizar todas las operaciones que requiera la aplicacioacuten

Definamos una clase rectaacutengulo Esta clase puede tener como atributos un punto (xy) la anchura (a) y la longitud (l) Las operaciones a realizar son mover agrandar reducir et iquestEs posible realizarlas con las propiedades de la clase

Un anaacutelisis posterior nos indica que es posible la realizacioacuten de estas operaciones con los atributos definidos Pero si incluimos la operacioacuten girar vemos que con las propiedades definidas para la clase esta operacioacuten no se puede realizar Para incluir esta nueva operacioacuten debemos redefinir las propiedades del objeto en este caso las coordenadas de los veacutertices

Encapsulacioacuten y ocultacioacuten de datos

La capacidad de presentacioacuten de informacioacuten dentro de un objeto se divide en dos partes bien diferenciadas

Interna La informacioacuten que necesita el objeto para operar y que es innecesaria para los demaacutes objetos de la aplicacioacuten Estos atributos se denominada privados y tienen como marco de aplicacioacuten uacutenicamente a las operaciones asociadas al objeto

Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos Estas propiedades se denominan puacuteblicas y corresponde a la informacioacuten que necesitan conocer los restantes objetos de la aplicacioacuten respecto del objeto definido para poder operar

Podemos imaginarla encapsulacioacuten como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida Si introducimos datos por la entrada automaacuteticamente obtendraacute un resultado en la salida No necesita conocer ninguacuten detalle del funcionamiento interno de la caja

El teacutermino encapsulacioacuten indica l capacidad que tienen los objetos de construir una caacutepsula a su alrededor ocultando la informacioacuten que contienen (aqueacutella que es necesaria para su funcionamiento interno pero innecesaria para los demaacutes objetos) a las otras clases que componen la aplicacioacuten

Aunque a primera vista la encapsulacioacuten puede parecer superflua tengamos en cuenta que existen muchas variables utilizadas de forma temporal contadores y variables que contienen resultados intermedios etc D no ser por la encapsulacioacuten estas variables ocupariacutean memoria y podriacutean interferir en el funcionamiento del resto de los objetos

La encapsulacioacuten no es exclusiva de los lenguajes de programacioacuten orientados a objetos Aparece en los lenguajes basados en procedimientos (PASCAL C COBOL ETC) como una forma de proteger los datos que se manipulan dentro de las funciones

Los lenguajes OOP incorporan la posibilidad de encapsular tambieacuten las estructuras de datos que sirven como base a las funciones Aportan por tanto un nivel superior en cuanto a proteccioacuten de informacioacuten

La encapsulacioacuten nos permite el uso de libreriacuteas de objetos para el desarrollo de nuestros programas Recordemos que las libreriacuteas son definiciones de objetos de propoacutesito general que se incorporan a los programas Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde estaacute definido ya que contiene y define todo lo que necesita para poder funcionar es faacutecil utilizarlo en los mas variados tipos de aplicaciones Si aseguramos depurando las propiedades y las operaciones dentro de la clase que el objeto funcioacuten bien dentro de una aplicacioacuten con una correcta encapsulacioacuten el objeto podraacute funcionar en cualquier otra

Otra de las ventajas de la encapsulacioacuten es que al definir el objeto como una caja negra con entradas y salida asociadas en cualquier momento podemos cambiar el contenido de las operaciones del objeto de manera que no afecte al funcionamiento general del programa

La encapsulacioacuten estaacute en el nuacutecleo de dos grandes pilares de la construccioacuten de sistemas mantenibilidad y reusabilidad

Mantenibilidad

Cualidad que indica que un programa o sistema debe ser faacutecilmente modificable Es decir que los cambios en las condiciones externas (como la definicioacuten de una nueva variable) implicaraacuten modificaciones pequentildeas en el programa sistema El concepto de mantenibilidad implica que un programa al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante

Reusabilidad

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccioacuten de otros programas Ello implica que los objetos definidos en un programa pueden ser extraiacutedos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el coacutedigo del objeto El objeto final es que el programador construya una libreriacutea de objetos que le permita realizar programas basaacutendose en la teacutecnica de cortar y pegar Esta extrae (corta) coacutedigo de otras aplicaciones ya realizadas y las implementa (pega) en la aplicacioacuten a realizar donde tras algunos retoques la nueva aplicacioacuten estaraacute lista para funcionar Como podraacute observar el concepto de reusabilidad permite reducir el tiempo de realizacioacuten ganando en claridad mantenibilidad y productividad

La encapsulacioacuten de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad con el uacutenico coste adicional de definir con precisioacuten las entradas y salida de nuestras operaciones

Poliformismo

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 4: 2983238 programacion-orientada-a-objetos

Caracteriacutesticas de la POO [editar]

Hay un cierto desacuerdo sobre exactamente queacute caracteriacutesticas de un meacutetodo de programacioacuten o lenguaje le definen como orientado a objetos pero hay un consenso general en que las caracteriacutesticas siguientes son las maacutes importantes (para maacutes informacioacuten seguir los enlaces respectivos)

bull Abstraccioacuten Cada objeto en el sistema sirve como modelo de un agente abstracto que puede realizar trabajo informar y cambiar su estado y comunicarse con otros objetos en el sistema sin revelar coacutemo se implementan estas caracteriacutesticas Los procesos las funciones o los meacutetodos pueden tambieacuten ser abstraiacutedos y cuando lo estaacuten una variedad de teacutecnicas son requeridas para ampliar una abstraccioacuten

bull Encapsulamiento Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad al mismo nivel de abstraccioacuten Esto permite aumentar la cohesioacuten de los componentes del sistema Algunos autores confunden este concepto con el principio de ocultacioacuten principalmente porque se suelen emplear conjuntamente

bull Principio de ocultacioacuten Cada objeto estaacute aislado del exterior es un moacutedulo natural y cada tipo de objeto expone una interfaz a otros objetos que especifica coacutemo pueden interactuar con los objetos de la clase El aislamiento protege a las propiedades de un objeto contra su modificacioacuten por quien no tenga derecho a acceder a ellas solamente los propios meacutetodos internos del objeto pueden acceder a su estado Esto asegura que otros objetos no pueden cambiar el estado interno de un objeto de maneras inesperadas eliminando efectos secundarios e interacciones inesperadas Algunos lenguajes relajan esto permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstraccioacuten La aplicacioacuten entera se reduce a un agregado o rompecabezas de objetos

bull Polimorfismo comportamientos diferentes asociados a objetos distintos pueden compartir el mismo nombre al llamarlos por ese nombre se utilizaraacute el comportamiento correspondiente al objeto que se esteacute usando O dicho de otro modo las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos y la invocacioacuten de un comportamiento en una referencia produciraacute el comportamiento correcto para el tipo real del objeto referenciado Cuando esto ocurre en tiempo de ejecucioacuten esta uacuteltima caracteriacutestica se llama asignacioacuten tardiacutea o asignacioacuten dinaacutemica Algunos lenguajes proporcionan medios maacutes estaacuteticos (en tiempo de compilacioacuten) de polimorfismo tales como las plantillas y la sobrecarga de operadores de C++

bull Herencia las clases no estaacuten aisladas sino que se relacionan entre siacute formando una jerarquiacutea de clasificacioacuten Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes Estos pueden compartir (y extender) su comportamiento sin tener que reimplementar su comportamiento Esto suele hacerse habitualmente agrupando los objetos en

clases y estas en aacuterboles o enrejados que reflejan un comportamiento comuacuten Cuando un objeto hereda de maacutes de una clase se dice que hay herencia muacuteltiple

Lenguajes orientados a objetos [editar]

Entre los lenguajes orientados a objetos destacan los siguientes

bull ActionScript bull ActionScript 3 bull Ada bull C++ bull C bull Clarion bull Lenguaje de programacioacuten D bull Object Pascal (Delphi) bull Harbour bull Eiffel bull Java bull JavaScript (la herencia se realiza por medio de la programacioacuten basada en

prototipos) bull Lexico (en castellano) bull Objective-C bull Ocaml bull Oz bull Lenguaje de programacioacuten R bull Perl (soporta herencia muacuteltiple La resolucioacuten se realiza en preorden pero puede

modificarse al algoritmo C3 por medio del moacutedulo ClassC3 en CPAN) bull PHP (en su versioacuten 5) bull Python bull Ruby bull Smalltalk bull Magik (SmallWorld) bull VBNET bull Visual FoxPro bull XBase++ bull Gambas bull Flex builder (adobe)

Muchos de estos lenguajes de programacioacuten no son puramente orientados a objetos sino que son hiacutebridos que combinan la POO con otros paradigmas

Al igual que C++ otros lenguajes como OOCOBOL OOLISP OOPROLOG y Object REXX han sido creados antildeadiendo extensiones orientadas a objetos a un lenguaje de programacioacuten claacutesico

Un nuevo paso en la abstraccioacuten de paradigmas de programacioacuten es la Programacioacuten Orientada a Aspectos (POA) Aunque es todaviacutea una metodologiacutea en estado de maduracioacuten cada vez atrae a maacutes investigadores e incluso proyectos comerciales en todo el mundo

Monografiacuteascom

Programacioacuten Orientada a ObjetosSistemas de Procesamiento de Datos

INTRODUCCION

Actualmente una de las aacutereas maacutes candentes en la industria y en el aacutembito acadeacutemico es la orientacioacuten a objetos La orientacioacuten a objetos promete mejoras de amplio alcance en la forma de disentildeo desarrollo y mantenimiento del software ofreciendo una solucioacuten a largo plazo a los problemas y preocupaciones que han existido desde el comienzo en el desarrollo de software la falta de portabilidad del coacutedigo y reusabilidad coacutedigo que es dificil de modificar ciclos de desarrollo largos y tecnicas de codificacion no intuituvas

Un lenguaje orientado a objetos ataca estos problemas Tiene tres caracteriacutesticas basicas debe estar basado en objetos basado en clases y capaz de tener herencia de clases Muchos lenguajes cumplen uno o dos de estos puntos muchos menos cumplen los tres La barrera maacutes difiacutecil de sortear es usualmente la herencia

El concepto de programacioacuten orientada a objetos (OOP) no es nuevo lenguajes claacutesicos como SmallTalk se basan en ella Dado que la OOP se basa en la idea natural de la existencia de un mundo lleno de objetos y que la resolucioacuten del problema se realiza en teacuterminos de objetos un lenguaje se dice que estaacute basado en objetos si soporta objetos como una caracteriacutestica fundamental del mismo

El elemento fundamental de la OOP es como su nombre lo indica el objeto Podemos definir un objeto como un conjunto complejo de datos y programas que poseen estructura y forman parte de una organizacioacuten

Esta definicioacuten especifica varias propiedades importantes de los objetos En primer lugar un objeto no es un dato simple sino que contiene en su interior cierto nuacutemero de componentes bieacuten estructurados En segundo lugar cada objeto no es un ente aislado sino que forma parte de una organizacioacuten jeraacuterquica o de otro tipo

ESTRUCTURA DE UN OBJETO

Un objeto puede considerarse como una especie de caacutepsula dividida en tres partes

1 - RELACIONES

2 - PROPIEDADES

3 - METODOS

Cada uno de estos componentes desempentildea un papel totalmente independiente

Las relaciones permiten que el objeto se insterte en la organizacioacuten y estaacuten formadas esencialmente por punteros a otros objetos

Las propiedades distinguen un objeto determinado de los restantes que forman parte de la misma organizacioacuten y tiene valores que dependen de la propiedad de que se trate Las propiedades de un objeto pueden ser heredadas a sus descendientes en la organizacioacuten

Los meacutetodos son las operaciones que pueden realizarse sobre el objeto que normalmente estaraacuten incorporados en forma de programas (coacutedigo) que el objeto es capaz de ejecutar y que tambieacuten pone a disposicioacuten de sus descendientes a traveacutes de la herencia

Encapsulamiento y ocultacioacuten

Como hemos visto cada objeto es una estructura compleja en cuyo interior hay datos y programas todos ellos relacionados entre siacute como si estuvieran encerrados conjuntamente en una caacutepsula Esta propiedad (encapsulamiento) es una de las caracteriacutesticas fundamentales en la OOP

Los objetos son inaccesibles e impiden que otros objetos los usuarios o incluso los programadores conozcan coacutemo estaacute distribuiacuteda la informacioacuten o queacute informacioacuten hay disponible Esta propiedad de los objetos se denomina ocultacioacuten de la informacioacuten

Esto no quiere decir sin embargo que sea imposible conocer lo necesario respecto a un objeto y a lo que contiene Si asiacute fuera no se podriacutea hacer gran cosa con eacutel Lo que sucede es que las peticiones de informacioacuten a un objeto deben realizarse a traveacutes de mensajes dirigidos a eacutel con la orden de realizar la operacioacuten pertinente La respuesta a estas ordenes seraacute la informacioacuten requerida siempre que el objeto considere que quien enviacutea el mensaje estaacute autorizado para obtenerla

El hecho de que cada objeto sea una caacutepsula facilita enormemente que un objeto determinado pueda ser transportado a otro punto de la organizacioacuten o incluso a otra organizacioacuten totalmente diferente que precise de eacutel Si el objeto ha sido bien construiacutedo sus meacutetodos seguiraacuten funcionando en el nuevo entorno sin problemas Esta cualidad hace que la OOP sea muy apta para la reutilizacioacuten de programas

Organizacioacuten de los objetos

En principio los objetos forman siempre una organizacioacuten jeraacuterquica en el sentido de que ciertos objetos son superiores a otros de cierto modo

Existen varios tipos tipos de jerarquiacuteas seraacuten simples cuando su estructura pueda ser representada por medio de un arbol En otros casos puede ser maacutes compleja

En cualquier caso sea la estructura simple o compleja podraacuten distinguirse en ella tres niveles de objetos

-La raiacutez de la jerarquiacutea Se trata de un objeto uacutenico y especial Este se caracteriacuteza por estar en el nivel maacutes alto de la estructura y suele recibir un nombre muy geneacuterico que indica su categoriacutea especial como por ejemplo objeto madre Raiacutez o Entidad

-Los objetos intermedios Son aquellos que descienden directamente de la raiacutez y que a su vez tienen descendientes Representan conjuntos o clases de objetos que pueden ser muy generales o muy especializados seguacuten la aplicacioacuten Normalmente reciben nombres geneacutericos que denotan al conjunto de objetos que representan por ejemplo VENTANA CUENTA FICHERO En un conjunto reciben el nombre de clases o tipos si descienden de otra clase o subclase

-Los objetos terminales Son todos aquellos que descienden de una clase o subclase y no tienen descendientes Suelen llamarse casos particulares instancias o iacutetems porque representan los elementos del conjunto representado por la clase o subclase a la que pertenecen

Veamos ahora en detalle los tres elementos mencionados en Estructura de un Objeto

1 RELACIONES

Las relaciones entre objetos son precisamente los enlaces que permiten a un objeto relacionarse con aquellos que forman parte de la misma organizacioacuten

Las hay de dos tipos fundamentales

-Relaciones jeraacuterquicas Son esenciales para la existencia misma de la aplicacioacuten porque la construyen Son bidireccionales es decir un objeto es padre de otro cuando el primer objeto se encuentra situado inmediatamente encima del segundo en la organizacioacuten en la que ambos forman parte asimismo si un objeto es padre de otro el segundo es hijo del primero (en la fig 2 B es padre de DE y F es decir DE y F son hijos de B en la fig 3 los objetos B y C son padres de F que a su vez es hijo de ambos)

Una organizacioacuten jeraacuterquica simple puede definirse como aquella en la que un objeto puede tener un solo padre mientras que en una organizacion jeraacuterquica compleja un hijo puede tener varios padres)

-Relaciones semaacutenticas Se refieren a las relaciones que no tienen nada que ver con la organizacioacuten de la que forman parte los objetos que las establecen Sus

propiedades y consecuencia solo dependen de los objetos en siacute mismos (de su significado) y no de su posicioacuten en la organizacioacuten

Se puede ver mejor con un ejemplo supongamos que vamos a construir un diccionario informatizado que permita al usuario obtener la definicioacuten de una palabra cualquiera Supongamos que en dicho diccionario las palabras son objetos y que la organizacioacuten jeraacuterquica es la que proviene de forma natural de la estructura de nuestros conocimientos sobre el mundo

La raiacutez del diccionario podriacutea llamarse TEMAS De eacuteste teacutermino geneacuterico descenderaacuten tres grandes ramas de objetos llamadas VIDA MUNDO y HOMBRE El primero (vida) comprenderaacute las ciencias bioloacutegicas Biologiacutea y Medicina El segundo (mundo) las ciencias de la naturaleza inerte las Matemaacuteticas la Fiacutesica la Quiacutemica y la Geologiacutea El tercero (hombre) comprenderaacute las ciencias humanas la Geografiacutea la Historia etc

Veamos un ejemplo estableceremos la relacioacuten trabajo entre los objetos NEWTON y OPTICA y la interpretaremos diciendo que significa que Newton trabajoacute en oacuteptica (veacutease la fig 4) La relacioacuten es evidentemente semaacutentica pueacutes no establece ninguna connotacioacuten jeraacuterquica entre NEWTON y OPTICA y su interpretacioacuten depende exclusivamente del significado de ambos objetos

La existencia de esta relacioacuten nos permitiraacute responder a preguntas como

iquestQuieacuten trabajoacute en oacuteptica

iquestEn queacute trabajoacute Newton

iquestQuien trabajoacute en Fiacutesica

Las dos primeras se deducen inmediatamente de la existencia de la relacioacuten trabajo Para la tercera observamos que si Newton trabajoacute en oacuteptica automaacuteticamente sabemos que trabajoacute en Fiacutesica por ser oacuteptica una rama de la Fiacutesica (en nuestro diccionario el objeto OPTICA es hijo del objeto FISICA) Entonces gracias a la OOP podemos responder a la tercera pregunta sin necesidad de establecer una relacioacuten entre NEWTON y FISICA apoyandonos soacutelo en la relacioacuten definida entre NEWTON y OPTICA y en que OPTICA es hijo de FISICA De este modo se elimina toda redundancia innecesaria y la cantidad de informacioacuten que tendremos que definir para todo el diccionario seraacute miacutenima

2 PROPIEDADES

Todo objeto puede tener cierto nuacutemero de propiedades cada una de las cuales tendraacute a su vez uno o varios valores En OOP las propiedades corresponden a las claacutesicas variables de la programacioacuten estructurada Son por lo tanto datos encapsulados dentro del objeto junto con los meacutetodos (programas) y las relaciones (punteros a otros objetos) Las propiedades de un objeto pueden tener un valor uacutenico o pueden contener un conjunto de valores mas o menos estructurados (matrices vectores listas etc) Ademaacutes los valores pueden ser de cualquier tipo (numeacuterico alfabeacutetico etc) si el sistema de programacioacuten lo permite

Pero existe una diferencia con las variables y es que las propiedades se pueden heredar de unos objetos a otros En consecuencia un objeto puede tener una propiedad de maneras diferentes

-Propiedades propias Estaacuten formadas dentro de la caacutepsula del objeto

-Propiedades heredadas Estan definidas en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estas propiedades se llaman propiedades miembro porque el objeto las posee por el mero hecho de ser miembro de una clase

3 METODOS

Una operacioacuten que realiza acceso a los datos Podemos definir meacutetodo como un programa procedimental o procedural escrito en cualquier lenguaje que estaacute asociado a un objeto determinado y cuya ejecucioacuten soacutelo puede desencadenarse a traveacutes de un mensaje recibido por eacuteste o por sus descendientes

Son sinoacutenimos de meacutetodo todos aquellos teacuterminos que se han aplicado tradicionalmente a los programas como procedimiento funcioacuten rutina etc Sin embargo es conveniente utilizar el teacutermino meacutetodo para que se distingan claramente las propiedades especiales que adquiere un programa en el entorno OOP que afectan fundamentalmente a la forma de invocarlo (uacutenicamente a traveacutes de un mensaje) y a su campo de accioacuten limitado a un objeto y a sus descendientes aunque posiblemente no a todos

Si los meacutetodos son programas se deduce que podriacutean tener argumentos o paraacutemetros Puesto que los meacutetodos pueden heredarse de unos objetos a otros un objeto puede disponer de un meacutetodo de dos maneras diferentes

-Meacutetodos propios Estaacuten incluiacutedos dentro de la caacutepsula del objeto

-Meacutetodos heredados Estan definidos en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estos meacutetodos se llaman meacutetodos miembro porque el objeto los posee por el mero hecho de ser miembro de una clase

Polimorfiacutesmo

Una de las caracteriacutesticas fundamentales de la OOP es el polimorfiacutesmo que no es otra cosa que la posibilidad de construir varios meacutetodos con el mismo nombre pero con relacioacuten a la clase a la que pertenece cada uno con comportamientos diferentes Esto conlleva la habilidad de enviar un mismo mensaje a objetos de clases diferentes Estos objetos recibiriacutean el mismo mensaje global pero responderiacutean a eacutel de formas diferentes por ejemplo un mensaje + a un objeto ENTERO significariacutea suma mientras que para un objeto STRING significariacutea concatenacioacuten (pegar strings uno seguido al otro)

Demonios

Es un tipo especial de meacutetodos relativamente poco frecuente en los sistemas de OOP que se activa automaacuteticamente cuando sucede algo especial Es decir es un programa como los meacutetodos ordinarios pero se diferencia de estos porque su ejecucioacuten no se activa con un mensaje sino que se desencadena autmaacuteticamente

cuando ocurre un suceso determinado la asignacioacuten de un valor a una propiedad de un objeto la lectura de un valor determinado etc

Los demonios cuando existen se diferencian de otros meacutetodos por que no son heredables y porque a veces estaacuten ligados a una de las propiedades de un objeto mas que al objeto entero

CONSIDERACIONES FINALES

Beneficios que se obtienen del desarrollo con OOP

Diacutea a diacutea los costos del Hardware decrecen Asiacute surgen nuevas aacutereas de aplicacioacuten cotidianamente procesamiento de imaacutegenes y sonido bases de datos multimediales automatizacioacuten de oficinas ambientes de ingenieriacutea de software etc Auacuten en las aplicaciones tradicionales encontramos que definir interfases hombre-maacutequina a-la-Windows suele ser bastante conveniente

Lamentablemente los costos de produccioacuten de software siguen aumentando el mantenimiento y la modificacioacuten de sistemas complejos suele ser una tarea trabajosa cada aplicacioacuten (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo etc

Todos estos problemas auacuten no han sido solucionados en forma completa Pero como los objetos son portables (teoacutericamente) mientras que la herencia permite la reusabilidad del coacutedigo orientado a objetos es maacutes sencillo modificar coacutedigo existente porque los objetos no interaccionan excepto a traveacutes de mensajes en consecuencia un cambio en la codificacioacuten de un objeto no afectaraacute la operacioacuten con otro objeto siempre que los meacutetodos respectivos permanezcan intactos La introduccioacuten de tecnologiacutea de objetos como una herramienta concepual para analizar disentildear e implementar aplicaciones permite obtener aplicaciones maacutes modificables faacutecilmente extendibles y a partir de componentes reusables Esta reusabilidad del coacutedigo disminuye el tiempo que se utiliza en el desarrollo y hace que el desarrollo del software sea mas intuitivo porque la gente piensa naturalmente en teacuterminos de objetos maacutes que en teacuterminos de algoritmos de software

Problemas derivados de la utilizacioacuten de OOP en la actualidad

Un sistema orientado a objetos por lo visto puede parecer un paraiacuteso virtual El problema sin embargo surge en la implementacioacuten de tal sistema Muchas compantildeiacuteas oyen acerca de los beneficios de un sistema orientado a objetos e invierten gran cantidad de recursos luego comienzan a darse cuenta que han impuesto una nueva cultura que es ajena a los programadores actuales Especiacuteficamente los siguientes temas suelen aparecer repetidamente

Curvas de aprendizaje largas Un sistema orientado a objetos ve al mundo en una forma uacutenica Involucra la conceptualizacioacuten de todos los elementos de un programa desde subsistemas a los datos en la forma de objetos Toda la comunicacioacuten entre los objetos debe realizarse en la forma de mensajes Esta no es la forma en que estaacuten escritos los programas orientados a objetos actualmente al hacer la transicioacuten a un sistema orientado a objetos la mayoriacutea de los programadores deben capacitarse nuevamente antes de poder usarlo

Dependencia del lenguaje A pesar de la portabilidad conceptual de los objetos en un sistema orientado a objetos en la praacutectica existen muchas dependencias Muchos lenguajes orientados a objetos estaacuten compitiendo actualmente para dominar el mercado Cambiar el lenguaje de implementacioacuten de un sistema orientado a objetos no es una tarea sencilla por ejemplo C++ soporta el concepto de herencia multiple mientras que SmallTalk no lo soporta en consecuencia la eleccioacuten de un lenguaje tiene ramificaciones de disentildeo muy importamtes

Determinacion de las clases Una clase es un molde que se utiliza para crear nuevos objetos En consecuencia es importante crear el conjunto de clases adecuado para un proyecto Desafortunadamente la definicioacuten de las clases es maacutes un arte que una ciencia Si bien hay muchas jerarquiacuteas de clase predefinidas usualmente se deben crear clases especiacuteficas para la aplicacioacuten que se este desarrollando Luego en 6 meses oacute 1 antildeo se da cuenta que las clases que se establecieron no son posibles en ese caso seraacute necesario reestructurar la jerarquiacutea de clases devastando totalmente la planificacioacuten original

Performance En un sistema donde todo es un objeto y toda interaccion es a traveacutes de mensajes el traacutefico de mensajes afecta la performance A medida que la tecnologiacutea avanza y la velocidad de microprocesamiento potencia y tamantildeo de la memoria aumentan la situacion mejoraraacute pero en la situacioacuten actual un disentildeo de una aplicacioacuten orientada a objetos que no tiene en cuenta la performance no seraacute viable comercialmente

Idealmente habriacutea una forma de atacar estos problemas eficientemente al mismo tiempo que se obtienen los beneficios del desarrollo de una estrategia orientada a objetos Deberia existir una metodologiacutea faacutecil de aprender e independiente del lenguaje y facil de reestructurar que no drene la performance del sistema

Monografiacuteascom

Programacioacuten orientada a Objetos(OOP Object Oriented Programming)

1 Introduccioacuten 2 Objetos 3 Disentildeo de aplicaciones y eleccioacuten de entorno 4 Aplicaciones orientadas a objetos 5 Caracteriacutesticas de los lenguajes OOP 6 Panoraacutemica de los lenguajes OOP 7 Bases de datos orientadas a objetos 8 Objetos y asociaciones

9 La relacioacuten de herencia 10 Bibliografiacutea infografiacutea

Introduccioacuten

l teacutermino de Programacioacuten Orientada a Objetos indica maacutes una forma de disentildeo y una metodologiacutea de desarrollo de software que un lenguaje de programacioacuten ya que en realidad se puede aplicar el Disentildeo Orientado a Objetos (En ingleacutes abreviado OOD Object Oriented Design) a cualquier tipo de lenguaje de programacioacuten

El desarrollo de la OOP empieza a destacar durante la deacutecada de lo 80 tomando en cuenta la programacioacuten estructurada a la que engloba y dotando al programador de nuevos elementos para el anaacutelisis y desarrollo de software

El propoacutesito de este trabajo es explicar el disentildeo orientado a objeto y no una explicacioacuten de su programacioacuten puesto que no nos alcanzariacutea toda la curriacutecula para hacerlo

Baacutesicamente la OOP permite a los programadores escribir software de forma que esteacute organizado en la misma manera que el problema que trata de modelizar Los lenguajes de programacioacuten convencionales son poco maacutes que una lista de acciones a realizar sobre un conjunto de datos en una determinada secuencia Si en alguacuten punto del programa modificamos la estructura de los datos o la accioacuten realizada sobre ellos el programa cambia

La OOP aporta un enfoque nuevo convirtiendo la estructura de datos en el centro sobre el que pivotan las operaciones De esta forma cualquier modificacioacuten de la estructura de datos tiene efecto inmediato sobre las acciones a realizar sobre ella

siendo esta una de la diferencias radicales respecto a la programacioacuten estructurada

Para quienes no estaacuten familiarizados con la programacioacuten estructurada direacute que una de las bases de esta escuela de programacioacuten parte del disentildeo arriba ndash abajo En esta forma de disentildeo se descomponen los requerimientos del programa paso a paso hasta llegar a un nivel que permite expresarlos mediante procedimientos y funciones La OOP estructura los datos en objetos que pueden almacenar manipular y combinar informacioacuten

En resumen la programacioacuten estructurada presta atencioacuten al conjunto de acciones que manipulan el flujo de datos (desde la situacioacuten inicial a la final) mientras que la programacioacuten orientada a objetos presta atencioacuten a la interrelacioacuten que existe entre los datos y las acciones a realizar con ellos

Muchos habraacuten oiacutedo comentarios sobre la incidencia de la OOP sobre la programacioacuten convencional Se ha llegado a decir que el cambio introducido por la OOP es similar al producido por la aparicioacuten del ensamblador sobre el coacutedigo de maacutequina

La OOP proporciona las siguientes ventajas sobre otros lenguajes de programacioacuten

Uniformidad Ya que la representacioacuten de los objetos lleva implica tanto el anaacutelisis como el disentildeo y la codificacioacuten de los mismos

Comprensioacuten Tanto los datos que componen los objetos como los procedimientos que los manipulan estaacuten agrupados en clases que se corresponden con las estructuras de informacioacuten que el programa trata

Flexibilidad Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar cualquier cambio que se realice sobre ellos quedaraacute reflejado automaacuteticamente en cualquier lugar donde estos datos aparezcan

Estabilidad Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo

Reusabilidad La nocioacuten de objeto permite que programas que traten las mismas estructuras de informacioacuten reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan De esta forma el desarrollo de un programa puede llegar a ser una simple combinacioacuten de objetos ya definidos donde estos estaacuten relacionados de una manera particular

Uno de los puntos clave a remarcar en esta introduccioacuten es que la programacioacuten orientada a objetos no sustituye a ninguna metodologiacutea ni lenguaje de programacioacuten anterior Todos los programas que se realizan seguacuten OOD se pueden realizar igualmente mediante programacioacuten estructurada Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas

basadas en un interface de usuario graacutefico como Windows OS2 x-Windows etc Es mucho maacutes sencillo

OBJETOS

Caracteriacutesticas de los Objetos

Identidad del Objeto

La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos son distintos entre siacute De esta forma incluso una serie de Objetos coches recieacuten fabricados son distintos los unos de los otros

La afirmacioacuten anterior aunque parece obvia tiene importancia cuando descendemos al nivel de programacioacuten En este aacutembito cada uno de los objetos tiene un controlador pro el cual se identifica Este puede ser una variable una estructura de datos una cadena de caracteres etc El controlador seraacute distinto para cada uno de los objeto aunque las referencias a eacutestos sean uniformes e independientes del contenido permitiendo crear agrupaciones de objetos con el mismo tratamiento

Clasificacioacuten

Con la clasificacioacuten comienza la verdadera programacioacuten orientada a objetos Ellos nos obliga a una abstraccioacuten del concepto de objeto denominada clase

Las clases permiten la agrupacioacuten de objetos que comparten las mismas propiedades y comportamiento Si bien clase y objeto suelen usarse como sinoacutenimos no lo son

El esfuerzo del programador ante una aplicacioacuten orientada a objetos se centra en la identificacioacuten de las clases sus atributos y operaciones asociadas

Las propiedades de cada clase deben cumplir una serie de premisas

Las propiedades deber ser significativas dentro del entorno de la aplicacioacuten es decir deben servir para identificar claramente y de una manera uacutenica (y univoca) a cada uno de los objetos

El nuacutemero de propiedades de un objeto debe ser el miacutenimo para realizar todas las operaciones que requiera la aplicacioacuten

Definamos una clase rectaacutengulo Esta clase puede tener como atributos un punto (xy) la anchura (a) y la longitud (l) Las operaciones a realizar son mover agrandar reducir et iquestEs posible realizarlas con las propiedades de la clase

Un anaacutelisis posterior nos indica que es posible la realizacioacuten de estas operaciones con los atributos definidos Pero si incluimos la operacioacuten girar vemos que con las propiedades definidas para la clase esta operacioacuten no se puede realizar Para incluir esta nueva operacioacuten debemos redefinir las propiedades del objeto en este caso las coordenadas de los veacutertices

Encapsulacioacuten y ocultacioacuten de datos

La capacidad de presentacioacuten de informacioacuten dentro de un objeto se divide en dos partes bien diferenciadas

Interna La informacioacuten que necesita el objeto para operar y que es innecesaria para los demaacutes objetos de la aplicacioacuten Estos atributos se denominada privados y tienen como marco de aplicacioacuten uacutenicamente a las operaciones asociadas al objeto

Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos Estas propiedades se denominan puacuteblicas y corresponde a la informacioacuten que necesitan conocer los restantes objetos de la aplicacioacuten respecto del objeto definido para poder operar

Podemos imaginarla encapsulacioacuten como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida Si introducimos datos por la entrada automaacuteticamente obtendraacute un resultado en la salida No necesita conocer ninguacuten detalle del funcionamiento interno de la caja

El teacutermino encapsulacioacuten indica l capacidad que tienen los objetos de construir una caacutepsula a su alrededor ocultando la informacioacuten que contienen (aqueacutella que es necesaria para su funcionamiento interno pero innecesaria para los demaacutes objetos) a las otras clases que componen la aplicacioacuten

Aunque a primera vista la encapsulacioacuten puede parecer superflua tengamos en cuenta que existen muchas variables utilizadas de forma temporal contadores y variables que contienen resultados intermedios etc D no ser por la encapsulacioacuten estas variables ocupariacutean memoria y podriacutean interferir en el funcionamiento del resto de los objetos

La encapsulacioacuten no es exclusiva de los lenguajes de programacioacuten orientados a objetos Aparece en los lenguajes basados en procedimientos (PASCAL C COBOL ETC) como una forma de proteger los datos que se manipulan dentro de las funciones

Los lenguajes OOP incorporan la posibilidad de encapsular tambieacuten las estructuras de datos que sirven como base a las funciones Aportan por tanto un nivel superior en cuanto a proteccioacuten de informacioacuten

La encapsulacioacuten nos permite el uso de libreriacuteas de objetos para el desarrollo de nuestros programas Recordemos que las libreriacuteas son definiciones de objetos de propoacutesito general que se incorporan a los programas Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde estaacute definido ya que contiene y define todo lo que necesita para poder funcionar es faacutecil utilizarlo en los mas variados tipos de aplicaciones Si aseguramos depurando las propiedades y las operaciones dentro de la clase que el objeto funcioacuten bien dentro de una aplicacioacuten con una correcta encapsulacioacuten el objeto podraacute funcionar en cualquier otra

Otra de las ventajas de la encapsulacioacuten es que al definir el objeto como una caja negra con entradas y salida asociadas en cualquier momento podemos cambiar el contenido de las operaciones del objeto de manera que no afecte al funcionamiento general del programa

La encapsulacioacuten estaacute en el nuacutecleo de dos grandes pilares de la construccioacuten de sistemas mantenibilidad y reusabilidad

Mantenibilidad

Cualidad que indica que un programa o sistema debe ser faacutecilmente modificable Es decir que los cambios en las condiciones externas (como la definicioacuten de una nueva variable) implicaraacuten modificaciones pequentildeas en el programa sistema El concepto de mantenibilidad implica que un programa al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante

Reusabilidad

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccioacuten de otros programas Ello implica que los objetos definidos en un programa pueden ser extraiacutedos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el coacutedigo del objeto El objeto final es que el programador construya una libreriacutea de objetos que le permita realizar programas basaacutendose en la teacutecnica de cortar y pegar Esta extrae (corta) coacutedigo de otras aplicaciones ya realizadas y las implementa (pega) en la aplicacioacuten a realizar donde tras algunos retoques la nueva aplicacioacuten estaraacute lista para funcionar Como podraacute observar el concepto de reusabilidad permite reducir el tiempo de realizacioacuten ganando en claridad mantenibilidad y productividad

La encapsulacioacuten de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad con el uacutenico coste adicional de definir con precisioacuten las entradas y salida de nuestras operaciones

Poliformismo

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 5: 2983238 programacion-orientada-a-objetos

clases y estas en aacuterboles o enrejados que reflejan un comportamiento comuacuten Cuando un objeto hereda de maacutes de una clase se dice que hay herencia muacuteltiple

Lenguajes orientados a objetos [editar]

Entre los lenguajes orientados a objetos destacan los siguientes

bull ActionScript bull ActionScript 3 bull Ada bull C++ bull C bull Clarion bull Lenguaje de programacioacuten D bull Object Pascal (Delphi) bull Harbour bull Eiffel bull Java bull JavaScript (la herencia se realiza por medio de la programacioacuten basada en

prototipos) bull Lexico (en castellano) bull Objective-C bull Ocaml bull Oz bull Lenguaje de programacioacuten R bull Perl (soporta herencia muacuteltiple La resolucioacuten se realiza en preorden pero puede

modificarse al algoritmo C3 por medio del moacutedulo ClassC3 en CPAN) bull PHP (en su versioacuten 5) bull Python bull Ruby bull Smalltalk bull Magik (SmallWorld) bull VBNET bull Visual FoxPro bull XBase++ bull Gambas bull Flex builder (adobe)

Muchos de estos lenguajes de programacioacuten no son puramente orientados a objetos sino que son hiacutebridos que combinan la POO con otros paradigmas

Al igual que C++ otros lenguajes como OOCOBOL OOLISP OOPROLOG y Object REXX han sido creados antildeadiendo extensiones orientadas a objetos a un lenguaje de programacioacuten claacutesico

Un nuevo paso en la abstraccioacuten de paradigmas de programacioacuten es la Programacioacuten Orientada a Aspectos (POA) Aunque es todaviacutea una metodologiacutea en estado de maduracioacuten cada vez atrae a maacutes investigadores e incluso proyectos comerciales en todo el mundo

Monografiacuteascom

Programacioacuten Orientada a ObjetosSistemas de Procesamiento de Datos

INTRODUCCION

Actualmente una de las aacutereas maacutes candentes en la industria y en el aacutembito acadeacutemico es la orientacioacuten a objetos La orientacioacuten a objetos promete mejoras de amplio alcance en la forma de disentildeo desarrollo y mantenimiento del software ofreciendo una solucioacuten a largo plazo a los problemas y preocupaciones que han existido desde el comienzo en el desarrollo de software la falta de portabilidad del coacutedigo y reusabilidad coacutedigo que es dificil de modificar ciclos de desarrollo largos y tecnicas de codificacion no intuituvas

Un lenguaje orientado a objetos ataca estos problemas Tiene tres caracteriacutesticas basicas debe estar basado en objetos basado en clases y capaz de tener herencia de clases Muchos lenguajes cumplen uno o dos de estos puntos muchos menos cumplen los tres La barrera maacutes difiacutecil de sortear es usualmente la herencia

El concepto de programacioacuten orientada a objetos (OOP) no es nuevo lenguajes claacutesicos como SmallTalk se basan en ella Dado que la OOP se basa en la idea natural de la existencia de un mundo lleno de objetos y que la resolucioacuten del problema se realiza en teacuterminos de objetos un lenguaje se dice que estaacute basado en objetos si soporta objetos como una caracteriacutestica fundamental del mismo

El elemento fundamental de la OOP es como su nombre lo indica el objeto Podemos definir un objeto como un conjunto complejo de datos y programas que poseen estructura y forman parte de una organizacioacuten

Esta definicioacuten especifica varias propiedades importantes de los objetos En primer lugar un objeto no es un dato simple sino que contiene en su interior cierto nuacutemero de componentes bieacuten estructurados En segundo lugar cada objeto no es un ente aislado sino que forma parte de una organizacioacuten jeraacuterquica o de otro tipo

ESTRUCTURA DE UN OBJETO

Un objeto puede considerarse como una especie de caacutepsula dividida en tres partes

1 - RELACIONES

2 - PROPIEDADES

3 - METODOS

Cada uno de estos componentes desempentildea un papel totalmente independiente

Las relaciones permiten que el objeto se insterte en la organizacioacuten y estaacuten formadas esencialmente por punteros a otros objetos

Las propiedades distinguen un objeto determinado de los restantes que forman parte de la misma organizacioacuten y tiene valores que dependen de la propiedad de que se trate Las propiedades de un objeto pueden ser heredadas a sus descendientes en la organizacioacuten

Los meacutetodos son las operaciones que pueden realizarse sobre el objeto que normalmente estaraacuten incorporados en forma de programas (coacutedigo) que el objeto es capaz de ejecutar y que tambieacuten pone a disposicioacuten de sus descendientes a traveacutes de la herencia

Encapsulamiento y ocultacioacuten

Como hemos visto cada objeto es una estructura compleja en cuyo interior hay datos y programas todos ellos relacionados entre siacute como si estuvieran encerrados conjuntamente en una caacutepsula Esta propiedad (encapsulamiento) es una de las caracteriacutesticas fundamentales en la OOP

Los objetos son inaccesibles e impiden que otros objetos los usuarios o incluso los programadores conozcan coacutemo estaacute distribuiacuteda la informacioacuten o queacute informacioacuten hay disponible Esta propiedad de los objetos se denomina ocultacioacuten de la informacioacuten

Esto no quiere decir sin embargo que sea imposible conocer lo necesario respecto a un objeto y a lo que contiene Si asiacute fuera no se podriacutea hacer gran cosa con eacutel Lo que sucede es que las peticiones de informacioacuten a un objeto deben realizarse a traveacutes de mensajes dirigidos a eacutel con la orden de realizar la operacioacuten pertinente La respuesta a estas ordenes seraacute la informacioacuten requerida siempre que el objeto considere que quien enviacutea el mensaje estaacute autorizado para obtenerla

El hecho de que cada objeto sea una caacutepsula facilita enormemente que un objeto determinado pueda ser transportado a otro punto de la organizacioacuten o incluso a otra organizacioacuten totalmente diferente que precise de eacutel Si el objeto ha sido bien construiacutedo sus meacutetodos seguiraacuten funcionando en el nuevo entorno sin problemas Esta cualidad hace que la OOP sea muy apta para la reutilizacioacuten de programas

Organizacioacuten de los objetos

En principio los objetos forman siempre una organizacioacuten jeraacuterquica en el sentido de que ciertos objetos son superiores a otros de cierto modo

Existen varios tipos tipos de jerarquiacuteas seraacuten simples cuando su estructura pueda ser representada por medio de un arbol En otros casos puede ser maacutes compleja

En cualquier caso sea la estructura simple o compleja podraacuten distinguirse en ella tres niveles de objetos

-La raiacutez de la jerarquiacutea Se trata de un objeto uacutenico y especial Este se caracteriacuteza por estar en el nivel maacutes alto de la estructura y suele recibir un nombre muy geneacuterico que indica su categoriacutea especial como por ejemplo objeto madre Raiacutez o Entidad

-Los objetos intermedios Son aquellos que descienden directamente de la raiacutez y que a su vez tienen descendientes Representan conjuntos o clases de objetos que pueden ser muy generales o muy especializados seguacuten la aplicacioacuten Normalmente reciben nombres geneacutericos que denotan al conjunto de objetos que representan por ejemplo VENTANA CUENTA FICHERO En un conjunto reciben el nombre de clases o tipos si descienden de otra clase o subclase

-Los objetos terminales Son todos aquellos que descienden de una clase o subclase y no tienen descendientes Suelen llamarse casos particulares instancias o iacutetems porque representan los elementos del conjunto representado por la clase o subclase a la que pertenecen

Veamos ahora en detalle los tres elementos mencionados en Estructura de un Objeto

1 RELACIONES

Las relaciones entre objetos son precisamente los enlaces que permiten a un objeto relacionarse con aquellos que forman parte de la misma organizacioacuten

Las hay de dos tipos fundamentales

-Relaciones jeraacuterquicas Son esenciales para la existencia misma de la aplicacioacuten porque la construyen Son bidireccionales es decir un objeto es padre de otro cuando el primer objeto se encuentra situado inmediatamente encima del segundo en la organizacioacuten en la que ambos forman parte asimismo si un objeto es padre de otro el segundo es hijo del primero (en la fig 2 B es padre de DE y F es decir DE y F son hijos de B en la fig 3 los objetos B y C son padres de F que a su vez es hijo de ambos)

Una organizacioacuten jeraacuterquica simple puede definirse como aquella en la que un objeto puede tener un solo padre mientras que en una organizacion jeraacuterquica compleja un hijo puede tener varios padres)

-Relaciones semaacutenticas Se refieren a las relaciones que no tienen nada que ver con la organizacioacuten de la que forman parte los objetos que las establecen Sus

propiedades y consecuencia solo dependen de los objetos en siacute mismos (de su significado) y no de su posicioacuten en la organizacioacuten

Se puede ver mejor con un ejemplo supongamos que vamos a construir un diccionario informatizado que permita al usuario obtener la definicioacuten de una palabra cualquiera Supongamos que en dicho diccionario las palabras son objetos y que la organizacioacuten jeraacuterquica es la que proviene de forma natural de la estructura de nuestros conocimientos sobre el mundo

La raiacutez del diccionario podriacutea llamarse TEMAS De eacuteste teacutermino geneacuterico descenderaacuten tres grandes ramas de objetos llamadas VIDA MUNDO y HOMBRE El primero (vida) comprenderaacute las ciencias bioloacutegicas Biologiacutea y Medicina El segundo (mundo) las ciencias de la naturaleza inerte las Matemaacuteticas la Fiacutesica la Quiacutemica y la Geologiacutea El tercero (hombre) comprenderaacute las ciencias humanas la Geografiacutea la Historia etc

Veamos un ejemplo estableceremos la relacioacuten trabajo entre los objetos NEWTON y OPTICA y la interpretaremos diciendo que significa que Newton trabajoacute en oacuteptica (veacutease la fig 4) La relacioacuten es evidentemente semaacutentica pueacutes no establece ninguna connotacioacuten jeraacuterquica entre NEWTON y OPTICA y su interpretacioacuten depende exclusivamente del significado de ambos objetos

La existencia de esta relacioacuten nos permitiraacute responder a preguntas como

iquestQuieacuten trabajoacute en oacuteptica

iquestEn queacute trabajoacute Newton

iquestQuien trabajoacute en Fiacutesica

Las dos primeras se deducen inmediatamente de la existencia de la relacioacuten trabajo Para la tercera observamos que si Newton trabajoacute en oacuteptica automaacuteticamente sabemos que trabajoacute en Fiacutesica por ser oacuteptica una rama de la Fiacutesica (en nuestro diccionario el objeto OPTICA es hijo del objeto FISICA) Entonces gracias a la OOP podemos responder a la tercera pregunta sin necesidad de establecer una relacioacuten entre NEWTON y FISICA apoyandonos soacutelo en la relacioacuten definida entre NEWTON y OPTICA y en que OPTICA es hijo de FISICA De este modo se elimina toda redundancia innecesaria y la cantidad de informacioacuten que tendremos que definir para todo el diccionario seraacute miacutenima

2 PROPIEDADES

Todo objeto puede tener cierto nuacutemero de propiedades cada una de las cuales tendraacute a su vez uno o varios valores En OOP las propiedades corresponden a las claacutesicas variables de la programacioacuten estructurada Son por lo tanto datos encapsulados dentro del objeto junto con los meacutetodos (programas) y las relaciones (punteros a otros objetos) Las propiedades de un objeto pueden tener un valor uacutenico o pueden contener un conjunto de valores mas o menos estructurados (matrices vectores listas etc) Ademaacutes los valores pueden ser de cualquier tipo (numeacuterico alfabeacutetico etc) si el sistema de programacioacuten lo permite

Pero existe una diferencia con las variables y es que las propiedades se pueden heredar de unos objetos a otros En consecuencia un objeto puede tener una propiedad de maneras diferentes

-Propiedades propias Estaacuten formadas dentro de la caacutepsula del objeto

-Propiedades heredadas Estan definidas en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estas propiedades se llaman propiedades miembro porque el objeto las posee por el mero hecho de ser miembro de una clase

3 METODOS

Una operacioacuten que realiza acceso a los datos Podemos definir meacutetodo como un programa procedimental o procedural escrito en cualquier lenguaje que estaacute asociado a un objeto determinado y cuya ejecucioacuten soacutelo puede desencadenarse a traveacutes de un mensaje recibido por eacuteste o por sus descendientes

Son sinoacutenimos de meacutetodo todos aquellos teacuterminos que se han aplicado tradicionalmente a los programas como procedimiento funcioacuten rutina etc Sin embargo es conveniente utilizar el teacutermino meacutetodo para que se distingan claramente las propiedades especiales que adquiere un programa en el entorno OOP que afectan fundamentalmente a la forma de invocarlo (uacutenicamente a traveacutes de un mensaje) y a su campo de accioacuten limitado a un objeto y a sus descendientes aunque posiblemente no a todos

Si los meacutetodos son programas se deduce que podriacutean tener argumentos o paraacutemetros Puesto que los meacutetodos pueden heredarse de unos objetos a otros un objeto puede disponer de un meacutetodo de dos maneras diferentes

-Meacutetodos propios Estaacuten incluiacutedos dentro de la caacutepsula del objeto

-Meacutetodos heredados Estan definidos en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estos meacutetodos se llaman meacutetodos miembro porque el objeto los posee por el mero hecho de ser miembro de una clase

Polimorfiacutesmo

Una de las caracteriacutesticas fundamentales de la OOP es el polimorfiacutesmo que no es otra cosa que la posibilidad de construir varios meacutetodos con el mismo nombre pero con relacioacuten a la clase a la que pertenece cada uno con comportamientos diferentes Esto conlleva la habilidad de enviar un mismo mensaje a objetos de clases diferentes Estos objetos recibiriacutean el mismo mensaje global pero responderiacutean a eacutel de formas diferentes por ejemplo un mensaje + a un objeto ENTERO significariacutea suma mientras que para un objeto STRING significariacutea concatenacioacuten (pegar strings uno seguido al otro)

Demonios

Es un tipo especial de meacutetodos relativamente poco frecuente en los sistemas de OOP que se activa automaacuteticamente cuando sucede algo especial Es decir es un programa como los meacutetodos ordinarios pero se diferencia de estos porque su ejecucioacuten no se activa con un mensaje sino que se desencadena autmaacuteticamente

cuando ocurre un suceso determinado la asignacioacuten de un valor a una propiedad de un objeto la lectura de un valor determinado etc

Los demonios cuando existen se diferencian de otros meacutetodos por que no son heredables y porque a veces estaacuten ligados a una de las propiedades de un objeto mas que al objeto entero

CONSIDERACIONES FINALES

Beneficios que se obtienen del desarrollo con OOP

Diacutea a diacutea los costos del Hardware decrecen Asiacute surgen nuevas aacutereas de aplicacioacuten cotidianamente procesamiento de imaacutegenes y sonido bases de datos multimediales automatizacioacuten de oficinas ambientes de ingenieriacutea de software etc Auacuten en las aplicaciones tradicionales encontramos que definir interfases hombre-maacutequina a-la-Windows suele ser bastante conveniente

Lamentablemente los costos de produccioacuten de software siguen aumentando el mantenimiento y la modificacioacuten de sistemas complejos suele ser una tarea trabajosa cada aplicacioacuten (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo etc

Todos estos problemas auacuten no han sido solucionados en forma completa Pero como los objetos son portables (teoacutericamente) mientras que la herencia permite la reusabilidad del coacutedigo orientado a objetos es maacutes sencillo modificar coacutedigo existente porque los objetos no interaccionan excepto a traveacutes de mensajes en consecuencia un cambio en la codificacioacuten de un objeto no afectaraacute la operacioacuten con otro objeto siempre que los meacutetodos respectivos permanezcan intactos La introduccioacuten de tecnologiacutea de objetos como una herramienta concepual para analizar disentildear e implementar aplicaciones permite obtener aplicaciones maacutes modificables faacutecilmente extendibles y a partir de componentes reusables Esta reusabilidad del coacutedigo disminuye el tiempo que se utiliza en el desarrollo y hace que el desarrollo del software sea mas intuitivo porque la gente piensa naturalmente en teacuterminos de objetos maacutes que en teacuterminos de algoritmos de software

Problemas derivados de la utilizacioacuten de OOP en la actualidad

Un sistema orientado a objetos por lo visto puede parecer un paraiacuteso virtual El problema sin embargo surge en la implementacioacuten de tal sistema Muchas compantildeiacuteas oyen acerca de los beneficios de un sistema orientado a objetos e invierten gran cantidad de recursos luego comienzan a darse cuenta que han impuesto una nueva cultura que es ajena a los programadores actuales Especiacuteficamente los siguientes temas suelen aparecer repetidamente

Curvas de aprendizaje largas Un sistema orientado a objetos ve al mundo en una forma uacutenica Involucra la conceptualizacioacuten de todos los elementos de un programa desde subsistemas a los datos en la forma de objetos Toda la comunicacioacuten entre los objetos debe realizarse en la forma de mensajes Esta no es la forma en que estaacuten escritos los programas orientados a objetos actualmente al hacer la transicioacuten a un sistema orientado a objetos la mayoriacutea de los programadores deben capacitarse nuevamente antes de poder usarlo

Dependencia del lenguaje A pesar de la portabilidad conceptual de los objetos en un sistema orientado a objetos en la praacutectica existen muchas dependencias Muchos lenguajes orientados a objetos estaacuten compitiendo actualmente para dominar el mercado Cambiar el lenguaje de implementacioacuten de un sistema orientado a objetos no es una tarea sencilla por ejemplo C++ soporta el concepto de herencia multiple mientras que SmallTalk no lo soporta en consecuencia la eleccioacuten de un lenguaje tiene ramificaciones de disentildeo muy importamtes

Determinacion de las clases Una clase es un molde que se utiliza para crear nuevos objetos En consecuencia es importante crear el conjunto de clases adecuado para un proyecto Desafortunadamente la definicioacuten de las clases es maacutes un arte que una ciencia Si bien hay muchas jerarquiacuteas de clase predefinidas usualmente se deben crear clases especiacuteficas para la aplicacioacuten que se este desarrollando Luego en 6 meses oacute 1 antildeo se da cuenta que las clases que se establecieron no son posibles en ese caso seraacute necesario reestructurar la jerarquiacutea de clases devastando totalmente la planificacioacuten original

Performance En un sistema donde todo es un objeto y toda interaccion es a traveacutes de mensajes el traacutefico de mensajes afecta la performance A medida que la tecnologiacutea avanza y la velocidad de microprocesamiento potencia y tamantildeo de la memoria aumentan la situacion mejoraraacute pero en la situacioacuten actual un disentildeo de una aplicacioacuten orientada a objetos que no tiene en cuenta la performance no seraacute viable comercialmente

Idealmente habriacutea una forma de atacar estos problemas eficientemente al mismo tiempo que se obtienen los beneficios del desarrollo de una estrategia orientada a objetos Deberia existir una metodologiacutea faacutecil de aprender e independiente del lenguaje y facil de reestructurar que no drene la performance del sistema

Monografiacuteascom

Programacioacuten orientada a Objetos(OOP Object Oriented Programming)

1 Introduccioacuten 2 Objetos 3 Disentildeo de aplicaciones y eleccioacuten de entorno 4 Aplicaciones orientadas a objetos 5 Caracteriacutesticas de los lenguajes OOP 6 Panoraacutemica de los lenguajes OOP 7 Bases de datos orientadas a objetos 8 Objetos y asociaciones

9 La relacioacuten de herencia 10 Bibliografiacutea infografiacutea

Introduccioacuten

l teacutermino de Programacioacuten Orientada a Objetos indica maacutes una forma de disentildeo y una metodologiacutea de desarrollo de software que un lenguaje de programacioacuten ya que en realidad se puede aplicar el Disentildeo Orientado a Objetos (En ingleacutes abreviado OOD Object Oriented Design) a cualquier tipo de lenguaje de programacioacuten

El desarrollo de la OOP empieza a destacar durante la deacutecada de lo 80 tomando en cuenta la programacioacuten estructurada a la que engloba y dotando al programador de nuevos elementos para el anaacutelisis y desarrollo de software

El propoacutesito de este trabajo es explicar el disentildeo orientado a objeto y no una explicacioacuten de su programacioacuten puesto que no nos alcanzariacutea toda la curriacutecula para hacerlo

Baacutesicamente la OOP permite a los programadores escribir software de forma que esteacute organizado en la misma manera que el problema que trata de modelizar Los lenguajes de programacioacuten convencionales son poco maacutes que una lista de acciones a realizar sobre un conjunto de datos en una determinada secuencia Si en alguacuten punto del programa modificamos la estructura de los datos o la accioacuten realizada sobre ellos el programa cambia

La OOP aporta un enfoque nuevo convirtiendo la estructura de datos en el centro sobre el que pivotan las operaciones De esta forma cualquier modificacioacuten de la estructura de datos tiene efecto inmediato sobre las acciones a realizar sobre ella

siendo esta una de la diferencias radicales respecto a la programacioacuten estructurada

Para quienes no estaacuten familiarizados con la programacioacuten estructurada direacute que una de las bases de esta escuela de programacioacuten parte del disentildeo arriba ndash abajo En esta forma de disentildeo se descomponen los requerimientos del programa paso a paso hasta llegar a un nivel que permite expresarlos mediante procedimientos y funciones La OOP estructura los datos en objetos que pueden almacenar manipular y combinar informacioacuten

En resumen la programacioacuten estructurada presta atencioacuten al conjunto de acciones que manipulan el flujo de datos (desde la situacioacuten inicial a la final) mientras que la programacioacuten orientada a objetos presta atencioacuten a la interrelacioacuten que existe entre los datos y las acciones a realizar con ellos

Muchos habraacuten oiacutedo comentarios sobre la incidencia de la OOP sobre la programacioacuten convencional Se ha llegado a decir que el cambio introducido por la OOP es similar al producido por la aparicioacuten del ensamblador sobre el coacutedigo de maacutequina

La OOP proporciona las siguientes ventajas sobre otros lenguajes de programacioacuten

Uniformidad Ya que la representacioacuten de los objetos lleva implica tanto el anaacutelisis como el disentildeo y la codificacioacuten de los mismos

Comprensioacuten Tanto los datos que componen los objetos como los procedimientos que los manipulan estaacuten agrupados en clases que se corresponden con las estructuras de informacioacuten que el programa trata

Flexibilidad Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar cualquier cambio que se realice sobre ellos quedaraacute reflejado automaacuteticamente en cualquier lugar donde estos datos aparezcan

Estabilidad Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo

Reusabilidad La nocioacuten de objeto permite que programas que traten las mismas estructuras de informacioacuten reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan De esta forma el desarrollo de un programa puede llegar a ser una simple combinacioacuten de objetos ya definidos donde estos estaacuten relacionados de una manera particular

Uno de los puntos clave a remarcar en esta introduccioacuten es que la programacioacuten orientada a objetos no sustituye a ninguna metodologiacutea ni lenguaje de programacioacuten anterior Todos los programas que se realizan seguacuten OOD se pueden realizar igualmente mediante programacioacuten estructurada Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas

basadas en un interface de usuario graacutefico como Windows OS2 x-Windows etc Es mucho maacutes sencillo

OBJETOS

Caracteriacutesticas de los Objetos

Identidad del Objeto

La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos son distintos entre siacute De esta forma incluso una serie de Objetos coches recieacuten fabricados son distintos los unos de los otros

La afirmacioacuten anterior aunque parece obvia tiene importancia cuando descendemos al nivel de programacioacuten En este aacutembito cada uno de los objetos tiene un controlador pro el cual se identifica Este puede ser una variable una estructura de datos una cadena de caracteres etc El controlador seraacute distinto para cada uno de los objeto aunque las referencias a eacutestos sean uniformes e independientes del contenido permitiendo crear agrupaciones de objetos con el mismo tratamiento

Clasificacioacuten

Con la clasificacioacuten comienza la verdadera programacioacuten orientada a objetos Ellos nos obliga a una abstraccioacuten del concepto de objeto denominada clase

Las clases permiten la agrupacioacuten de objetos que comparten las mismas propiedades y comportamiento Si bien clase y objeto suelen usarse como sinoacutenimos no lo son

El esfuerzo del programador ante una aplicacioacuten orientada a objetos se centra en la identificacioacuten de las clases sus atributos y operaciones asociadas

Las propiedades de cada clase deben cumplir una serie de premisas

Las propiedades deber ser significativas dentro del entorno de la aplicacioacuten es decir deben servir para identificar claramente y de una manera uacutenica (y univoca) a cada uno de los objetos

El nuacutemero de propiedades de un objeto debe ser el miacutenimo para realizar todas las operaciones que requiera la aplicacioacuten

Definamos una clase rectaacutengulo Esta clase puede tener como atributos un punto (xy) la anchura (a) y la longitud (l) Las operaciones a realizar son mover agrandar reducir et iquestEs posible realizarlas con las propiedades de la clase

Un anaacutelisis posterior nos indica que es posible la realizacioacuten de estas operaciones con los atributos definidos Pero si incluimos la operacioacuten girar vemos que con las propiedades definidas para la clase esta operacioacuten no se puede realizar Para incluir esta nueva operacioacuten debemos redefinir las propiedades del objeto en este caso las coordenadas de los veacutertices

Encapsulacioacuten y ocultacioacuten de datos

La capacidad de presentacioacuten de informacioacuten dentro de un objeto se divide en dos partes bien diferenciadas

Interna La informacioacuten que necesita el objeto para operar y que es innecesaria para los demaacutes objetos de la aplicacioacuten Estos atributos se denominada privados y tienen como marco de aplicacioacuten uacutenicamente a las operaciones asociadas al objeto

Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos Estas propiedades se denominan puacuteblicas y corresponde a la informacioacuten que necesitan conocer los restantes objetos de la aplicacioacuten respecto del objeto definido para poder operar

Podemos imaginarla encapsulacioacuten como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida Si introducimos datos por la entrada automaacuteticamente obtendraacute un resultado en la salida No necesita conocer ninguacuten detalle del funcionamiento interno de la caja

El teacutermino encapsulacioacuten indica l capacidad que tienen los objetos de construir una caacutepsula a su alrededor ocultando la informacioacuten que contienen (aqueacutella que es necesaria para su funcionamiento interno pero innecesaria para los demaacutes objetos) a las otras clases que componen la aplicacioacuten

Aunque a primera vista la encapsulacioacuten puede parecer superflua tengamos en cuenta que existen muchas variables utilizadas de forma temporal contadores y variables que contienen resultados intermedios etc D no ser por la encapsulacioacuten estas variables ocupariacutean memoria y podriacutean interferir en el funcionamiento del resto de los objetos

La encapsulacioacuten no es exclusiva de los lenguajes de programacioacuten orientados a objetos Aparece en los lenguajes basados en procedimientos (PASCAL C COBOL ETC) como una forma de proteger los datos que se manipulan dentro de las funciones

Los lenguajes OOP incorporan la posibilidad de encapsular tambieacuten las estructuras de datos que sirven como base a las funciones Aportan por tanto un nivel superior en cuanto a proteccioacuten de informacioacuten

La encapsulacioacuten nos permite el uso de libreriacuteas de objetos para el desarrollo de nuestros programas Recordemos que las libreriacuteas son definiciones de objetos de propoacutesito general que se incorporan a los programas Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde estaacute definido ya que contiene y define todo lo que necesita para poder funcionar es faacutecil utilizarlo en los mas variados tipos de aplicaciones Si aseguramos depurando las propiedades y las operaciones dentro de la clase que el objeto funcioacuten bien dentro de una aplicacioacuten con una correcta encapsulacioacuten el objeto podraacute funcionar en cualquier otra

Otra de las ventajas de la encapsulacioacuten es que al definir el objeto como una caja negra con entradas y salida asociadas en cualquier momento podemos cambiar el contenido de las operaciones del objeto de manera que no afecte al funcionamiento general del programa

La encapsulacioacuten estaacute en el nuacutecleo de dos grandes pilares de la construccioacuten de sistemas mantenibilidad y reusabilidad

Mantenibilidad

Cualidad que indica que un programa o sistema debe ser faacutecilmente modificable Es decir que los cambios en las condiciones externas (como la definicioacuten de una nueva variable) implicaraacuten modificaciones pequentildeas en el programa sistema El concepto de mantenibilidad implica que un programa al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante

Reusabilidad

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccioacuten de otros programas Ello implica que los objetos definidos en un programa pueden ser extraiacutedos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el coacutedigo del objeto El objeto final es que el programador construya una libreriacutea de objetos que le permita realizar programas basaacutendose en la teacutecnica de cortar y pegar Esta extrae (corta) coacutedigo de otras aplicaciones ya realizadas y las implementa (pega) en la aplicacioacuten a realizar donde tras algunos retoques la nueva aplicacioacuten estaraacute lista para funcionar Como podraacute observar el concepto de reusabilidad permite reducir el tiempo de realizacioacuten ganando en claridad mantenibilidad y productividad

La encapsulacioacuten de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad con el uacutenico coste adicional de definir con precisioacuten las entradas y salida de nuestras operaciones

Poliformismo

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 6: 2983238 programacion-orientada-a-objetos

Un nuevo paso en la abstraccioacuten de paradigmas de programacioacuten es la Programacioacuten Orientada a Aspectos (POA) Aunque es todaviacutea una metodologiacutea en estado de maduracioacuten cada vez atrae a maacutes investigadores e incluso proyectos comerciales en todo el mundo

Monografiacuteascom

Programacioacuten Orientada a ObjetosSistemas de Procesamiento de Datos

INTRODUCCION

Actualmente una de las aacutereas maacutes candentes en la industria y en el aacutembito acadeacutemico es la orientacioacuten a objetos La orientacioacuten a objetos promete mejoras de amplio alcance en la forma de disentildeo desarrollo y mantenimiento del software ofreciendo una solucioacuten a largo plazo a los problemas y preocupaciones que han existido desde el comienzo en el desarrollo de software la falta de portabilidad del coacutedigo y reusabilidad coacutedigo que es dificil de modificar ciclos de desarrollo largos y tecnicas de codificacion no intuituvas

Un lenguaje orientado a objetos ataca estos problemas Tiene tres caracteriacutesticas basicas debe estar basado en objetos basado en clases y capaz de tener herencia de clases Muchos lenguajes cumplen uno o dos de estos puntos muchos menos cumplen los tres La barrera maacutes difiacutecil de sortear es usualmente la herencia

El concepto de programacioacuten orientada a objetos (OOP) no es nuevo lenguajes claacutesicos como SmallTalk se basan en ella Dado que la OOP se basa en la idea natural de la existencia de un mundo lleno de objetos y que la resolucioacuten del problema se realiza en teacuterminos de objetos un lenguaje se dice que estaacute basado en objetos si soporta objetos como una caracteriacutestica fundamental del mismo

El elemento fundamental de la OOP es como su nombre lo indica el objeto Podemos definir un objeto como un conjunto complejo de datos y programas que poseen estructura y forman parte de una organizacioacuten

Esta definicioacuten especifica varias propiedades importantes de los objetos En primer lugar un objeto no es un dato simple sino que contiene en su interior cierto nuacutemero de componentes bieacuten estructurados En segundo lugar cada objeto no es un ente aislado sino que forma parte de una organizacioacuten jeraacuterquica o de otro tipo

ESTRUCTURA DE UN OBJETO

Un objeto puede considerarse como una especie de caacutepsula dividida en tres partes

1 - RELACIONES

2 - PROPIEDADES

3 - METODOS

Cada uno de estos componentes desempentildea un papel totalmente independiente

Las relaciones permiten que el objeto se insterte en la organizacioacuten y estaacuten formadas esencialmente por punteros a otros objetos

Las propiedades distinguen un objeto determinado de los restantes que forman parte de la misma organizacioacuten y tiene valores que dependen de la propiedad de que se trate Las propiedades de un objeto pueden ser heredadas a sus descendientes en la organizacioacuten

Los meacutetodos son las operaciones que pueden realizarse sobre el objeto que normalmente estaraacuten incorporados en forma de programas (coacutedigo) que el objeto es capaz de ejecutar y que tambieacuten pone a disposicioacuten de sus descendientes a traveacutes de la herencia

Encapsulamiento y ocultacioacuten

Como hemos visto cada objeto es una estructura compleja en cuyo interior hay datos y programas todos ellos relacionados entre siacute como si estuvieran encerrados conjuntamente en una caacutepsula Esta propiedad (encapsulamiento) es una de las caracteriacutesticas fundamentales en la OOP

Los objetos son inaccesibles e impiden que otros objetos los usuarios o incluso los programadores conozcan coacutemo estaacute distribuiacuteda la informacioacuten o queacute informacioacuten hay disponible Esta propiedad de los objetos se denomina ocultacioacuten de la informacioacuten

Esto no quiere decir sin embargo que sea imposible conocer lo necesario respecto a un objeto y a lo que contiene Si asiacute fuera no se podriacutea hacer gran cosa con eacutel Lo que sucede es que las peticiones de informacioacuten a un objeto deben realizarse a traveacutes de mensajes dirigidos a eacutel con la orden de realizar la operacioacuten pertinente La respuesta a estas ordenes seraacute la informacioacuten requerida siempre que el objeto considere que quien enviacutea el mensaje estaacute autorizado para obtenerla

El hecho de que cada objeto sea una caacutepsula facilita enormemente que un objeto determinado pueda ser transportado a otro punto de la organizacioacuten o incluso a otra organizacioacuten totalmente diferente que precise de eacutel Si el objeto ha sido bien construiacutedo sus meacutetodos seguiraacuten funcionando en el nuevo entorno sin problemas Esta cualidad hace que la OOP sea muy apta para la reutilizacioacuten de programas

Organizacioacuten de los objetos

En principio los objetos forman siempre una organizacioacuten jeraacuterquica en el sentido de que ciertos objetos son superiores a otros de cierto modo

Existen varios tipos tipos de jerarquiacuteas seraacuten simples cuando su estructura pueda ser representada por medio de un arbol En otros casos puede ser maacutes compleja

En cualquier caso sea la estructura simple o compleja podraacuten distinguirse en ella tres niveles de objetos

-La raiacutez de la jerarquiacutea Se trata de un objeto uacutenico y especial Este se caracteriacuteza por estar en el nivel maacutes alto de la estructura y suele recibir un nombre muy geneacuterico que indica su categoriacutea especial como por ejemplo objeto madre Raiacutez o Entidad

-Los objetos intermedios Son aquellos que descienden directamente de la raiacutez y que a su vez tienen descendientes Representan conjuntos o clases de objetos que pueden ser muy generales o muy especializados seguacuten la aplicacioacuten Normalmente reciben nombres geneacutericos que denotan al conjunto de objetos que representan por ejemplo VENTANA CUENTA FICHERO En un conjunto reciben el nombre de clases o tipos si descienden de otra clase o subclase

-Los objetos terminales Son todos aquellos que descienden de una clase o subclase y no tienen descendientes Suelen llamarse casos particulares instancias o iacutetems porque representan los elementos del conjunto representado por la clase o subclase a la que pertenecen

Veamos ahora en detalle los tres elementos mencionados en Estructura de un Objeto

1 RELACIONES

Las relaciones entre objetos son precisamente los enlaces que permiten a un objeto relacionarse con aquellos que forman parte de la misma organizacioacuten

Las hay de dos tipos fundamentales

-Relaciones jeraacuterquicas Son esenciales para la existencia misma de la aplicacioacuten porque la construyen Son bidireccionales es decir un objeto es padre de otro cuando el primer objeto se encuentra situado inmediatamente encima del segundo en la organizacioacuten en la que ambos forman parte asimismo si un objeto es padre de otro el segundo es hijo del primero (en la fig 2 B es padre de DE y F es decir DE y F son hijos de B en la fig 3 los objetos B y C son padres de F que a su vez es hijo de ambos)

Una organizacioacuten jeraacuterquica simple puede definirse como aquella en la que un objeto puede tener un solo padre mientras que en una organizacion jeraacuterquica compleja un hijo puede tener varios padres)

-Relaciones semaacutenticas Se refieren a las relaciones que no tienen nada que ver con la organizacioacuten de la que forman parte los objetos que las establecen Sus

propiedades y consecuencia solo dependen de los objetos en siacute mismos (de su significado) y no de su posicioacuten en la organizacioacuten

Se puede ver mejor con un ejemplo supongamos que vamos a construir un diccionario informatizado que permita al usuario obtener la definicioacuten de una palabra cualquiera Supongamos que en dicho diccionario las palabras son objetos y que la organizacioacuten jeraacuterquica es la que proviene de forma natural de la estructura de nuestros conocimientos sobre el mundo

La raiacutez del diccionario podriacutea llamarse TEMAS De eacuteste teacutermino geneacuterico descenderaacuten tres grandes ramas de objetos llamadas VIDA MUNDO y HOMBRE El primero (vida) comprenderaacute las ciencias bioloacutegicas Biologiacutea y Medicina El segundo (mundo) las ciencias de la naturaleza inerte las Matemaacuteticas la Fiacutesica la Quiacutemica y la Geologiacutea El tercero (hombre) comprenderaacute las ciencias humanas la Geografiacutea la Historia etc

Veamos un ejemplo estableceremos la relacioacuten trabajo entre los objetos NEWTON y OPTICA y la interpretaremos diciendo que significa que Newton trabajoacute en oacuteptica (veacutease la fig 4) La relacioacuten es evidentemente semaacutentica pueacutes no establece ninguna connotacioacuten jeraacuterquica entre NEWTON y OPTICA y su interpretacioacuten depende exclusivamente del significado de ambos objetos

La existencia de esta relacioacuten nos permitiraacute responder a preguntas como

iquestQuieacuten trabajoacute en oacuteptica

iquestEn queacute trabajoacute Newton

iquestQuien trabajoacute en Fiacutesica

Las dos primeras se deducen inmediatamente de la existencia de la relacioacuten trabajo Para la tercera observamos que si Newton trabajoacute en oacuteptica automaacuteticamente sabemos que trabajoacute en Fiacutesica por ser oacuteptica una rama de la Fiacutesica (en nuestro diccionario el objeto OPTICA es hijo del objeto FISICA) Entonces gracias a la OOP podemos responder a la tercera pregunta sin necesidad de establecer una relacioacuten entre NEWTON y FISICA apoyandonos soacutelo en la relacioacuten definida entre NEWTON y OPTICA y en que OPTICA es hijo de FISICA De este modo se elimina toda redundancia innecesaria y la cantidad de informacioacuten que tendremos que definir para todo el diccionario seraacute miacutenima

2 PROPIEDADES

Todo objeto puede tener cierto nuacutemero de propiedades cada una de las cuales tendraacute a su vez uno o varios valores En OOP las propiedades corresponden a las claacutesicas variables de la programacioacuten estructurada Son por lo tanto datos encapsulados dentro del objeto junto con los meacutetodos (programas) y las relaciones (punteros a otros objetos) Las propiedades de un objeto pueden tener un valor uacutenico o pueden contener un conjunto de valores mas o menos estructurados (matrices vectores listas etc) Ademaacutes los valores pueden ser de cualquier tipo (numeacuterico alfabeacutetico etc) si el sistema de programacioacuten lo permite

Pero existe una diferencia con las variables y es que las propiedades se pueden heredar de unos objetos a otros En consecuencia un objeto puede tener una propiedad de maneras diferentes

-Propiedades propias Estaacuten formadas dentro de la caacutepsula del objeto

-Propiedades heredadas Estan definidas en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estas propiedades se llaman propiedades miembro porque el objeto las posee por el mero hecho de ser miembro de una clase

3 METODOS

Una operacioacuten que realiza acceso a los datos Podemos definir meacutetodo como un programa procedimental o procedural escrito en cualquier lenguaje que estaacute asociado a un objeto determinado y cuya ejecucioacuten soacutelo puede desencadenarse a traveacutes de un mensaje recibido por eacuteste o por sus descendientes

Son sinoacutenimos de meacutetodo todos aquellos teacuterminos que se han aplicado tradicionalmente a los programas como procedimiento funcioacuten rutina etc Sin embargo es conveniente utilizar el teacutermino meacutetodo para que se distingan claramente las propiedades especiales que adquiere un programa en el entorno OOP que afectan fundamentalmente a la forma de invocarlo (uacutenicamente a traveacutes de un mensaje) y a su campo de accioacuten limitado a un objeto y a sus descendientes aunque posiblemente no a todos

Si los meacutetodos son programas se deduce que podriacutean tener argumentos o paraacutemetros Puesto que los meacutetodos pueden heredarse de unos objetos a otros un objeto puede disponer de un meacutetodo de dos maneras diferentes

-Meacutetodos propios Estaacuten incluiacutedos dentro de la caacutepsula del objeto

-Meacutetodos heredados Estan definidos en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estos meacutetodos se llaman meacutetodos miembro porque el objeto los posee por el mero hecho de ser miembro de una clase

Polimorfiacutesmo

Una de las caracteriacutesticas fundamentales de la OOP es el polimorfiacutesmo que no es otra cosa que la posibilidad de construir varios meacutetodos con el mismo nombre pero con relacioacuten a la clase a la que pertenece cada uno con comportamientos diferentes Esto conlleva la habilidad de enviar un mismo mensaje a objetos de clases diferentes Estos objetos recibiriacutean el mismo mensaje global pero responderiacutean a eacutel de formas diferentes por ejemplo un mensaje + a un objeto ENTERO significariacutea suma mientras que para un objeto STRING significariacutea concatenacioacuten (pegar strings uno seguido al otro)

Demonios

Es un tipo especial de meacutetodos relativamente poco frecuente en los sistemas de OOP que se activa automaacuteticamente cuando sucede algo especial Es decir es un programa como los meacutetodos ordinarios pero se diferencia de estos porque su ejecucioacuten no se activa con un mensaje sino que se desencadena autmaacuteticamente

cuando ocurre un suceso determinado la asignacioacuten de un valor a una propiedad de un objeto la lectura de un valor determinado etc

Los demonios cuando existen se diferencian de otros meacutetodos por que no son heredables y porque a veces estaacuten ligados a una de las propiedades de un objeto mas que al objeto entero

CONSIDERACIONES FINALES

Beneficios que se obtienen del desarrollo con OOP

Diacutea a diacutea los costos del Hardware decrecen Asiacute surgen nuevas aacutereas de aplicacioacuten cotidianamente procesamiento de imaacutegenes y sonido bases de datos multimediales automatizacioacuten de oficinas ambientes de ingenieriacutea de software etc Auacuten en las aplicaciones tradicionales encontramos que definir interfases hombre-maacutequina a-la-Windows suele ser bastante conveniente

Lamentablemente los costos de produccioacuten de software siguen aumentando el mantenimiento y la modificacioacuten de sistemas complejos suele ser una tarea trabajosa cada aplicacioacuten (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo etc

Todos estos problemas auacuten no han sido solucionados en forma completa Pero como los objetos son portables (teoacutericamente) mientras que la herencia permite la reusabilidad del coacutedigo orientado a objetos es maacutes sencillo modificar coacutedigo existente porque los objetos no interaccionan excepto a traveacutes de mensajes en consecuencia un cambio en la codificacioacuten de un objeto no afectaraacute la operacioacuten con otro objeto siempre que los meacutetodos respectivos permanezcan intactos La introduccioacuten de tecnologiacutea de objetos como una herramienta concepual para analizar disentildear e implementar aplicaciones permite obtener aplicaciones maacutes modificables faacutecilmente extendibles y a partir de componentes reusables Esta reusabilidad del coacutedigo disminuye el tiempo que se utiliza en el desarrollo y hace que el desarrollo del software sea mas intuitivo porque la gente piensa naturalmente en teacuterminos de objetos maacutes que en teacuterminos de algoritmos de software

Problemas derivados de la utilizacioacuten de OOP en la actualidad

Un sistema orientado a objetos por lo visto puede parecer un paraiacuteso virtual El problema sin embargo surge en la implementacioacuten de tal sistema Muchas compantildeiacuteas oyen acerca de los beneficios de un sistema orientado a objetos e invierten gran cantidad de recursos luego comienzan a darse cuenta que han impuesto una nueva cultura que es ajena a los programadores actuales Especiacuteficamente los siguientes temas suelen aparecer repetidamente

Curvas de aprendizaje largas Un sistema orientado a objetos ve al mundo en una forma uacutenica Involucra la conceptualizacioacuten de todos los elementos de un programa desde subsistemas a los datos en la forma de objetos Toda la comunicacioacuten entre los objetos debe realizarse en la forma de mensajes Esta no es la forma en que estaacuten escritos los programas orientados a objetos actualmente al hacer la transicioacuten a un sistema orientado a objetos la mayoriacutea de los programadores deben capacitarse nuevamente antes de poder usarlo

Dependencia del lenguaje A pesar de la portabilidad conceptual de los objetos en un sistema orientado a objetos en la praacutectica existen muchas dependencias Muchos lenguajes orientados a objetos estaacuten compitiendo actualmente para dominar el mercado Cambiar el lenguaje de implementacioacuten de un sistema orientado a objetos no es una tarea sencilla por ejemplo C++ soporta el concepto de herencia multiple mientras que SmallTalk no lo soporta en consecuencia la eleccioacuten de un lenguaje tiene ramificaciones de disentildeo muy importamtes

Determinacion de las clases Una clase es un molde que se utiliza para crear nuevos objetos En consecuencia es importante crear el conjunto de clases adecuado para un proyecto Desafortunadamente la definicioacuten de las clases es maacutes un arte que una ciencia Si bien hay muchas jerarquiacuteas de clase predefinidas usualmente se deben crear clases especiacuteficas para la aplicacioacuten que se este desarrollando Luego en 6 meses oacute 1 antildeo se da cuenta que las clases que se establecieron no son posibles en ese caso seraacute necesario reestructurar la jerarquiacutea de clases devastando totalmente la planificacioacuten original

Performance En un sistema donde todo es un objeto y toda interaccion es a traveacutes de mensajes el traacutefico de mensajes afecta la performance A medida que la tecnologiacutea avanza y la velocidad de microprocesamiento potencia y tamantildeo de la memoria aumentan la situacion mejoraraacute pero en la situacioacuten actual un disentildeo de una aplicacioacuten orientada a objetos que no tiene en cuenta la performance no seraacute viable comercialmente

Idealmente habriacutea una forma de atacar estos problemas eficientemente al mismo tiempo que se obtienen los beneficios del desarrollo de una estrategia orientada a objetos Deberia existir una metodologiacutea faacutecil de aprender e independiente del lenguaje y facil de reestructurar que no drene la performance del sistema

Monografiacuteascom

Programacioacuten orientada a Objetos(OOP Object Oriented Programming)

1 Introduccioacuten 2 Objetos 3 Disentildeo de aplicaciones y eleccioacuten de entorno 4 Aplicaciones orientadas a objetos 5 Caracteriacutesticas de los lenguajes OOP 6 Panoraacutemica de los lenguajes OOP 7 Bases de datos orientadas a objetos 8 Objetos y asociaciones

9 La relacioacuten de herencia 10 Bibliografiacutea infografiacutea

Introduccioacuten

l teacutermino de Programacioacuten Orientada a Objetos indica maacutes una forma de disentildeo y una metodologiacutea de desarrollo de software que un lenguaje de programacioacuten ya que en realidad se puede aplicar el Disentildeo Orientado a Objetos (En ingleacutes abreviado OOD Object Oriented Design) a cualquier tipo de lenguaje de programacioacuten

El desarrollo de la OOP empieza a destacar durante la deacutecada de lo 80 tomando en cuenta la programacioacuten estructurada a la que engloba y dotando al programador de nuevos elementos para el anaacutelisis y desarrollo de software

El propoacutesito de este trabajo es explicar el disentildeo orientado a objeto y no una explicacioacuten de su programacioacuten puesto que no nos alcanzariacutea toda la curriacutecula para hacerlo

Baacutesicamente la OOP permite a los programadores escribir software de forma que esteacute organizado en la misma manera que el problema que trata de modelizar Los lenguajes de programacioacuten convencionales son poco maacutes que una lista de acciones a realizar sobre un conjunto de datos en una determinada secuencia Si en alguacuten punto del programa modificamos la estructura de los datos o la accioacuten realizada sobre ellos el programa cambia

La OOP aporta un enfoque nuevo convirtiendo la estructura de datos en el centro sobre el que pivotan las operaciones De esta forma cualquier modificacioacuten de la estructura de datos tiene efecto inmediato sobre las acciones a realizar sobre ella

siendo esta una de la diferencias radicales respecto a la programacioacuten estructurada

Para quienes no estaacuten familiarizados con la programacioacuten estructurada direacute que una de las bases de esta escuela de programacioacuten parte del disentildeo arriba ndash abajo En esta forma de disentildeo se descomponen los requerimientos del programa paso a paso hasta llegar a un nivel que permite expresarlos mediante procedimientos y funciones La OOP estructura los datos en objetos que pueden almacenar manipular y combinar informacioacuten

En resumen la programacioacuten estructurada presta atencioacuten al conjunto de acciones que manipulan el flujo de datos (desde la situacioacuten inicial a la final) mientras que la programacioacuten orientada a objetos presta atencioacuten a la interrelacioacuten que existe entre los datos y las acciones a realizar con ellos

Muchos habraacuten oiacutedo comentarios sobre la incidencia de la OOP sobre la programacioacuten convencional Se ha llegado a decir que el cambio introducido por la OOP es similar al producido por la aparicioacuten del ensamblador sobre el coacutedigo de maacutequina

La OOP proporciona las siguientes ventajas sobre otros lenguajes de programacioacuten

Uniformidad Ya que la representacioacuten de los objetos lleva implica tanto el anaacutelisis como el disentildeo y la codificacioacuten de los mismos

Comprensioacuten Tanto los datos que componen los objetos como los procedimientos que los manipulan estaacuten agrupados en clases que se corresponden con las estructuras de informacioacuten que el programa trata

Flexibilidad Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar cualquier cambio que se realice sobre ellos quedaraacute reflejado automaacuteticamente en cualquier lugar donde estos datos aparezcan

Estabilidad Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo

Reusabilidad La nocioacuten de objeto permite que programas que traten las mismas estructuras de informacioacuten reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan De esta forma el desarrollo de un programa puede llegar a ser una simple combinacioacuten de objetos ya definidos donde estos estaacuten relacionados de una manera particular

Uno de los puntos clave a remarcar en esta introduccioacuten es que la programacioacuten orientada a objetos no sustituye a ninguna metodologiacutea ni lenguaje de programacioacuten anterior Todos los programas que se realizan seguacuten OOD se pueden realizar igualmente mediante programacioacuten estructurada Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas

basadas en un interface de usuario graacutefico como Windows OS2 x-Windows etc Es mucho maacutes sencillo

OBJETOS

Caracteriacutesticas de los Objetos

Identidad del Objeto

La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos son distintos entre siacute De esta forma incluso una serie de Objetos coches recieacuten fabricados son distintos los unos de los otros

La afirmacioacuten anterior aunque parece obvia tiene importancia cuando descendemos al nivel de programacioacuten En este aacutembito cada uno de los objetos tiene un controlador pro el cual se identifica Este puede ser una variable una estructura de datos una cadena de caracteres etc El controlador seraacute distinto para cada uno de los objeto aunque las referencias a eacutestos sean uniformes e independientes del contenido permitiendo crear agrupaciones de objetos con el mismo tratamiento

Clasificacioacuten

Con la clasificacioacuten comienza la verdadera programacioacuten orientada a objetos Ellos nos obliga a una abstraccioacuten del concepto de objeto denominada clase

Las clases permiten la agrupacioacuten de objetos que comparten las mismas propiedades y comportamiento Si bien clase y objeto suelen usarse como sinoacutenimos no lo son

El esfuerzo del programador ante una aplicacioacuten orientada a objetos se centra en la identificacioacuten de las clases sus atributos y operaciones asociadas

Las propiedades de cada clase deben cumplir una serie de premisas

Las propiedades deber ser significativas dentro del entorno de la aplicacioacuten es decir deben servir para identificar claramente y de una manera uacutenica (y univoca) a cada uno de los objetos

El nuacutemero de propiedades de un objeto debe ser el miacutenimo para realizar todas las operaciones que requiera la aplicacioacuten

Definamos una clase rectaacutengulo Esta clase puede tener como atributos un punto (xy) la anchura (a) y la longitud (l) Las operaciones a realizar son mover agrandar reducir et iquestEs posible realizarlas con las propiedades de la clase

Un anaacutelisis posterior nos indica que es posible la realizacioacuten de estas operaciones con los atributos definidos Pero si incluimos la operacioacuten girar vemos que con las propiedades definidas para la clase esta operacioacuten no se puede realizar Para incluir esta nueva operacioacuten debemos redefinir las propiedades del objeto en este caso las coordenadas de los veacutertices

Encapsulacioacuten y ocultacioacuten de datos

La capacidad de presentacioacuten de informacioacuten dentro de un objeto se divide en dos partes bien diferenciadas

Interna La informacioacuten que necesita el objeto para operar y que es innecesaria para los demaacutes objetos de la aplicacioacuten Estos atributos se denominada privados y tienen como marco de aplicacioacuten uacutenicamente a las operaciones asociadas al objeto

Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos Estas propiedades se denominan puacuteblicas y corresponde a la informacioacuten que necesitan conocer los restantes objetos de la aplicacioacuten respecto del objeto definido para poder operar

Podemos imaginarla encapsulacioacuten como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida Si introducimos datos por la entrada automaacuteticamente obtendraacute un resultado en la salida No necesita conocer ninguacuten detalle del funcionamiento interno de la caja

El teacutermino encapsulacioacuten indica l capacidad que tienen los objetos de construir una caacutepsula a su alrededor ocultando la informacioacuten que contienen (aqueacutella que es necesaria para su funcionamiento interno pero innecesaria para los demaacutes objetos) a las otras clases que componen la aplicacioacuten

Aunque a primera vista la encapsulacioacuten puede parecer superflua tengamos en cuenta que existen muchas variables utilizadas de forma temporal contadores y variables que contienen resultados intermedios etc D no ser por la encapsulacioacuten estas variables ocupariacutean memoria y podriacutean interferir en el funcionamiento del resto de los objetos

La encapsulacioacuten no es exclusiva de los lenguajes de programacioacuten orientados a objetos Aparece en los lenguajes basados en procedimientos (PASCAL C COBOL ETC) como una forma de proteger los datos que se manipulan dentro de las funciones

Los lenguajes OOP incorporan la posibilidad de encapsular tambieacuten las estructuras de datos que sirven como base a las funciones Aportan por tanto un nivel superior en cuanto a proteccioacuten de informacioacuten

La encapsulacioacuten nos permite el uso de libreriacuteas de objetos para el desarrollo de nuestros programas Recordemos que las libreriacuteas son definiciones de objetos de propoacutesito general que se incorporan a los programas Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde estaacute definido ya que contiene y define todo lo que necesita para poder funcionar es faacutecil utilizarlo en los mas variados tipos de aplicaciones Si aseguramos depurando las propiedades y las operaciones dentro de la clase que el objeto funcioacuten bien dentro de una aplicacioacuten con una correcta encapsulacioacuten el objeto podraacute funcionar en cualquier otra

Otra de las ventajas de la encapsulacioacuten es que al definir el objeto como una caja negra con entradas y salida asociadas en cualquier momento podemos cambiar el contenido de las operaciones del objeto de manera que no afecte al funcionamiento general del programa

La encapsulacioacuten estaacute en el nuacutecleo de dos grandes pilares de la construccioacuten de sistemas mantenibilidad y reusabilidad

Mantenibilidad

Cualidad que indica que un programa o sistema debe ser faacutecilmente modificable Es decir que los cambios en las condiciones externas (como la definicioacuten de una nueva variable) implicaraacuten modificaciones pequentildeas en el programa sistema El concepto de mantenibilidad implica que un programa al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante

Reusabilidad

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccioacuten de otros programas Ello implica que los objetos definidos en un programa pueden ser extraiacutedos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el coacutedigo del objeto El objeto final es que el programador construya una libreriacutea de objetos que le permita realizar programas basaacutendose en la teacutecnica de cortar y pegar Esta extrae (corta) coacutedigo de otras aplicaciones ya realizadas y las implementa (pega) en la aplicacioacuten a realizar donde tras algunos retoques la nueva aplicacioacuten estaraacute lista para funcionar Como podraacute observar el concepto de reusabilidad permite reducir el tiempo de realizacioacuten ganando en claridad mantenibilidad y productividad

La encapsulacioacuten de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad con el uacutenico coste adicional de definir con precisioacuten las entradas y salida de nuestras operaciones

Poliformismo

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 7: 2983238 programacion-orientada-a-objetos

ESTRUCTURA DE UN OBJETO

Un objeto puede considerarse como una especie de caacutepsula dividida en tres partes

1 - RELACIONES

2 - PROPIEDADES

3 - METODOS

Cada uno de estos componentes desempentildea un papel totalmente independiente

Las relaciones permiten que el objeto se insterte en la organizacioacuten y estaacuten formadas esencialmente por punteros a otros objetos

Las propiedades distinguen un objeto determinado de los restantes que forman parte de la misma organizacioacuten y tiene valores que dependen de la propiedad de que se trate Las propiedades de un objeto pueden ser heredadas a sus descendientes en la organizacioacuten

Los meacutetodos son las operaciones que pueden realizarse sobre el objeto que normalmente estaraacuten incorporados en forma de programas (coacutedigo) que el objeto es capaz de ejecutar y que tambieacuten pone a disposicioacuten de sus descendientes a traveacutes de la herencia

Encapsulamiento y ocultacioacuten

Como hemos visto cada objeto es una estructura compleja en cuyo interior hay datos y programas todos ellos relacionados entre siacute como si estuvieran encerrados conjuntamente en una caacutepsula Esta propiedad (encapsulamiento) es una de las caracteriacutesticas fundamentales en la OOP

Los objetos son inaccesibles e impiden que otros objetos los usuarios o incluso los programadores conozcan coacutemo estaacute distribuiacuteda la informacioacuten o queacute informacioacuten hay disponible Esta propiedad de los objetos se denomina ocultacioacuten de la informacioacuten

Esto no quiere decir sin embargo que sea imposible conocer lo necesario respecto a un objeto y a lo que contiene Si asiacute fuera no se podriacutea hacer gran cosa con eacutel Lo que sucede es que las peticiones de informacioacuten a un objeto deben realizarse a traveacutes de mensajes dirigidos a eacutel con la orden de realizar la operacioacuten pertinente La respuesta a estas ordenes seraacute la informacioacuten requerida siempre que el objeto considere que quien enviacutea el mensaje estaacute autorizado para obtenerla

El hecho de que cada objeto sea una caacutepsula facilita enormemente que un objeto determinado pueda ser transportado a otro punto de la organizacioacuten o incluso a otra organizacioacuten totalmente diferente que precise de eacutel Si el objeto ha sido bien construiacutedo sus meacutetodos seguiraacuten funcionando en el nuevo entorno sin problemas Esta cualidad hace que la OOP sea muy apta para la reutilizacioacuten de programas

Organizacioacuten de los objetos

En principio los objetos forman siempre una organizacioacuten jeraacuterquica en el sentido de que ciertos objetos son superiores a otros de cierto modo

Existen varios tipos tipos de jerarquiacuteas seraacuten simples cuando su estructura pueda ser representada por medio de un arbol En otros casos puede ser maacutes compleja

En cualquier caso sea la estructura simple o compleja podraacuten distinguirse en ella tres niveles de objetos

-La raiacutez de la jerarquiacutea Se trata de un objeto uacutenico y especial Este se caracteriacuteza por estar en el nivel maacutes alto de la estructura y suele recibir un nombre muy geneacuterico que indica su categoriacutea especial como por ejemplo objeto madre Raiacutez o Entidad

-Los objetos intermedios Son aquellos que descienden directamente de la raiacutez y que a su vez tienen descendientes Representan conjuntos o clases de objetos que pueden ser muy generales o muy especializados seguacuten la aplicacioacuten Normalmente reciben nombres geneacutericos que denotan al conjunto de objetos que representan por ejemplo VENTANA CUENTA FICHERO En un conjunto reciben el nombre de clases o tipos si descienden de otra clase o subclase

-Los objetos terminales Son todos aquellos que descienden de una clase o subclase y no tienen descendientes Suelen llamarse casos particulares instancias o iacutetems porque representan los elementos del conjunto representado por la clase o subclase a la que pertenecen

Veamos ahora en detalle los tres elementos mencionados en Estructura de un Objeto

1 RELACIONES

Las relaciones entre objetos son precisamente los enlaces que permiten a un objeto relacionarse con aquellos que forman parte de la misma organizacioacuten

Las hay de dos tipos fundamentales

-Relaciones jeraacuterquicas Son esenciales para la existencia misma de la aplicacioacuten porque la construyen Son bidireccionales es decir un objeto es padre de otro cuando el primer objeto se encuentra situado inmediatamente encima del segundo en la organizacioacuten en la que ambos forman parte asimismo si un objeto es padre de otro el segundo es hijo del primero (en la fig 2 B es padre de DE y F es decir DE y F son hijos de B en la fig 3 los objetos B y C son padres de F que a su vez es hijo de ambos)

Una organizacioacuten jeraacuterquica simple puede definirse como aquella en la que un objeto puede tener un solo padre mientras que en una organizacion jeraacuterquica compleja un hijo puede tener varios padres)

-Relaciones semaacutenticas Se refieren a las relaciones que no tienen nada que ver con la organizacioacuten de la que forman parte los objetos que las establecen Sus

propiedades y consecuencia solo dependen de los objetos en siacute mismos (de su significado) y no de su posicioacuten en la organizacioacuten

Se puede ver mejor con un ejemplo supongamos que vamos a construir un diccionario informatizado que permita al usuario obtener la definicioacuten de una palabra cualquiera Supongamos que en dicho diccionario las palabras son objetos y que la organizacioacuten jeraacuterquica es la que proviene de forma natural de la estructura de nuestros conocimientos sobre el mundo

La raiacutez del diccionario podriacutea llamarse TEMAS De eacuteste teacutermino geneacuterico descenderaacuten tres grandes ramas de objetos llamadas VIDA MUNDO y HOMBRE El primero (vida) comprenderaacute las ciencias bioloacutegicas Biologiacutea y Medicina El segundo (mundo) las ciencias de la naturaleza inerte las Matemaacuteticas la Fiacutesica la Quiacutemica y la Geologiacutea El tercero (hombre) comprenderaacute las ciencias humanas la Geografiacutea la Historia etc

Veamos un ejemplo estableceremos la relacioacuten trabajo entre los objetos NEWTON y OPTICA y la interpretaremos diciendo que significa que Newton trabajoacute en oacuteptica (veacutease la fig 4) La relacioacuten es evidentemente semaacutentica pueacutes no establece ninguna connotacioacuten jeraacuterquica entre NEWTON y OPTICA y su interpretacioacuten depende exclusivamente del significado de ambos objetos

La existencia de esta relacioacuten nos permitiraacute responder a preguntas como

iquestQuieacuten trabajoacute en oacuteptica

iquestEn queacute trabajoacute Newton

iquestQuien trabajoacute en Fiacutesica

Las dos primeras se deducen inmediatamente de la existencia de la relacioacuten trabajo Para la tercera observamos que si Newton trabajoacute en oacuteptica automaacuteticamente sabemos que trabajoacute en Fiacutesica por ser oacuteptica una rama de la Fiacutesica (en nuestro diccionario el objeto OPTICA es hijo del objeto FISICA) Entonces gracias a la OOP podemos responder a la tercera pregunta sin necesidad de establecer una relacioacuten entre NEWTON y FISICA apoyandonos soacutelo en la relacioacuten definida entre NEWTON y OPTICA y en que OPTICA es hijo de FISICA De este modo se elimina toda redundancia innecesaria y la cantidad de informacioacuten que tendremos que definir para todo el diccionario seraacute miacutenima

2 PROPIEDADES

Todo objeto puede tener cierto nuacutemero de propiedades cada una de las cuales tendraacute a su vez uno o varios valores En OOP las propiedades corresponden a las claacutesicas variables de la programacioacuten estructurada Son por lo tanto datos encapsulados dentro del objeto junto con los meacutetodos (programas) y las relaciones (punteros a otros objetos) Las propiedades de un objeto pueden tener un valor uacutenico o pueden contener un conjunto de valores mas o menos estructurados (matrices vectores listas etc) Ademaacutes los valores pueden ser de cualquier tipo (numeacuterico alfabeacutetico etc) si el sistema de programacioacuten lo permite

Pero existe una diferencia con las variables y es que las propiedades se pueden heredar de unos objetos a otros En consecuencia un objeto puede tener una propiedad de maneras diferentes

-Propiedades propias Estaacuten formadas dentro de la caacutepsula del objeto

-Propiedades heredadas Estan definidas en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estas propiedades se llaman propiedades miembro porque el objeto las posee por el mero hecho de ser miembro de una clase

3 METODOS

Una operacioacuten que realiza acceso a los datos Podemos definir meacutetodo como un programa procedimental o procedural escrito en cualquier lenguaje que estaacute asociado a un objeto determinado y cuya ejecucioacuten soacutelo puede desencadenarse a traveacutes de un mensaje recibido por eacuteste o por sus descendientes

Son sinoacutenimos de meacutetodo todos aquellos teacuterminos que se han aplicado tradicionalmente a los programas como procedimiento funcioacuten rutina etc Sin embargo es conveniente utilizar el teacutermino meacutetodo para que se distingan claramente las propiedades especiales que adquiere un programa en el entorno OOP que afectan fundamentalmente a la forma de invocarlo (uacutenicamente a traveacutes de un mensaje) y a su campo de accioacuten limitado a un objeto y a sus descendientes aunque posiblemente no a todos

Si los meacutetodos son programas se deduce que podriacutean tener argumentos o paraacutemetros Puesto que los meacutetodos pueden heredarse de unos objetos a otros un objeto puede disponer de un meacutetodo de dos maneras diferentes

-Meacutetodos propios Estaacuten incluiacutedos dentro de la caacutepsula del objeto

-Meacutetodos heredados Estan definidos en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estos meacutetodos se llaman meacutetodos miembro porque el objeto los posee por el mero hecho de ser miembro de una clase

Polimorfiacutesmo

Una de las caracteriacutesticas fundamentales de la OOP es el polimorfiacutesmo que no es otra cosa que la posibilidad de construir varios meacutetodos con el mismo nombre pero con relacioacuten a la clase a la que pertenece cada uno con comportamientos diferentes Esto conlleva la habilidad de enviar un mismo mensaje a objetos de clases diferentes Estos objetos recibiriacutean el mismo mensaje global pero responderiacutean a eacutel de formas diferentes por ejemplo un mensaje + a un objeto ENTERO significariacutea suma mientras que para un objeto STRING significariacutea concatenacioacuten (pegar strings uno seguido al otro)

Demonios

Es un tipo especial de meacutetodos relativamente poco frecuente en los sistemas de OOP que se activa automaacuteticamente cuando sucede algo especial Es decir es un programa como los meacutetodos ordinarios pero se diferencia de estos porque su ejecucioacuten no se activa con un mensaje sino que se desencadena autmaacuteticamente

cuando ocurre un suceso determinado la asignacioacuten de un valor a una propiedad de un objeto la lectura de un valor determinado etc

Los demonios cuando existen se diferencian de otros meacutetodos por que no son heredables y porque a veces estaacuten ligados a una de las propiedades de un objeto mas que al objeto entero

CONSIDERACIONES FINALES

Beneficios que se obtienen del desarrollo con OOP

Diacutea a diacutea los costos del Hardware decrecen Asiacute surgen nuevas aacutereas de aplicacioacuten cotidianamente procesamiento de imaacutegenes y sonido bases de datos multimediales automatizacioacuten de oficinas ambientes de ingenieriacutea de software etc Auacuten en las aplicaciones tradicionales encontramos que definir interfases hombre-maacutequina a-la-Windows suele ser bastante conveniente

Lamentablemente los costos de produccioacuten de software siguen aumentando el mantenimiento y la modificacioacuten de sistemas complejos suele ser una tarea trabajosa cada aplicacioacuten (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo etc

Todos estos problemas auacuten no han sido solucionados en forma completa Pero como los objetos son portables (teoacutericamente) mientras que la herencia permite la reusabilidad del coacutedigo orientado a objetos es maacutes sencillo modificar coacutedigo existente porque los objetos no interaccionan excepto a traveacutes de mensajes en consecuencia un cambio en la codificacioacuten de un objeto no afectaraacute la operacioacuten con otro objeto siempre que los meacutetodos respectivos permanezcan intactos La introduccioacuten de tecnologiacutea de objetos como una herramienta concepual para analizar disentildear e implementar aplicaciones permite obtener aplicaciones maacutes modificables faacutecilmente extendibles y a partir de componentes reusables Esta reusabilidad del coacutedigo disminuye el tiempo que se utiliza en el desarrollo y hace que el desarrollo del software sea mas intuitivo porque la gente piensa naturalmente en teacuterminos de objetos maacutes que en teacuterminos de algoritmos de software

Problemas derivados de la utilizacioacuten de OOP en la actualidad

Un sistema orientado a objetos por lo visto puede parecer un paraiacuteso virtual El problema sin embargo surge en la implementacioacuten de tal sistema Muchas compantildeiacuteas oyen acerca de los beneficios de un sistema orientado a objetos e invierten gran cantidad de recursos luego comienzan a darse cuenta que han impuesto una nueva cultura que es ajena a los programadores actuales Especiacuteficamente los siguientes temas suelen aparecer repetidamente

Curvas de aprendizaje largas Un sistema orientado a objetos ve al mundo en una forma uacutenica Involucra la conceptualizacioacuten de todos los elementos de un programa desde subsistemas a los datos en la forma de objetos Toda la comunicacioacuten entre los objetos debe realizarse en la forma de mensajes Esta no es la forma en que estaacuten escritos los programas orientados a objetos actualmente al hacer la transicioacuten a un sistema orientado a objetos la mayoriacutea de los programadores deben capacitarse nuevamente antes de poder usarlo

Dependencia del lenguaje A pesar de la portabilidad conceptual de los objetos en un sistema orientado a objetos en la praacutectica existen muchas dependencias Muchos lenguajes orientados a objetos estaacuten compitiendo actualmente para dominar el mercado Cambiar el lenguaje de implementacioacuten de un sistema orientado a objetos no es una tarea sencilla por ejemplo C++ soporta el concepto de herencia multiple mientras que SmallTalk no lo soporta en consecuencia la eleccioacuten de un lenguaje tiene ramificaciones de disentildeo muy importamtes

Determinacion de las clases Una clase es un molde que se utiliza para crear nuevos objetos En consecuencia es importante crear el conjunto de clases adecuado para un proyecto Desafortunadamente la definicioacuten de las clases es maacutes un arte que una ciencia Si bien hay muchas jerarquiacuteas de clase predefinidas usualmente se deben crear clases especiacuteficas para la aplicacioacuten que se este desarrollando Luego en 6 meses oacute 1 antildeo se da cuenta que las clases que se establecieron no son posibles en ese caso seraacute necesario reestructurar la jerarquiacutea de clases devastando totalmente la planificacioacuten original

Performance En un sistema donde todo es un objeto y toda interaccion es a traveacutes de mensajes el traacutefico de mensajes afecta la performance A medida que la tecnologiacutea avanza y la velocidad de microprocesamiento potencia y tamantildeo de la memoria aumentan la situacion mejoraraacute pero en la situacioacuten actual un disentildeo de una aplicacioacuten orientada a objetos que no tiene en cuenta la performance no seraacute viable comercialmente

Idealmente habriacutea una forma de atacar estos problemas eficientemente al mismo tiempo que se obtienen los beneficios del desarrollo de una estrategia orientada a objetos Deberia existir una metodologiacutea faacutecil de aprender e independiente del lenguaje y facil de reestructurar que no drene la performance del sistema

Monografiacuteascom

Programacioacuten orientada a Objetos(OOP Object Oriented Programming)

1 Introduccioacuten 2 Objetos 3 Disentildeo de aplicaciones y eleccioacuten de entorno 4 Aplicaciones orientadas a objetos 5 Caracteriacutesticas de los lenguajes OOP 6 Panoraacutemica de los lenguajes OOP 7 Bases de datos orientadas a objetos 8 Objetos y asociaciones

9 La relacioacuten de herencia 10 Bibliografiacutea infografiacutea

Introduccioacuten

l teacutermino de Programacioacuten Orientada a Objetos indica maacutes una forma de disentildeo y una metodologiacutea de desarrollo de software que un lenguaje de programacioacuten ya que en realidad se puede aplicar el Disentildeo Orientado a Objetos (En ingleacutes abreviado OOD Object Oriented Design) a cualquier tipo de lenguaje de programacioacuten

El desarrollo de la OOP empieza a destacar durante la deacutecada de lo 80 tomando en cuenta la programacioacuten estructurada a la que engloba y dotando al programador de nuevos elementos para el anaacutelisis y desarrollo de software

El propoacutesito de este trabajo es explicar el disentildeo orientado a objeto y no una explicacioacuten de su programacioacuten puesto que no nos alcanzariacutea toda la curriacutecula para hacerlo

Baacutesicamente la OOP permite a los programadores escribir software de forma que esteacute organizado en la misma manera que el problema que trata de modelizar Los lenguajes de programacioacuten convencionales son poco maacutes que una lista de acciones a realizar sobre un conjunto de datos en una determinada secuencia Si en alguacuten punto del programa modificamos la estructura de los datos o la accioacuten realizada sobre ellos el programa cambia

La OOP aporta un enfoque nuevo convirtiendo la estructura de datos en el centro sobre el que pivotan las operaciones De esta forma cualquier modificacioacuten de la estructura de datos tiene efecto inmediato sobre las acciones a realizar sobre ella

siendo esta una de la diferencias radicales respecto a la programacioacuten estructurada

Para quienes no estaacuten familiarizados con la programacioacuten estructurada direacute que una de las bases de esta escuela de programacioacuten parte del disentildeo arriba ndash abajo En esta forma de disentildeo se descomponen los requerimientos del programa paso a paso hasta llegar a un nivel que permite expresarlos mediante procedimientos y funciones La OOP estructura los datos en objetos que pueden almacenar manipular y combinar informacioacuten

En resumen la programacioacuten estructurada presta atencioacuten al conjunto de acciones que manipulan el flujo de datos (desde la situacioacuten inicial a la final) mientras que la programacioacuten orientada a objetos presta atencioacuten a la interrelacioacuten que existe entre los datos y las acciones a realizar con ellos

Muchos habraacuten oiacutedo comentarios sobre la incidencia de la OOP sobre la programacioacuten convencional Se ha llegado a decir que el cambio introducido por la OOP es similar al producido por la aparicioacuten del ensamblador sobre el coacutedigo de maacutequina

La OOP proporciona las siguientes ventajas sobre otros lenguajes de programacioacuten

Uniformidad Ya que la representacioacuten de los objetos lleva implica tanto el anaacutelisis como el disentildeo y la codificacioacuten de los mismos

Comprensioacuten Tanto los datos que componen los objetos como los procedimientos que los manipulan estaacuten agrupados en clases que se corresponden con las estructuras de informacioacuten que el programa trata

Flexibilidad Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar cualquier cambio que se realice sobre ellos quedaraacute reflejado automaacuteticamente en cualquier lugar donde estos datos aparezcan

Estabilidad Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo

Reusabilidad La nocioacuten de objeto permite que programas que traten las mismas estructuras de informacioacuten reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan De esta forma el desarrollo de un programa puede llegar a ser una simple combinacioacuten de objetos ya definidos donde estos estaacuten relacionados de una manera particular

Uno de los puntos clave a remarcar en esta introduccioacuten es que la programacioacuten orientada a objetos no sustituye a ninguna metodologiacutea ni lenguaje de programacioacuten anterior Todos los programas que se realizan seguacuten OOD se pueden realizar igualmente mediante programacioacuten estructurada Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas

basadas en un interface de usuario graacutefico como Windows OS2 x-Windows etc Es mucho maacutes sencillo

OBJETOS

Caracteriacutesticas de los Objetos

Identidad del Objeto

La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos son distintos entre siacute De esta forma incluso una serie de Objetos coches recieacuten fabricados son distintos los unos de los otros

La afirmacioacuten anterior aunque parece obvia tiene importancia cuando descendemos al nivel de programacioacuten En este aacutembito cada uno de los objetos tiene un controlador pro el cual se identifica Este puede ser una variable una estructura de datos una cadena de caracteres etc El controlador seraacute distinto para cada uno de los objeto aunque las referencias a eacutestos sean uniformes e independientes del contenido permitiendo crear agrupaciones de objetos con el mismo tratamiento

Clasificacioacuten

Con la clasificacioacuten comienza la verdadera programacioacuten orientada a objetos Ellos nos obliga a una abstraccioacuten del concepto de objeto denominada clase

Las clases permiten la agrupacioacuten de objetos que comparten las mismas propiedades y comportamiento Si bien clase y objeto suelen usarse como sinoacutenimos no lo son

El esfuerzo del programador ante una aplicacioacuten orientada a objetos se centra en la identificacioacuten de las clases sus atributos y operaciones asociadas

Las propiedades de cada clase deben cumplir una serie de premisas

Las propiedades deber ser significativas dentro del entorno de la aplicacioacuten es decir deben servir para identificar claramente y de una manera uacutenica (y univoca) a cada uno de los objetos

El nuacutemero de propiedades de un objeto debe ser el miacutenimo para realizar todas las operaciones que requiera la aplicacioacuten

Definamos una clase rectaacutengulo Esta clase puede tener como atributos un punto (xy) la anchura (a) y la longitud (l) Las operaciones a realizar son mover agrandar reducir et iquestEs posible realizarlas con las propiedades de la clase

Un anaacutelisis posterior nos indica que es posible la realizacioacuten de estas operaciones con los atributos definidos Pero si incluimos la operacioacuten girar vemos que con las propiedades definidas para la clase esta operacioacuten no se puede realizar Para incluir esta nueva operacioacuten debemos redefinir las propiedades del objeto en este caso las coordenadas de los veacutertices

Encapsulacioacuten y ocultacioacuten de datos

La capacidad de presentacioacuten de informacioacuten dentro de un objeto se divide en dos partes bien diferenciadas

Interna La informacioacuten que necesita el objeto para operar y que es innecesaria para los demaacutes objetos de la aplicacioacuten Estos atributos se denominada privados y tienen como marco de aplicacioacuten uacutenicamente a las operaciones asociadas al objeto

Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos Estas propiedades se denominan puacuteblicas y corresponde a la informacioacuten que necesitan conocer los restantes objetos de la aplicacioacuten respecto del objeto definido para poder operar

Podemos imaginarla encapsulacioacuten como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida Si introducimos datos por la entrada automaacuteticamente obtendraacute un resultado en la salida No necesita conocer ninguacuten detalle del funcionamiento interno de la caja

El teacutermino encapsulacioacuten indica l capacidad que tienen los objetos de construir una caacutepsula a su alrededor ocultando la informacioacuten que contienen (aqueacutella que es necesaria para su funcionamiento interno pero innecesaria para los demaacutes objetos) a las otras clases que componen la aplicacioacuten

Aunque a primera vista la encapsulacioacuten puede parecer superflua tengamos en cuenta que existen muchas variables utilizadas de forma temporal contadores y variables que contienen resultados intermedios etc D no ser por la encapsulacioacuten estas variables ocupariacutean memoria y podriacutean interferir en el funcionamiento del resto de los objetos

La encapsulacioacuten no es exclusiva de los lenguajes de programacioacuten orientados a objetos Aparece en los lenguajes basados en procedimientos (PASCAL C COBOL ETC) como una forma de proteger los datos que se manipulan dentro de las funciones

Los lenguajes OOP incorporan la posibilidad de encapsular tambieacuten las estructuras de datos que sirven como base a las funciones Aportan por tanto un nivel superior en cuanto a proteccioacuten de informacioacuten

La encapsulacioacuten nos permite el uso de libreriacuteas de objetos para el desarrollo de nuestros programas Recordemos que las libreriacuteas son definiciones de objetos de propoacutesito general que se incorporan a los programas Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde estaacute definido ya que contiene y define todo lo que necesita para poder funcionar es faacutecil utilizarlo en los mas variados tipos de aplicaciones Si aseguramos depurando las propiedades y las operaciones dentro de la clase que el objeto funcioacuten bien dentro de una aplicacioacuten con una correcta encapsulacioacuten el objeto podraacute funcionar en cualquier otra

Otra de las ventajas de la encapsulacioacuten es que al definir el objeto como una caja negra con entradas y salida asociadas en cualquier momento podemos cambiar el contenido de las operaciones del objeto de manera que no afecte al funcionamiento general del programa

La encapsulacioacuten estaacute en el nuacutecleo de dos grandes pilares de la construccioacuten de sistemas mantenibilidad y reusabilidad

Mantenibilidad

Cualidad que indica que un programa o sistema debe ser faacutecilmente modificable Es decir que los cambios en las condiciones externas (como la definicioacuten de una nueva variable) implicaraacuten modificaciones pequentildeas en el programa sistema El concepto de mantenibilidad implica que un programa al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante

Reusabilidad

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccioacuten de otros programas Ello implica que los objetos definidos en un programa pueden ser extraiacutedos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el coacutedigo del objeto El objeto final es que el programador construya una libreriacutea de objetos que le permita realizar programas basaacutendose en la teacutecnica de cortar y pegar Esta extrae (corta) coacutedigo de otras aplicaciones ya realizadas y las implementa (pega) en la aplicacioacuten a realizar donde tras algunos retoques la nueva aplicacioacuten estaraacute lista para funcionar Como podraacute observar el concepto de reusabilidad permite reducir el tiempo de realizacioacuten ganando en claridad mantenibilidad y productividad

La encapsulacioacuten de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad con el uacutenico coste adicional de definir con precisioacuten las entradas y salida de nuestras operaciones

Poliformismo

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 8: 2983238 programacion-orientada-a-objetos

Organizacioacuten de los objetos

En principio los objetos forman siempre una organizacioacuten jeraacuterquica en el sentido de que ciertos objetos son superiores a otros de cierto modo

Existen varios tipos tipos de jerarquiacuteas seraacuten simples cuando su estructura pueda ser representada por medio de un arbol En otros casos puede ser maacutes compleja

En cualquier caso sea la estructura simple o compleja podraacuten distinguirse en ella tres niveles de objetos

-La raiacutez de la jerarquiacutea Se trata de un objeto uacutenico y especial Este se caracteriacuteza por estar en el nivel maacutes alto de la estructura y suele recibir un nombre muy geneacuterico que indica su categoriacutea especial como por ejemplo objeto madre Raiacutez o Entidad

-Los objetos intermedios Son aquellos que descienden directamente de la raiacutez y que a su vez tienen descendientes Representan conjuntos o clases de objetos que pueden ser muy generales o muy especializados seguacuten la aplicacioacuten Normalmente reciben nombres geneacutericos que denotan al conjunto de objetos que representan por ejemplo VENTANA CUENTA FICHERO En un conjunto reciben el nombre de clases o tipos si descienden de otra clase o subclase

-Los objetos terminales Son todos aquellos que descienden de una clase o subclase y no tienen descendientes Suelen llamarse casos particulares instancias o iacutetems porque representan los elementos del conjunto representado por la clase o subclase a la que pertenecen

Veamos ahora en detalle los tres elementos mencionados en Estructura de un Objeto

1 RELACIONES

Las relaciones entre objetos son precisamente los enlaces que permiten a un objeto relacionarse con aquellos que forman parte de la misma organizacioacuten

Las hay de dos tipos fundamentales

-Relaciones jeraacuterquicas Son esenciales para la existencia misma de la aplicacioacuten porque la construyen Son bidireccionales es decir un objeto es padre de otro cuando el primer objeto se encuentra situado inmediatamente encima del segundo en la organizacioacuten en la que ambos forman parte asimismo si un objeto es padre de otro el segundo es hijo del primero (en la fig 2 B es padre de DE y F es decir DE y F son hijos de B en la fig 3 los objetos B y C son padres de F que a su vez es hijo de ambos)

Una organizacioacuten jeraacuterquica simple puede definirse como aquella en la que un objeto puede tener un solo padre mientras que en una organizacion jeraacuterquica compleja un hijo puede tener varios padres)

-Relaciones semaacutenticas Se refieren a las relaciones que no tienen nada que ver con la organizacioacuten de la que forman parte los objetos que las establecen Sus

propiedades y consecuencia solo dependen de los objetos en siacute mismos (de su significado) y no de su posicioacuten en la organizacioacuten

Se puede ver mejor con un ejemplo supongamos que vamos a construir un diccionario informatizado que permita al usuario obtener la definicioacuten de una palabra cualquiera Supongamos que en dicho diccionario las palabras son objetos y que la organizacioacuten jeraacuterquica es la que proviene de forma natural de la estructura de nuestros conocimientos sobre el mundo

La raiacutez del diccionario podriacutea llamarse TEMAS De eacuteste teacutermino geneacuterico descenderaacuten tres grandes ramas de objetos llamadas VIDA MUNDO y HOMBRE El primero (vida) comprenderaacute las ciencias bioloacutegicas Biologiacutea y Medicina El segundo (mundo) las ciencias de la naturaleza inerte las Matemaacuteticas la Fiacutesica la Quiacutemica y la Geologiacutea El tercero (hombre) comprenderaacute las ciencias humanas la Geografiacutea la Historia etc

Veamos un ejemplo estableceremos la relacioacuten trabajo entre los objetos NEWTON y OPTICA y la interpretaremos diciendo que significa que Newton trabajoacute en oacuteptica (veacutease la fig 4) La relacioacuten es evidentemente semaacutentica pueacutes no establece ninguna connotacioacuten jeraacuterquica entre NEWTON y OPTICA y su interpretacioacuten depende exclusivamente del significado de ambos objetos

La existencia de esta relacioacuten nos permitiraacute responder a preguntas como

iquestQuieacuten trabajoacute en oacuteptica

iquestEn queacute trabajoacute Newton

iquestQuien trabajoacute en Fiacutesica

Las dos primeras se deducen inmediatamente de la existencia de la relacioacuten trabajo Para la tercera observamos que si Newton trabajoacute en oacuteptica automaacuteticamente sabemos que trabajoacute en Fiacutesica por ser oacuteptica una rama de la Fiacutesica (en nuestro diccionario el objeto OPTICA es hijo del objeto FISICA) Entonces gracias a la OOP podemos responder a la tercera pregunta sin necesidad de establecer una relacioacuten entre NEWTON y FISICA apoyandonos soacutelo en la relacioacuten definida entre NEWTON y OPTICA y en que OPTICA es hijo de FISICA De este modo se elimina toda redundancia innecesaria y la cantidad de informacioacuten que tendremos que definir para todo el diccionario seraacute miacutenima

2 PROPIEDADES

Todo objeto puede tener cierto nuacutemero de propiedades cada una de las cuales tendraacute a su vez uno o varios valores En OOP las propiedades corresponden a las claacutesicas variables de la programacioacuten estructurada Son por lo tanto datos encapsulados dentro del objeto junto con los meacutetodos (programas) y las relaciones (punteros a otros objetos) Las propiedades de un objeto pueden tener un valor uacutenico o pueden contener un conjunto de valores mas o menos estructurados (matrices vectores listas etc) Ademaacutes los valores pueden ser de cualquier tipo (numeacuterico alfabeacutetico etc) si el sistema de programacioacuten lo permite

Pero existe una diferencia con las variables y es que las propiedades se pueden heredar de unos objetos a otros En consecuencia un objeto puede tener una propiedad de maneras diferentes

-Propiedades propias Estaacuten formadas dentro de la caacutepsula del objeto

-Propiedades heredadas Estan definidas en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estas propiedades se llaman propiedades miembro porque el objeto las posee por el mero hecho de ser miembro de una clase

3 METODOS

Una operacioacuten que realiza acceso a los datos Podemos definir meacutetodo como un programa procedimental o procedural escrito en cualquier lenguaje que estaacute asociado a un objeto determinado y cuya ejecucioacuten soacutelo puede desencadenarse a traveacutes de un mensaje recibido por eacuteste o por sus descendientes

Son sinoacutenimos de meacutetodo todos aquellos teacuterminos que se han aplicado tradicionalmente a los programas como procedimiento funcioacuten rutina etc Sin embargo es conveniente utilizar el teacutermino meacutetodo para que se distingan claramente las propiedades especiales que adquiere un programa en el entorno OOP que afectan fundamentalmente a la forma de invocarlo (uacutenicamente a traveacutes de un mensaje) y a su campo de accioacuten limitado a un objeto y a sus descendientes aunque posiblemente no a todos

Si los meacutetodos son programas se deduce que podriacutean tener argumentos o paraacutemetros Puesto que los meacutetodos pueden heredarse de unos objetos a otros un objeto puede disponer de un meacutetodo de dos maneras diferentes

-Meacutetodos propios Estaacuten incluiacutedos dentro de la caacutepsula del objeto

-Meacutetodos heredados Estan definidos en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estos meacutetodos se llaman meacutetodos miembro porque el objeto los posee por el mero hecho de ser miembro de una clase

Polimorfiacutesmo

Una de las caracteriacutesticas fundamentales de la OOP es el polimorfiacutesmo que no es otra cosa que la posibilidad de construir varios meacutetodos con el mismo nombre pero con relacioacuten a la clase a la que pertenece cada uno con comportamientos diferentes Esto conlleva la habilidad de enviar un mismo mensaje a objetos de clases diferentes Estos objetos recibiriacutean el mismo mensaje global pero responderiacutean a eacutel de formas diferentes por ejemplo un mensaje + a un objeto ENTERO significariacutea suma mientras que para un objeto STRING significariacutea concatenacioacuten (pegar strings uno seguido al otro)

Demonios

Es un tipo especial de meacutetodos relativamente poco frecuente en los sistemas de OOP que se activa automaacuteticamente cuando sucede algo especial Es decir es un programa como los meacutetodos ordinarios pero se diferencia de estos porque su ejecucioacuten no se activa con un mensaje sino que se desencadena autmaacuteticamente

cuando ocurre un suceso determinado la asignacioacuten de un valor a una propiedad de un objeto la lectura de un valor determinado etc

Los demonios cuando existen se diferencian de otros meacutetodos por que no son heredables y porque a veces estaacuten ligados a una de las propiedades de un objeto mas que al objeto entero

CONSIDERACIONES FINALES

Beneficios que se obtienen del desarrollo con OOP

Diacutea a diacutea los costos del Hardware decrecen Asiacute surgen nuevas aacutereas de aplicacioacuten cotidianamente procesamiento de imaacutegenes y sonido bases de datos multimediales automatizacioacuten de oficinas ambientes de ingenieriacutea de software etc Auacuten en las aplicaciones tradicionales encontramos que definir interfases hombre-maacutequina a-la-Windows suele ser bastante conveniente

Lamentablemente los costos de produccioacuten de software siguen aumentando el mantenimiento y la modificacioacuten de sistemas complejos suele ser una tarea trabajosa cada aplicacioacuten (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo etc

Todos estos problemas auacuten no han sido solucionados en forma completa Pero como los objetos son portables (teoacutericamente) mientras que la herencia permite la reusabilidad del coacutedigo orientado a objetos es maacutes sencillo modificar coacutedigo existente porque los objetos no interaccionan excepto a traveacutes de mensajes en consecuencia un cambio en la codificacioacuten de un objeto no afectaraacute la operacioacuten con otro objeto siempre que los meacutetodos respectivos permanezcan intactos La introduccioacuten de tecnologiacutea de objetos como una herramienta concepual para analizar disentildear e implementar aplicaciones permite obtener aplicaciones maacutes modificables faacutecilmente extendibles y a partir de componentes reusables Esta reusabilidad del coacutedigo disminuye el tiempo que se utiliza en el desarrollo y hace que el desarrollo del software sea mas intuitivo porque la gente piensa naturalmente en teacuterminos de objetos maacutes que en teacuterminos de algoritmos de software

Problemas derivados de la utilizacioacuten de OOP en la actualidad

Un sistema orientado a objetos por lo visto puede parecer un paraiacuteso virtual El problema sin embargo surge en la implementacioacuten de tal sistema Muchas compantildeiacuteas oyen acerca de los beneficios de un sistema orientado a objetos e invierten gran cantidad de recursos luego comienzan a darse cuenta que han impuesto una nueva cultura que es ajena a los programadores actuales Especiacuteficamente los siguientes temas suelen aparecer repetidamente

Curvas de aprendizaje largas Un sistema orientado a objetos ve al mundo en una forma uacutenica Involucra la conceptualizacioacuten de todos los elementos de un programa desde subsistemas a los datos en la forma de objetos Toda la comunicacioacuten entre los objetos debe realizarse en la forma de mensajes Esta no es la forma en que estaacuten escritos los programas orientados a objetos actualmente al hacer la transicioacuten a un sistema orientado a objetos la mayoriacutea de los programadores deben capacitarse nuevamente antes de poder usarlo

Dependencia del lenguaje A pesar de la portabilidad conceptual de los objetos en un sistema orientado a objetos en la praacutectica existen muchas dependencias Muchos lenguajes orientados a objetos estaacuten compitiendo actualmente para dominar el mercado Cambiar el lenguaje de implementacioacuten de un sistema orientado a objetos no es una tarea sencilla por ejemplo C++ soporta el concepto de herencia multiple mientras que SmallTalk no lo soporta en consecuencia la eleccioacuten de un lenguaje tiene ramificaciones de disentildeo muy importamtes

Determinacion de las clases Una clase es un molde que se utiliza para crear nuevos objetos En consecuencia es importante crear el conjunto de clases adecuado para un proyecto Desafortunadamente la definicioacuten de las clases es maacutes un arte que una ciencia Si bien hay muchas jerarquiacuteas de clase predefinidas usualmente se deben crear clases especiacuteficas para la aplicacioacuten que se este desarrollando Luego en 6 meses oacute 1 antildeo se da cuenta que las clases que se establecieron no son posibles en ese caso seraacute necesario reestructurar la jerarquiacutea de clases devastando totalmente la planificacioacuten original

Performance En un sistema donde todo es un objeto y toda interaccion es a traveacutes de mensajes el traacutefico de mensajes afecta la performance A medida que la tecnologiacutea avanza y la velocidad de microprocesamiento potencia y tamantildeo de la memoria aumentan la situacion mejoraraacute pero en la situacioacuten actual un disentildeo de una aplicacioacuten orientada a objetos que no tiene en cuenta la performance no seraacute viable comercialmente

Idealmente habriacutea una forma de atacar estos problemas eficientemente al mismo tiempo que se obtienen los beneficios del desarrollo de una estrategia orientada a objetos Deberia existir una metodologiacutea faacutecil de aprender e independiente del lenguaje y facil de reestructurar que no drene la performance del sistema

Monografiacuteascom

Programacioacuten orientada a Objetos(OOP Object Oriented Programming)

1 Introduccioacuten 2 Objetos 3 Disentildeo de aplicaciones y eleccioacuten de entorno 4 Aplicaciones orientadas a objetos 5 Caracteriacutesticas de los lenguajes OOP 6 Panoraacutemica de los lenguajes OOP 7 Bases de datos orientadas a objetos 8 Objetos y asociaciones

9 La relacioacuten de herencia 10 Bibliografiacutea infografiacutea

Introduccioacuten

l teacutermino de Programacioacuten Orientada a Objetos indica maacutes una forma de disentildeo y una metodologiacutea de desarrollo de software que un lenguaje de programacioacuten ya que en realidad se puede aplicar el Disentildeo Orientado a Objetos (En ingleacutes abreviado OOD Object Oriented Design) a cualquier tipo de lenguaje de programacioacuten

El desarrollo de la OOP empieza a destacar durante la deacutecada de lo 80 tomando en cuenta la programacioacuten estructurada a la que engloba y dotando al programador de nuevos elementos para el anaacutelisis y desarrollo de software

El propoacutesito de este trabajo es explicar el disentildeo orientado a objeto y no una explicacioacuten de su programacioacuten puesto que no nos alcanzariacutea toda la curriacutecula para hacerlo

Baacutesicamente la OOP permite a los programadores escribir software de forma que esteacute organizado en la misma manera que el problema que trata de modelizar Los lenguajes de programacioacuten convencionales son poco maacutes que una lista de acciones a realizar sobre un conjunto de datos en una determinada secuencia Si en alguacuten punto del programa modificamos la estructura de los datos o la accioacuten realizada sobre ellos el programa cambia

La OOP aporta un enfoque nuevo convirtiendo la estructura de datos en el centro sobre el que pivotan las operaciones De esta forma cualquier modificacioacuten de la estructura de datos tiene efecto inmediato sobre las acciones a realizar sobre ella

siendo esta una de la diferencias radicales respecto a la programacioacuten estructurada

Para quienes no estaacuten familiarizados con la programacioacuten estructurada direacute que una de las bases de esta escuela de programacioacuten parte del disentildeo arriba ndash abajo En esta forma de disentildeo se descomponen los requerimientos del programa paso a paso hasta llegar a un nivel que permite expresarlos mediante procedimientos y funciones La OOP estructura los datos en objetos que pueden almacenar manipular y combinar informacioacuten

En resumen la programacioacuten estructurada presta atencioacuten al conjunto de acciones que manipulan el flujo de datos (desde la situacioacuten inicial a la final) mientras que la programacioacuten orientada a objetos presta atencioacuten a la interrelacioacuten que existe entre los datos y las acciones a realizar con ellos

Muchos habraacuten oiacutedo comentarios sobre la incidencia de la OOP sobre la programacioacuten convencional Se ha llegado a decir que el cambio introducido por la OOP es similar al producido por la aparicioacuten del ensamblador sobre el coacutedigo de maacutequina

La OOP proporciona las siguientes ventajas sobre otros lenguajes de programacioacuten

Uniformidad Ya que la representacioacuten de los objetos lleva implica tanto el anaacutelisis como el disentildeo y la codificacioacuten de los mismos

Comprensioacuten Tanto los datos que componen los objetos como los procedimientos que los manipulan estaacuten agrupados en clases que se corresponden con las estructuras de informacioacuten que el programa trata

Flexibilidad Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar cualquier cambio que se realice sobre ellos quedaraacute reflejado automaacuteticamente en cualquier lugar donde estos datos aparezcan

Estabilidad Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo

Reusabilidad La nocioacuten de objeto permite que programas que traten las mismas estructuras de informacioacuten reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan De esta forma el desarrollo de un programa puede llegar a ser una simple combinacioacuten de objetos ya definidos donde estos estaacuten relacionados de una manera particular

Uno de los puntos clave a remarcar en esta introduccioacuten es que la programacioacuten orientada a objetos no sustituye a ninguna metodologiacutea ni lenguaje de programacioacuten anterior Todos los programas que se realizan seguacuten OOD se pueden realizar igualmente mediante programacioacuten estructurada Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas

basadas en un interface de usuario graacutefico como Windows OS2 x-Windows etc Es mucho maacutes sencillo

OBJETOS

Caracteriacutesticas de los Objetos

Identidad del Objeto

La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos son distintos entre siacute De esta forma incluso una serie de Objetos coches recieacuten fabricados son distintos los unos de los otros

La afirmacioacuten anterior aunque parece obvia tiene importancia cuando descendemos al nivel de programacioacuten En este aacutembito cada uno de los objetos tiene un controlador pro el cual se identifica Este puede ser una variable una estructura de datos una cadena de caracteres etc El controlador seraacute distinto para cada uno de los objeto aunque las referencias a eacutestos sean uniformes e independientes del contenido permitiendo crear agrupaciones de objetos con el mismo tratamiento

Clasificacioacuten

Con la clasificacioacuten comienza la verdadera programacioacuten orientada a objetos Ellos nos obliga a una abstraccioacuten del concepto de objeto denominada clase

Las clases permiten la agrupacioacuten de objetos que comparten las mismas propiedades y comportamiento Si bien clase y objeto suelen usarse como sinoacutenimos no lo son

El esfuerzo del programador ante una aplicacioacuten orientada a objetos se centra en la identificacioacuten de las clases sus atributos y operaciones asociadas

Las propiedades de cada clase deben cumplir una serie de premisas

Las propiedades deber ser significativas dentro del entorno de la aplicacioacuten es decir deben servir para identificar claramente y de una manera uacutenica (y univoca) a cada uno de los objetos

El nuacutemero de propiedades de un objeto debe ser el miacutenimo para realizar todas las operaciones que requiera la aplicacioacuten

Definamos una clase rectaacutengulo Esta clase puede tener como atributos un punto (xy) la anchura (a) y la longitud (l) Las operaciones a realizar son mover agrandar reducir et iquestEs posible realizarlas con las propiedades de la clase

Un anaacutelisis posterior nos indica que es posible la realizacioacuten de estas operaciones con los atributos definidos Pero si incluimos la operacioacuten girar vemos que con las propiedades definidas para la clase esta operacioacuten no se puede realizar Para incluir esta nueva operacioacuten debemos redefinir las propiedades del objeto en este caso las coordenadas de los veacutertices

Encapsulacioacuten y ocultacioacuten de datos

La capacidad de presentacioacuten de informacioacuten dentro de un objeto se divide en dos partes bien diferenciadas

Interna La informacioacuten que necesita el objeto para operar y que es innecesaria para los demaacutes objetos de la aplicacioacuten Estos atributos se denominada privados y tienen como marco de aplicacioacuten uacutenicamente a las operaciones asociadas al objeto

Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos Estas propiedades se denominan puacuteblicas y corresponde a la informacioacuten que necesitan conocer los restantes objetos de la aplicacioacuten respecto del objeto definido para poder operar

Podemos imaginarla encapsulacioacuten como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida Si introducimos datos por la entrada automaacuteticamente obtendraacute un resultado en la salida No necesita conocer ninguacuten detalle del funcionamiento interno de la caja

El teacutermino encapsulacioacuten indica l capacidad que tienen los objetos de construir una caacutepsula a su alrededor ocultando la informacioacuten que contienen (aqueacutella que es necesaria para su funcionamiento interno pero innecesaria para los demaacutes objetos) a las otras clases que componen la aplicacioacuten

Aunque a primera vista la encapsulacioacuten puede parecer superflua tengamos en cuenta que existen muchas variables utilizadas de forma temporal contadores y variables que contienen resultados intermedios etc D no ser por la encapsulacioacuten estas variables ocupariacutean memoria y podriacutean interferir en el funcionamiento del resto de los objetos

La encapsulacioacuten no es exclusiva de los lenguajes de programacioacuten orientados a objetos Aparece en los lenguajes basados en procedimientos (PASCAL C COBOL ETC) como una forma de proteger los datos que se manipulan dentro de las funciones

Los lenguajes OOP incorporan la posibilidad de encapsular tambieacuten las estructuras de datos que sirven como base a las funciones Aportan por tanto un nivel superior en cuanto a proteccioacuten de informacioacuten

La encapsulacioacuten nos permite el uso de libreriacuteas de objetos para el desarrollo de nuestros programas Recordemos que las libreriacuteas son definiciones de objetos de propoacutesito general que se incorporan a los programas Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde estaacute definido ya que contiene y define todo lo que necesita para poder funcionar es faacutecil utilizarlo en los mas variados tipos de aplicaciones Si aseguramos depurando las propiedades y las operaciones dentro de la clase que el objeto funcioacuten bien dentro de una aplicacioacuten con una correcta encapsulacioacuten el objeto podraacute funcionar en cualquier otra

Otra de las ventajas de la encapsulacioacuten es que al definir el objeto como una caja negra con entradas y salida asociadas en cualquier momento podemos cambiar el contenido de las operaciones del objeto de manera que no afecte al funcionamiento general del programa

La encapsulacioacuten estaacute en el nuacutecleo de dos grandes pilares de la construccioacuten de sistemas mantenibilidad y reusabilidad

Mantenibilidad

Cualidad que indica que un programa o sistema debe ser faacutecilmente modificable Es decir que los cambios en las condiciones externas (como la definicioacuten de una nueva variable) implicaraacuten modificaciones pequentildeas en el programa sistema El concepto de mantenibilidad implica que un programa al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante

Reusabilidad

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccioacuten de otros programas Ello implica que los objetos definidos en un programa pueden ser extraiacutedos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el coacutedigo del objeto El objeto final es que el programador construya una libreriacutea de objetos que le permita realizar programas basaacutendose en la teacutecnica de cortar y pegar Esta extrae (corta) coacutedigo de otras aplicaciones ya realizadas y las implementa (pega) en la aplicacioacuten a realizar donde tras algunos retoques la nueva aplicacioacuten estaraacute lista para funcionar Como podraacute observar el concepto de reusabilidad permite reducir el tiempo de realizacioacuten ganando en claridad mantenibilidad y productividad

La encapsulacioacuten de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad con el uacutenico coste adicional de definir con precisioacuten las entradas y salida de nuestras operaciones

Poliformismo

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 9: 2983238 programacion-orientada-a-objetos

propiedades y consecuencia solo dependen de los objetos en siacute mismos (de su significado) y no de su posicioacuten en la organizacioacuten

Se puede ver mejor con un ejemplo supongamos que vamos a construir un diccionario informatizado que permita al usuario obtener la definicioacuten de una palabra cualquiera Supongamos que en dicho diccionario las palabras son objetos y que la organizacioacuten jeraacuterquica es la que proviene de forma natural de la estructura de nuestros conocimientos sobre el mundo

La raiacutez del diccionario podriacutea llamarse TEMAS De eacuteste teacutermino geneacuterico descenderaacuten tres grandes ramas de objetos llamadas VIDA MUNDO y HOMBRE El primero (vida) comprenderaacute las ciencias bioloacutegicas Biologiacutea y Medicina El segundo (mundo) las ciencias de la naturaleza inerte las Matemaacuteticas la Fiacutesica la Quiacutemica y la Geologiacutea El tercero (hombre) comprenderaacute las ciencias humanas la Geografiacutea la Historia etc

Veamos un ejemplo estableceremos la relacioacuten trabajo entre los objetos NEWTON y OPTICA y la interpretaremos diciendo que significa que Newton trabajoacute en oacuteptica (veacutease la fig 4) La relacioacuten es evidentemente semaacutentica pueacutes no establece ninguna connotacioacuten jeraacuterquica entre NEWTON y OPTICA y su interpretacioacuten depende exclusivamente del significado de ambos objetos

La existencia de esta relacioacuten nos permitiraacute responder a preguntas como

iquestQuieacuten trabajoacute en oacuteptica

iquestEn queacute trabajoacute Newton

iquestQuien trabajoacute en Fiacutesica

Las dos primeras se deducen inmediatamente de la existencia de la relacioacuten trabajo Para la tercera observamos que si Newton trabajoacute en oacuteptica automaacuteticamente sabemos que trabajoacute en Fiacutesica por ser oacuteptica una rama de la Fiacutesica (en nuestro diccionario el objeto OPTICA es hijo del objeto FISICA) Entonces gracias a la OOP podemos responder a la tercera pregunta sin necesidad de establecer una relacioacuten entre NEWTON y FISICA apoyandonos soacutelo en la relacioacuten definida entre NEWTON y OPTICA y en que OPTICA es hijo de FISICA De este modo se elimina toda redundancia innecesaria y la cantidad de informacioacuten que tendremos que definir para todo el diccionario seraacute miacutenima

2 PROPIEDADES

Todo objeto puede tener cierto nuacutemero de propiedades cada una de las cuales tendraacute a su vez uno o varios valores En OOP las propiedades corresponden a las claacutesicas variables de la programacioacuten estructurada Son por lo tanto datos encapsulados dentro del objeto junto con los meacutetodos (programas) y las relaciones (punteros a otros objetos) Las propiedades de un objeto pueden tener un valor uacutenico o pueden contener un conjunto de valores mas o menos estructurados (matrices vectores listas etc) Ademaacutes los valores pueden ser de cualquier tipo (numeacuterico alfabeacutetico etc) si el sistema de programacioacuten lo permite

Pero existe una diferencia con las variables y es que las propiedades se pueden heredar de unos objetos a otros En consecuencia un objeto puede tener una propiedad de maneras diferentes

-Propiedades propias Estaacuten formadas dentro de la caacutepsula del objeto

-Propiedades heredadas Estan definidas en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estas propiedades se llaman propiedades miembro porque el objeto las posee por el mero hecho de ser miembro de una clase

3 METODOS

Una operacioacuten que realiza acceso a los datos Podemos definir meacutetodo como un programa procedimental o procedural escrito en cualquier lenguaje que estaacute asociado a un objeto determinado y cuya ejecucioacuten soacutelo puede desencadenarse a traveacutes de un mensaje recibido por eacuteste o por sus descendientes

Son sinoacutenimos de meacutetodo todos aquellos teacuterminos que se han aplicado tradicionalmente a los programas como procedimiento funcioacuten rutina etc Sin embargo es conveniente utilizar el teacutermino meacutetodo para que se distingan claramente las propiedades especiales que adquiere un programa en el entorno OOP que afectan fundamentalmente a la forma de invocarlo (uacutenicamente a traveacutes de un mensaje) y a su campo de accioacuten limitado a un objeto y a sus descendientes aunque posiblemente no a todos

Si los meacutetodos son programas se deduce que podriacutean tener argumentos o paraacutemetros Puesto que los meacutetodos pueden heredarse de unos objetos a otros un objeto puede disponer de un meacutetodo de dos maneras diferentes

-Meacutetodos propios Estaacuten incluiacutedos dentro de la caacutepsula del objeto

-Meacutetodos heredados Estan definidos en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estos meacutetodos se llaman meacutetodos miembro porque el objeto los posee por el mero hecho de ser miembro de una clase

Polimorfiacutesmo

Una de las caracteriacutesticas fundamentales de la OOP es el polimorfiacutesmo que no es otra cosa que la posibilidad de construir varios meacutetodos con el mismo nombre pero con relacioacuten a la clase a la que pertenece cada uno con comportamientos diferentes Esto conlleva la habilidad de enviar un mismo mensaje a objetos de clases diferentes Estos objetos recibiriacutean el mismo mensaje global pero responderiacutean a eacutel de formas diferentes por ejemplo un mensaje + a un objeto ENTERO significariacutea suma mientras que para un objeto STRING significariacutea concatenacioacuten (pegar strings uno seguido al otro)

Demonios

Es un tipo especial de meacutetodos relativamente poco frecuente en los sistemas de OOP que se activa automaacuteticamente cuando sucede algo especial Es decir es un programa como los meacutetodos ordinarios pero se diferencia de estos porque su ejecucioacuten no se activa con un mensaje sino que se desencadena autmaacuteticamente

cuando ocurre un suceso determinado la asignacioacuten de un valor a una propiedad de un objeto la lectura de un valor determinado etc

Los demonios cuando existen se diferencian de otros meacutetodos por que no son heredables y porque a veces estaacuten ligados a una de las propiedades de un objeto mas que al objeto entero

CONSIDERACIONES FINALES

Beneficios que se obtienen del desarrollo con OOP

Diacutea a diacutea los costos del Hardware decrecen Asiacute surgen nuevas aacutereas de aplicacioacuten cotidianamente procesamiento de imaacutegenes y sonido bases de datos multimediales automatizacioacuten de oficinas ambientes de ingenieriacutea de software etc Auacuten en las aplicaciones tradicionales encontramos que definir interfases hombre-maacutequina a-la-Windows suele ser bastante conveniente

Lamentablemente los costos de produccioacuten de software siguen aumentando el mantenimiento y la modificacioacuten de sistemas complejos suele ser una tarea trabajosa cada aplicacioacuten (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo etc

Todos estos problemas auacuten no han sido solucionados en forma completa Pero como los objetos son portables (teoacutericamente) mientras que la herencia permite la reusabilidad del coacutedigo orientado a objetos es maacutes sencillo modificar coacutedigo existente porque los objetos no interaccionan excepto a traveacutes de mensajes en consecuencia un cambio en la codificacioacuten de un objeto no afectaraacute la operacioacuten con otro objeto siempre que los meacutetodos respectivos permanezcan intactos La introduccioacuten de tecnologiacutea de objetos como una herramienta concepual para analizar disentildear e implementar aplicaciones permite obtener aplicaciones maacutes modificables faacutecilmente extendibles y a partir de componentes reusables Esta reusabilidad del coacutedigo disminuye el tiempo que se utiliza en el desarrollo y hace que el desarrollo del software sea mas intuitivo porque la gente piensa naturalmente en teacuterminos de objetos maacutes que en teacuterminos de algoritmos de software

Problemas derivados de la utilizacioacuten de OOP en la actualidad

Un sistema orientado a objetos por lo visto puede parecer un paraiacuteso virtual El problema sin embargo surge en la implementacioacuten de tal sistema Muchas compantildeiacuteas oyen acerca de los beneficios de un sistema orientado a objetos e invierten gran cantidad de recursos luego comienzan a darse cuenta que han impuesto una nueva cultura que es ajena a los programadores actuales Especiacuteficamente los siguientes temas suelen aparecer repetidamente

Curvas de aprendizaje largas Un sistema orientado a objetos ve al mundo en una forma uacutenica Involucra la conceptualizacioacuten de todos los elementos de un programa desde subsistemas a los datos en la forma de objetos Toda la comunicacioacuten entre los objetos debe realizarse en la forma de mensajes Esta no es la forma en que estaacuten escritos los programas orientados a objetos actualmente al hacer la transicioacuten a un sistema orientado a objetos la mayoriacutea de los programadores deben capacitarse nuevamente antes de poder usarlo

Dependencia del lenguaje A pesar de la portabilidad conceptual de los objetos en un sistema orientado a objetos en la praacutectica existen muchas dependencias Muchos lenguajes orientados a objetos estaacuten compitiendo actualmente para dominar el mercado Cambiar el lenguaje de implementacioacuten de un sistema orientado a objetos no es una tarea sencilla por ejemplo C++ soporta el concepto de herencia multiple mientras que SmallTalk no lo soporta en consecuencia la eleccioacuten de un lenguaje tiene ramificaciones de disentildeo muy importamtes

Determinacion de las clases Una clase es un molde que se utiliza para crear nuevos objetos En consecuencia es importante crear el conjunto de clases adecuado para un proyecto Desafortunadamente la definicioacuten de las clases es maacutes un arte que una ciencia Si bien hay muchas jerarquiacuteas de clase predefinidas usualmente se deben crear clases especiacuteficas para la aplicacioacuten que se este desarrollando Luego en 6 meses oacute 1 antildeo se da cuenta que las clases que se establecieron no son posibles en ese caso seraacute necesario reestructurar la jerarquiacutea de clases devastando totalmente la planificacioacuten original

Performance En un sistema donde todo es un objeto y toda interaccion es a traveacutes de mensajes el traacutefico de mensajes afecta la performance A medida que la tecnologiacutea avanza y la velocidad de microprocesamiento potencia y tamantildeo de la memoria aumentan la situacion mejoraraacute pero en la situacioacuten actual un disentildeo de una aplicacioacuten orientada a objetos que no tiene en cuenta la performance no seraacute viable comercialmente

Idealmente habriacutea una forma de atacar estos problemas eficientemente al mismo tiempo que se obtienen los beneficios del desarrollo de una estrategia orientada a objetos Deberia existir una metodologiacutea faacutecil de aprender e independiente del lenguaje y facil de reestructurar que no drene la performance del sistema

Monografiacuteascom

Programacioacuten orientada a Objetos(OOP Object Oriented Programming)

1 Introduccioacuten 2 Objetos 3 Disentildeo de aplicaciones y eleccioacuten de entorno 4 Aplicaciones orientadas a objetos 5 Caracteriacutesticas de los lenguajes OOP 6 Panoraacutemica de los lenguajes OOP 7 Bases de datos orientadas a objetos 8 Objetos y asociaciones

9 La relacioacuten de herencia 10 Bibliografiacutea infografiacutea

Introduccioacuten

l teacutermino de Programacioacuten Orientada a Objetos indica maacutes una forma de disentildeo y una metodologiacutea de desarrollo de software que un lenguaje de programacioacuten ya que en realidad se puede aplicar el Disentildeo Orientado a Objetos (En ingleacutes abreviado OOD Object Oriented Design) a cualquier tipo de lenguaje de programacioacuten

El desarrollo de la OOP empieza a destacar durante la deacutecada de lo 80 tomando en cuenta la programacioacuten estructurada a la que engloba y dotando al programador de nuevos elementos para el anaacutelisis y desarrollo de software

El propoacutesito de este trabajo es explicar el disentildeo orientado a objeto y no una explicacioacuten de su programacioacuten puesto que no nos alcanzariacutea toda la curriacutecula para hacerlo

Baacutesicamente la OOP permite a los programadores escribir software de forma que esteacute organizado en la misma manera que el problema que trata de modelizar Los lenguajes de programacioacuten convencionales son poco maacutes que una lista de acciones a realizar sobre un conjunto de datos en una determinada secuencia Si en alguacuten punto del programa modificamos la estructura de los datos o la accioacuten realizada sobre ellos el programa cambia

La OOP aporta un enfoque nuevo convirtiendo la estructura de datos en el centro sobre el que pivotan las operaciones De esta forma cualquier modificacioacuten de la estructura de datos tiene efecto inmediato sobre las acciones a realizar sobre ella

siendo esta una de la diferencias radicales respecto a la programacioacuten estructurada

Para quienes no estaacuten familiarizados con la programacioacuten estructurada direacute que una de las bases de esta escuela de programacioacuten parte del disentildeo arriba ndash abajo En esta forma de disentildeo se descomponen los requerimientos del programa paso a paso hasta llegar a un nivel que permite expresarlos mediante procedimientos y funciones La OOP estructura los datos en objetos que pueden almacenar manipular y combinar informacioacuten

En resumen la programacioacuten estructurada presta atencioacuten al conjunto de acciones que manipulan el flujo de datos (desde la situacioacuten inicial a la final) mientras que la programacioacuten orientada a objetos presta atencioacuten a la interrelacioacuten que existe entre los datos y las acciones a realizar con ellos

Muchos habraacuten oiacutedo comentarios sobre la incidencia de la OOP sobre la programacioacuten convencional Se ha llegado a decir que el cambio introducido por la OOP es similar al producido por la aparicioacuten del ensamblador sobre el coacutedigo de maacutequina

La OOP proporciona las siguientes ventajas sobre otros lenguajes de programacioacuten

Uniformidad Ya que la representacioacuten de los objetos lleva implica tanto el anaacutelisis como el disentildeo y la codificacioacuten de los mismos

Comprensioacuten Tanto los datos que componen los objetos como los procedimientos que los manipulan estaacuten agrupados en clases que se corresponden con las estructuras de informacioacuten que el programa trata

Flexibilidad Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar cualquier cambio que se realice sobre ellos quedaraacute reflejado automaacuteticamente en cualquier lugar donde estos datos aparezcan

Estabilidad Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo

Reusabilidad La nocioacuten de objeto permite que programas que traten las mismas estructuras de informacioacuten reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan De esta forma el desarrollo de un programa puede llegar a ser una simple combinacioacuten de objetos ya definidos donde estos estaacuten relacionados de una manera particular

Uno de los puntos clave a remarcar en esta introduccioacuten es que la programacioacuten orientada a objetos no sustituye a ninguna metodologiacutea ni lenguaje de programacioacuten anterior Todos los programas que se realizan seguacuten OOD se pueden realizar igualmente mediante programacioacuten estructurada Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas

basadas en un interface de usuario graacutefico como Windows OS2 x-Windows etc Es mucho maacutes sencillo

OBJETOS

Caracteriacutesticas de los Objetos

Identidad del Objeto

La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos son distintos entre siacute De esta forma incluso una serie de Objetos coches recieacuten fabricados son distintos los unos de los otros

La afirmacioacuten anterior aunque parece obvia tiene importancia cuando descendemos al nivel de programacioacuten En este aacutembito cada uno de los objetos tiene un controlador pro el cual se identifica Este puede ser una variable una estructura de datos una cadena de caracteres etc El controlador seraacute distinto para cada uno de los objeto aunque las referencias a eacutestos sean uniformes e independientes del contenido permitiendo crear agrupaciones de objetos con el mismo tratamiento

Clasificacioacuten

Con la clasificacioacuten comienza la verdadera programacioacuten orientada a objetos Ellos nos obliga a una abstraccioacuten del concepto de objeto denominada clase

Las clases permiten la agrupacioacuten de objetos que comparten las mismas propiedades y comportamiento Si bien clase y objeto suelen usarse como sinoacutenimos no lo son

El esfuerzo del programador ante una aplicacioacuten orientada a objetos se centra en la identificacioacuten de las clases sus atributos y operaciones asociadas

Las propiedades de cada clase deben cumplir una serie de premisas

Las propiedades deber ser significativas dentro del entorno de la aplicacioacuten es decir deben servir para identificar claramente y de una manera uacutenica (y univoca) a cada uno de los objetos

El nuacutemero de propiedades de un objeto debe ser el miacutenimo para realizar todas las operaciones que requiera la aplicacioacuten

Definamos una clase rectaacutengulo Esta clase puede tener como atributos un punto (xy) la anchura (a) y la longitud (l) Las operaciones a realizar son mover agrandar reducir et iquestEs posible realizarlas con las propiedades de la clase

Un anaacutelisis posterior nos indica que es posible la realizacioacuten de estas operaciones con los atributos definidos Pero si incluimos la operacioacuten girar vemos que con las propiedades definidas para la clase esta operacioacuten no se puede realizar Para incluir esta nueva operacioacuten debemos redefinir las propiedades del objeto en este caso las coordenadas de los veacutertices

Encapsulacioacuten y ocultacioacuten de datos

La capacidad de presentacioacuten de informacioacuten dentro de un objeto se divide en dos partes bien diferenciadas

Interna La informacioacuten que necesita el objeto para operar y que es innecesaria para los demaacutes objetos de la aplicacioacuten Estos atributos se denominada privados y tienen como marco de aplicacioacuten uacutenicamente a las operaciones asociadas al objeto

Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos Estas propiedades se denominan puacuteblicas y corresponde a la informacioacuten que necesitan conocer los restantes objetos de la aplicacioacuten respecto del objeto definido para poder operar

Podemos imaginarla encapsulacioacuten como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida Si introducimos datos por la entrada automaacuteticamente obtendraacute un resultado en la salida No necesita conocer ninguacuten detalle del funcionamiento interno de la caja

El teacutermino encapsulacioacuten indica l capacidad que tienen los objetos de construir una caacutepsula a su alrededor ocultando la informacioacuten que contienen (aqueacutella que es necesaria para su funcionamiento interno pero innecesaria para los demaacutes objetos) a las otras clases que componen la aplicacioacuten

Aunque a primera vista la encapsulacioacuten puede parecer superflua tengamos en cuenta que existen muchas variables utilizadas de forma temporal contadores y variables que contienen resultados intermedios etc D no ser por la encapsulacioacuten estas variables ocupariacutean memoria y podriacutean interferir en el funcionamiento del resto de los objetos

La encapsulacioacuten no es exclusiva de los lenguajes de programacioacuten orientados a objetos Aparece en los lenguajes basados en procedimientos (PASCAL C COBOL ETC) como una forma de proteger los datos que se manipulan dentro de las funciones

Los lenguajes OOP incorporan la posibilidad de encapsular tambieacuten las estructuras de datos que sirven como base a las funciones Aportan por tanto un nivel superior en cuanto a proteccioacuten de informacioacuten

La encapsulacioacuten nos permite el uso de libreriacuteas de objetos para el desarrollo de nuestros programas Recordemos que las libreriacuteas son definiciones de objetos de propoacutesito general que se incorporan a los programas Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde estaacute definido ya que contiene y define todo lo que necesita para poder funcionar es faacutecil utilizarlo en los mas variados tipos de aplicaciones Si aseguramos depurando las propiedades y las operaciones dentro de la clase que el objeto funcioacuten bien dentro de una aplicacioacuten con una correcta encapsulacioacuten el objeto podraacute funcionar en cualquier otra

Otra de las ventajas de la encapsulacioacuten es que al definir el objeto como una caja negra con entradas y salida asociadas en cualquier momento podemos cambiar el contenido de las operaciones del objeto de manera que no afecte al funcionamiento general del programa

La encapsulacioacuten estaacute en el nuacutecleo de dos grandes pilares de la construccioacuten de sistemas mantenibilidad y reusabilidad

Mantenibilidad

Cualidad que indica que un programa o sistema debe ser faacutecilmente modificable Es decir que los cambios en las condiciones externas (como la definicioacuten de una nueva variable) implicaraacuten modificaciones pequentildeas en el programa sistema El concepto de mantenibilidad implica que un programa al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante

Reusabilidad

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccioacuten de otros programas Ello implica que los objetos definidos en un programa pueden ser extraiacutedos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el coacutedigo del objeto El objeto final es que el programador construya una libreriacutea de objetos que le permita realizar programas basaacutendose en la teacutecnica de cortar y pegar Esta extrae (corta) coacutedigo de otras aplicaciones ya realizadas y las implementa (pega) en la aplicacioacuten a realizar donde tras algunos retoques la nueva aplicacioacuten estaraacute lista para funcionar Como podraacute observar el concepto de reusabilidad permite reducir el tiempo de realizacioacuten ganando en claridad mantenibilidad y productividad

La encapsulacioacuten de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad con el uacutenico coste adicional de definir con precisioacuten las entradas y salida de nuestras operaciones

Poliformismo

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 10: 2983238 programacion-orientada-a-objetos

Pero existe una diferencia con las variables y es que las propiedades se pueden heredar de unos objetos a otros En consecuencia un objeto puede tener una propiedad de maneras diferentes

-Propiedades propias Estaacuten formadas dentro de la caacutepsula del objeto

-Propiedades heredadas Estan definidas en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estas propiedades se llaman propiedades miembro porque el objeto las posee por el mero hecho de ser miembro de una clase

3 METODOS

Una operacioacuten que realiza acceso a los datos Podemos definir meacutetodo como un programa procedimental o procedural escrito en cualquier lenguaje que estaacute asociado a un objeto determinado y cuya ejecucioacuten soacutelo puede desencadenarse a traveacutes de un mensaje recibido por eacuteste o por sus descendientes

Son sinoacutenimos de meacutetodo todos aquellos teacuterminos que se han aplicado tradicionalmente a los programas como procedimiento funcioacuten rutina etc Sin embargo es conveniente utilizar el teacutermino meacutetodo para que se distingan claramente las propiedades especiales que adquiere un programa en el entorno OOP que afectan fundamentalmente a la forma de invocarlo (uacutenicamente a traveacutes de un mensaje) y a su campo de accioacuten limitado a un objeto y a sus descendientes aunque posiblemente no a todos

Si los meacutetodos son programas se deduce que podriacutean tener argumentos o paraacutemetros Puesto que los meacutetodos pueden heredarse de unos objetos a otros un objeto puede disponer de un meacutetodo de dos maneras diferentes

-Meacutetodos propios Estaacuten incluiacutedos dentro de la caacutepsula del objeto

-Meacutetodos heredados Estan definidos en un objeto diferente antepasado de eacuteste (padreabuelo etc) A veces estos meacutetodos se llaman meacutetodos miembro porque el objeto los posee por el mero hecho de ser miembro de una clase

Polimorfiacutesmo

Una de las caracteriacutesticas fundamentales de la OOP es el polimorfiacutesmo que no es otra cosa que la posibilidad de construir varios meacutetodos con el mismo nombre pero con relacioacuten a la clase a la que pertenece cada uno con comportamientos diferentes Esto conlleva la habilidad de enviar un mismo mensaje a objetos de clases diferentes Estos objetos recibiriacutean el mismo mensaje global pero responderiacutean a eacutel de formas diferentes por ejemplo un mensaje + a un objeto ENTERO significariacutea suma mientras que para un objeto STRING significariacutea concatenacioacuten (pegar strings uno seguido al otro)

Demonios

Es un tipo especial de meacutetodos relativamente poco frecuente en los sistemas de OOP que se activa automaacuteticamente cuando sucede algo especial Es decir es un programa como los meacutetodos ordinarios pero se diferencia de estos porque su ejecucioacuten no se activa con un mensaje sino que se desencadena autmaacuteticamente

cuando ocurre un suceso determinado la asignacioacuten de un valor a una propiedad de un objeto la lectura de un valor determinado etc

Los demonios cuando existen se diferencian de otros meacutetodos por que no son heredables y porque a veces estaacuten ligados a una de las propiedades de un objeto mas que al objeto entero

CONSIDERACIONES FINALES

Beneficios que se obtienen del desarrollo con OOP

Diacutea a diacutea los costos del Hardware decrecen Asiacute surgen nuevas aacutereas de aplicacioacuten cotidianamente procesamiento de imaacutegenes y sonido bases de datos multimediales automatizacioacuten de oficinas ambientes de ingenieriacutea de software etc Auacuten en las aplicaciones tradicionales encontramos que definir interfases hombre-maacutequina a-la-Windows suele ser bastante conveniente

Lamentablemente los costos de produccioacuten de software siguen aumentando el mantenimiento y la modificacioacuten de sistemas complejos suele ser una tarea trabajosa cada aplicacioacuten (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo etc

Todos estos problemas auacuten no han sido solucionados en forma completa Pero como los objetos son portables (teoacutericamente) mientras que la herencia permite la reusabilidad del coacutedigo orientado a objetos es maacutes sencillo modificar coacutedigo existente porque los objetos no interaccionan excepto a traveacutes de mensajes en consecuencia un cambio en la codificacioacuten de un objeto no afectaraacute la operacioacuten con otro objeto siempre que los meacutetodos respectivos permanezcan intactos La introduccioacuten de tecnologiacutea de objetos como una herramienta concepual para analizar disentildear e implementar aplicaciones permite obtener aplicaciones maacutes modificables faacutecilmente extendibles y a partir de componentes reusables Esta reusabilidad del coacutedigo disminuye el tiempo que se utiliza en el desarrollo y hace que el desarrollo del software sea mas intuitivo porque la gente piensa naturalmente en teacuterminos de objetos maacutes que en teacuterminos de algoritmos de software

Problemas derivados de la utilizacioacuten de OOP en la actualidad

Un sistema orientado a objetos por lo visto puede parecer un paraiacuteso virtual El problema sin embargo surge en la implementacioacuten de tal sistema Muchas compantildeiacuteas oyen acerca de los beneficios de un sistema orientado a objetos e invierten gran cantidad de recursos luego comienzan a darse cuenta que han impuesto una nueva cultura que es ajena a los programadores actuales Especiacuteficamente los siguientes temas suelen aparecer repetidamente

Curvas de aprendizaje largas Un sistema orientado a objetos ve al mundo en una forma uacutenica Involucra la conceptualizacioacuten de todos los elementos de un programa desde subsistemas a los datos en la forma de objetos Toda la comunicacioacuten entre los objetos debe realizarse en la forma de mensajes Esta no es la forma en que estaacuten escritos los programas orientados a objetos actualmente al hacer la transicioacuten a un sistema orientado a objetos la mayoriacutea de los programadores deben capacitarse nuevamente antes de poder usarlo

Dependencia del lenguaje A pesar de la portabilidad conceptual de los objetos en un sistema orientado a objetos en la praacutectica existen muchas dependencias Muchos lenguajes orientados a objetos estaacuten compitiendo actualmente para dominar el mercado Cambiar el lenguaje de implementacioacuten de un sistema orientado a objetos no es una tarea sencilla por ejemplo C++ soporta el concepto de herencia multiple mientras que SmallTalk no lo soporta en consecuencia la eleccioacuten de un lenguaje tiene ramificaciones de disentildeo muy importamtes

Determinacion de las clases Una clase es un molde que se utiliza para crear nuevos objetos En consecuencia es importante crear el conjunto de clases adecuado para un proyecto Desafortunadamente la definicioacuten de las clases es maacutes un arte que una ciencia Si bien hay muchas jerarquiacuteas de clase predefinidas usualmente se deben crear clases especiacuteficas para la aplicacioacuten que se este desarrollando Luego en 6 meses oacute 1 antildeo se da cuenta que las clases que se establecieron no son posibles en ese caso seraacute necesario reestructurar la jerarquiacutea de clases devastando totalmente la planificacioacuten original

Performance En un sistema donde todo es un objeto y toda interaccion es a traveacutes de mensajes el traacutefico de mensajes afecta la performance A medida que la tecnologiacutea avanza y la velocidad de microprocesamiento potencia y tamantildeo de la memoria aumentan la situacion mejoraraacute pero en la situacioacuten actual un disentildeo de una aplicacioacuten orientada a objetos que no tiene en cuenta la performance no seraacute viable comercialmente

Idealmente habriacutea una forma de atacar estos problemas eficientemente al mismo tiempo que se obtienen los beneficios del desarrollo de una estrategia orientada a objetos Deberia existir una metodologiacutea faacutecil de aprender e independiente del lenguaje y facil de reestructurar que no drene la performance del sistema

Monografiacuteascom

Programacioacuten orientada a Objetos(OOP Object Oriented Programming)

1 Introduccioacuten 2 Objetos 3 Disentildeo de aplicaciones y eleccioacuten de entorno 4 Aplicaciones orientadas a objetos 5 Caracteriacutesticas de los lenguajes OOP 6 Panoraacutemica de los lenguajes OOP 7 Bases de datos orientadas a objetos 8 Objetos y asociaciones

9 La relacioacuten de herencia 10 Bibliografiacutea infografiacutea

Introduccioacuten

l teacutermino de Programacioacuten Orientada a Objetos indica maacutes una forma de disentildeo y una metodologiacutea de desarrollo de software que un lenguaje de programacioacuten ya que en realidad se puede aplicar el Disentildeo Orientado a Objetos (En ingleacutes abreviado OOD Object Oriented Design) a cualquier tipo de lenguaje de programacioacuten

El desarrollo de la OOP empieza a destacar durante la deacutecada de lo 80 tomando en cuenta la programacioacuten estructurada a la que engloba y dotando al programador de nuevos elementos para el anaacutelisis y desarrollo de software

El propoacutesito de este trabajo es explicar el disentildeo orientado a objeto y no una explicacioacuten de su programacioacuten puesto que no nos alcanzariacutea toda la curriacutecula para hacerlo

Baacutesicamente la OOP permite a los programadores escribir software de forma que esteacute organizado en la misma manera que el problema que trata de modelizar Los lenguajes de programacioacuten convencionales son poco maacutes que una lista de acciones a realizar sobre un conjunto de datos en una determinada secuencia Si en alguacuten punto del programa modificamos la estructura de los datos o la accioacuten realizada sobre ellos el programa cambia

La OOP aporta un enfoque nuevo convirtiendo la estructura de datos en el centro sobre el que pivotan las operaciones De esta forma cualquier modificacioacuten de la estructura de datos tiene efecto inmediato sobre las acciones a realizar sobre ella

siendo esta una de la diferencias radicales respecto a la programacioacuten estructurada

Para quienes no estaacuten familiarizados con la programacioacuten estructurada direacute que una de las bases de esta escuela de programacioacuten parte del disentildeo arriba ndash abajo En esta forma de disentildeo se descomponen los requerimientos del programa paso a paso hasta llegar a un nivel que permite expresarlos mediante procedimientos y funciones La OOP estructura los datos en objetos que pueden almacenar manipular y combinar informacioacuten

En resumen la programacioacuten estructurada presta atencioacuten al conjunto de acciones que manipulan el flujo de datos (desde la situacioacuten inicial a la final) mientras que la programacioacuten orientada a objetos presta atencioacuten a la interrelacioacuten que existe entre los datos y las acciones a realizar con ellos

Muchos habraacuten oiacutedo comentarios sobre la incidencia de la OOP sobre la programacioacuten convencional Se ha llegado a decir que el cambio introducido por la OOP es similar al producido por la aparicioacuten del ensamblador sobre el coacutedigo de maacutequina

La OOP proporciona las siguientes ventajas sobre otros lenguajes de programacioacuten

Uniformidad Ya que la representacioacuten de los objetos lleva implica tanto el anaacutelisis como el disentildeo y la codificacioacuten de los mismos

Comprensioacuten Tanto los datos que componen los objetos como los procedimientos que los manipulan estaacuten agrupados en clases que se corresponden con las estructuras de informacioacuten que el programa trata

Flexibilidad Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar cualquier cambio que se realice sobre ellos quedaraacute reflejado automaacuteticamente en cualquier lugar donde estos datos aparezcan

Estabilidad Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo

Reusabilidad La nocioacuten de objeto permite que programas que traten las mismas estructuras de informacioacuten reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan De esta forma el desarrollo de un programa puede llegar a ser una simple combinacioacuten de objetos ya definidos donde estos estaacuten relacionados de una manera particular

Uno de los puntos clave a remarcar en esta introduccioacuten es que la programacioacuten orientada a objetos no sustituye a ninguna metodologiacutea ni lenguaje de programacioacuten anterior Todos los programas que se realizan seguacuten OOD se pueden realizar igualmente mediante programacioacuten estructurada Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas

basadas en un interface de usuario graacutefico como Windows OS2 x-Windows etc Es mucho maacutes sencillo

OBJETOS

Caracteriacutesticas de los Objetos

Identidad del Objeto

La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos son distintos entre siacute De esta forma incluso una serie de Objetos coches recieacuten fabricados son distintos los unos de los otros

La afirmacioacuten anterior aunque parece obvia tiene importancia cuando descendemos al nivel de programacioacuten En este aacutembito cada uno de los objetos tiene un controlador pro el cual se identifica Este puede ser una variable una estructura de datos una cadena de caracteres etc El controlador seraacute distinto para cada uno de los objeto aunque las referencias a eacutestos sean uniformes e independientes del contenido permitiendo crear agrupaciones de objetos con el mismo tratamiento

Clasificacioacuten

Con la clasificacioacuten comienza la verdadera programacioacuten orientada a objetos Ellos nos obliga a una abstraccioacuten del concepto de objeto denominada clase

Las clases permiten la agrupacioacuten de objetos que comparten las mismas propiedades y comportamiento Si bien clase y objeto suelen usarse como sinoacutenimos no lo son

El esfuerzo del programador ante una aplicacioacuten orientada a objetos se centra en la identificacioacuten de las clases sus atributos y operaciones asociadas

Las propiedades de cada clase deben cumplir una serie de premisas

Las propiedades deber ser significativas dentro del entorno de la aplicacioacuten es decir deben servir para identificar claramente y de una manera uacutenica (y univoca) a cada uno de los objetos

El nuacutemero de propiedades de un objeto debe ser el miacutenimo para realizar todas las operaciones que requiera la aplicacioacuten

Definamos una clase rectaacutengulo Esta clase puede tener como atributos un punto (xy) la anchura (a) y la longitud (l) Las operaciones a realizar son mover agrandar reducir et iquestEs posible realizarlas con las propiedades de la clase

Un anaacutelisis posterior nos indica que es posible la realizacioacuten de estas operaciones con los atributos definidos Pero si incluimos la operacioacuten girar vemos que con las propiedades definidas para la clase esta operacioacuten no se puede realizar Para incluir esta nueva operacioacuten debemos redefinir las propiedades del objeto en este caso las coordenadas de los veacutertices

Encapsulacioacuten y ocultacioacuten de datos

La capacidad de presentacioacuten de informacioacuten dentro de un objeto se divide en dos partes bien diferenciadas

Interna La informacioacuten que necesita el objeto para operar y que es innecesaria para los demaacutes objetos de la aplicacioacuten Estos atributos se denominada privados y tienen como marco de aplicacioacuten uacutenicamente a las operaciones asociadas al objeto

Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos Estas propiedades se denominan puacuteblicas y corresponde a la informacioacuten que necesitan conocer los restantes objetos de la aplicacioacuten respecto del objeto definido para poder operar

Podemos imaginarla encapsulacioacuten como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida Si introducimos datos por la entrada automaacuteticamente obtendraacute un resultado en la salida No necesita conocer ninguacuten detalle del funcionamiento interno de la caja

El teacutermino encapsulacioacuten indica l capacidad que tienen los objetos de construir una caacutepsula a su alrededor ocultando la informacioacuten que contienen (aqueacutella que es necesaria para su funcionamiento interno pero innecesaria para los demaacutes objetos) a las otras clases que componen la aplicacioacuten

Aunque a primera vista la encapsulacioacuten puede parecer superflua tengamos en cuenta que existen muchas variables utilizadas de forma temporal contadores y variables que contienen resultados intermedios etc D no ser por la encapsulacioacuten estas variables ocupariacutean memoria y podriacutean interferir en el funcionamiento del resto de los objetos

La encapsulacioacuten no es exclusiva de los lenguajes de programacioacuten orientados a objetos Aparece en los lenguajes basados en procedimientos (PASCAL C COBOL ETC) como una forma de proteger los datos que se manipulan dentro de las funciones

Los lenguajes OOP incorporan la posibilidad de encapsular tambieacuten las estructuras de datos que sirven como base a las funciones Aportan por tanto un nivel superior en cuanto a proteccioacuten de informacioacuten

La encapsulacioacuten nos permite el uso de libreriacuteas de objetos para el desarrollo de nuestros programas Recordemos que las libreriacuteas son definiciones de objetos de propoacutesito general que se incorporan a los programas Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde estaacute definido ya que contiene y define todo lo que necesita para poder funcionar es faacutecil utilizarlo en los mas variados tipos de aplicaciones Si aseguramos depurando las propiedades y las operaciones dentro de la clase que el objeto funcioacuten bien dentro de una aplicacioacuten con una correcta encapsulacioacuten el objeto podraacute funcionar en cualquier otra

Otra de las ventajas de la encapsulacioacuten es que al definir el objeto como una caja negra con entradas y salida asociadas en cualquier momento podemos cambiar el contenido de las operaciones del objeto de manera que no afecte al funcionamiento general del programa

La encapsulacioacuten estaacute en el nuacutecleo de dos grandes pilares de la construccioacuten de sistemas mantenibilidad y reusabilidad

Mantenibilidad

Cualidad que indica que un programa o sistema debe ser faacutecilmente modificable Es decir que los cambios en las condiciones externas (como la definicioacuten de una nueva variable) implicaraacuten modificaciones pequentildeas en el programa sistema El concepto de mantenibilidad implica que un programa al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante

Reusabilidad

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccioacuten de otros programas Ello implica que los objetos definidos en un programa pueden ser extraiacutedos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el coacutedigo del objeto El objeto final es que el programador construya una libreriacutea de objetos que le permita realizar programas basaacutendose en la teacutecnica de cortar y pegar Esta extrae (corta) coacutedigo de otras aplicaciones ya realizadas y las implementa (pega) en la aplicacioacuten a realizar donde tras algunos retoques la nueva aplicacioacuten estaraacute lista para funcionar Como podraacute observar el concepto de reusabilidad permite reducir el tiempo de realizacioacuten ganando en claridad mantenibilidad y productividad

La encapsulacioacuten de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad con el uacutenico coste adicional de definir con precisioacuten las entradas y salida de nuestras operaciones

Poliformismo

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 11: 2983238 programacion-orientada-a-objetos

cuando ocurre un suceso determinado la asignacioacuten de un valor a una propiedad de un objeto la lectura de un valor determinado etc

Los demonios cuando existen se diferencian de otros meacutetodos por que no son heredables y porque a veces estaacuten ligados a una de las propiedades de un objeto mas que al objeto entero

CONSIDERACIONES FINALES

Beneficios que se obtienen del desarrollo con OOP

Diacutea a diacutea los costos del Hardware decrecen Asiacute surgen nuevas aacutereas de aplicacioacuten cotidianamente procesamiento de imaacutegenes y sonido bases de datos multimediales automatizacioacuten de oficinas ambientes de ingenieriacutea de software etc Auacuten en las aplicaciones tradicionales encontramos que definir interfases hombre-maacutequina a-la-Windows suele ser bastante conveniente

Lamentablemente los costos de produccioacuten de software siguen aumentando el mantenimiento y la modificacioacuten de sistemas complejos suele ser una tarea trabajosa cada aplicacioacuten (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo etc

Todos estos problemas auacuten no han sido solucionados en forma completa Pero como los objetos son portables (teoacutericamente) mientras que la herencia permite la reusabilidad del coacutedigo orientado a objetos es maacutes sencillo modificar coacutedigo existente porque los objetos no interaccionan excepto a traveacutes de mensajes en consecuencia un cambio en la codificacioacuten de un objeto no afectaraacute la operacioacuten con otro objeto siempre que los meacutetodos respectivos permanezcan intactos La introduccioacuten de tecnologiacutea de objetos como una herramienta concepual para analizar disentildear e implementar aplicaciones permite obtener aplicaciones maacutes modificables faacutecilmente extendibles y a partir de componentes reusables Esta reusabilidad del coacutedigo disminuye el tiempo que se utiliza en el desarrollo y hace que el desarrollo del software sea mas intuitivo porque la gente piensa naturalmente en teacuterminos de objetos maacutes que en teacuterminos de algoritmos de software

Problemas derivados de la utilizacioacuten de OOP en la actualidad

Un sistema orientado a objetos por lo visto puede parecer un paraiacuteso virtual El problema sin embargo surge en la implementacioacuten de tal sistema Muchas compantildeiacuteas oyen acerca de los beneficios de un sistema orientado a objetos e invierten gran cantidad de recursos luego comienzan a darse cuenta que han impuesto una nueva cultura que es ajena a los programadores actuales Especiacuteficamente los siguientes temas suelen aparecer repetidamente

Curvas de aprendizaje largas Un sistema orientado a objetos ve al mundo en una forma uacutenica Involucra la conceptualizacioacuten de todos los elementos de un programa desde subsistemas a los datos en la forma de objetos Toda la comunicacioacuten entre los objetos debe realizarse en la forma de mensajes Esta no es la forma en que estaacuten escritos los programas orientados a objetos actualmente al hacer la transicioacuten a un sistema orientado a objetos la mayoriacutea de los programadores deben capacitarse nuevamente antes de poder usarlo

Dependencia del lenguaje A pesar de la portabilidad conceptual de los objetos en un sistema orientado a objetos en la praacutectica existen muchas dependencias Muchos lenguajes orientados a objetos estaacuten compitiendo actualmente para dominar el mercado Cambiar el lenguaje de implementacioacuten de un sistema orientado a objetos no es una tarea sencilla por ejemplo C++ soporta el concepto de herencia multiple mientras que SmallTalk no lo soporta en consecuencia la eleccioacuten de un lenguaje tiene ramificaciones de disentildeo muy importamtes

Determinacion de las clases Una clase es un molde que se utiliza para crear nuevos objetos En consecuencia es importante crear el conjunto de clases adecuado para un proyecto Desafortunadamente la definicioacuten de las clases es maacutes un arte que una ciencia Si bien hay muchas jerarquiacuteas de clase predefinidas usualmente se deben crear clases especiacuteficas para la aplicacioacuten que se este desarrollando Luego en 6 meses oacute 1 antildeo se da cuenta que las clases que se establecieron no son posibles en ese caso seraacute necesario reestructurar la jerarquiacutea de clases devastando totalmente la planificacioacuten original

Performance En un sistema donde todo es un objeto y toda interaccion es a traveacutes de mensajes el traacutefico de mensajes afecta la performance A medida que la tecnologiacutea avanza y la velocidad de microprocesamiento potencia y tamantildeo de la memoria aumentan la situacion mejoraraacute pero en la situacioacuten actual un disentildeo de una aplicacioacuten orientada a objetos que no tiene en cuenta la performance no seraacute viable comercialmente

Idealmente habriacutea una forma de atacar estos problemas eficientemente al mismo tiempo que se obtienen los beneficios del desarrollo de una estrategia orientada a objetos Deberia existir una metodologiacutea faacutecil de aprender e independiente del lenguaje y facil de reestructurar que no drene la performance del sistema

Monografiacuteascom

Programacioacuten orientada a Objetos(OOP Object Oriented Programming)

1 Introduccioacuten 2 Objetos 3 Disentildeo de aplicaciones y eleccioacuten de entorno 4 Aplicaciones orientadas a objetos 5 Caracteriacutesticas de los lenguajes OOP 6 Panoraacutemica de los lenguajes OOP 7 Bases de datos orientadas a objetos 8 Objetos y asociaciones

9 La relacioacuten de herencia 10 Bibliografiacutea infografiacutea

Introduccioacuten

l teacutermino de Programacioacuten Orientada a Objetos indica maacutes una forma de disentildeo y una metodologiacutea de desarrollo de software que un lenguaje de programacioacuten ya que en realidad se puede aplicar el Disentildeo Orientado a Objetos (En ingleacutes abreviado OOD Object Oriented Design) a cualquier tipo de lenguaje de programacioacuten

El desarrollo de la OOP empieza a destacar durante la deacutecada de lo 80 tomando en cuenta la programacioacuten estructurada a la que engloba y dotando al programador de nuevos elementos para el anaacutelisis y desarrollo de software

El propoacutesito de este trabajo es explicar el disentildeo orientado a objeto y no una explicacioacuten de su programacioacuten puesto que no nos alcanzariacutea toda la curriacutecula para hacerlo

Baacutesicamente la OOP permite a los programadores escribir software de forma que esteacute organizado en la misma manera que el problema que trata de modelizar Los lenguajes de programacioacuten convencionales son poco maacutes que una lista de acciones a realizar sobre un conjunto de datos en una determinada secuencia Si en alguacuten punto del programa modificamos la estructura de los datos o la accioacuten realizada sobre ellos el programa cambia

La OOP aporta un enfoque nuevo convirtiendo la estructura de datos en el centro sobre el que pivotan las operaciones De esta forma cualquier modificacioacuten de la estructura de datos tiene efecto inmediato sobre las acciones a realizar sobre ella

siendo esta una de la diferencias radicales respecto a la programacioacuten estructurada

Para quienes no estaacuten familiarizados con la programacioacuten estructurada direacute que una de las bases de esta escuela de programacioacuten parte del disentildeo arriba ndash abajo En esta forma de disentildeo se descomponen los requerimientos del programa paso a paso hasta llegar a un nivel que permite expresarlos mediante procedimientos y funciones La OOP estructura los datos en objetos que pueden almacenar manipular y combinar informacioacuten

En resumen la programacioacuten estructurada presta atencioacuten al conjunto de acciones que manipulan el flujo de datos (desde la situacioacuten inicial a la final) mientras que la programacioacuten orientada a objetos presta atencioacuten a la interrelacioacuten que existe entre los datos y las acciones a realizar con ellos

Muchos habraacuten oiacutedo comentarios sobre la incidencia de la OOP sobre la programacioacuten convencional Se ha llegado a decir que el cambio introducido por la OOP es similar al producido por la aparicioacuten del ensamblador sobre el coacutedigo de maacutequina

La OOP proporciona las siguientes ventajas sobre otros lenguajes de programacioacuten

Uniformidad Ya que la representacioacuten de los objetos lleva implica tanto el anaacutelisis como el disentildeo y la codificacioacuten de los mismos

Comprensioacuten Tanto los datos que componen los objetos como los procedimientos que los manipulan estaacuten agrupados en clases que se corresponden con las estructuras de informacioacuten que el programa trata

Flexibilidad Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar cualquier cambio que se realice sobre ellos quedaraacute reflejado automaacuteticamente en cualquier lugar donde estos datos aparezcan

Estabilidad Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo

Reusabilidad La nocioacuten de objeto permite que programas que traten las mismas estructuras de informacioacuten reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan De esta forma el desarrollo de un programa puede llegar a ser una simple combinacioacuten de objetos ya definidos donde estos estaacuten relacionados de una manera particular

Uno de los puntos clave a remarcar en esta introduccioacuten es que la programacioacuten orientada a objetos no sustituye a ninguna metodologiacutea ni lenguaje de programacioacuten anterior Todos los programas que se realizan seguacuten OOD se pueden realizar igualmente mediante programacioacuten estructurada Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas

basadas en un interface de usuario graacutefico como Windows OS2 x-Windows etc Es mucho maacutes sencillo

OBJETOS

Caracteriacutesticas de los Objetos

Identidad del Objeto

La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos son distintos entre siacute De esta forma incluso una serie de Objetos coches recieacuten fabricados son distintos los unos de los otros

La afirmacioacuten anterior aunque parece obvia tiene importancia cuando descendemos al nivel de programacioacuten En este aacutembito cada uno de los objetos tiene un controlador pro el cual se identifica Este puede ser una variable una estructura de datos una cadena de caracteres etc El controlador seraacute distinto para cada uno de los objeto aunque las referencias a eacutestos sean uniformes e independientes del contenido permitiendo crear agrupaciones de objetos con el mismo tratamiento

Clasificacioacuten

Con la clasificacioacuten comienza la verdadera programacioacuten orientada a objetos Ellos nos obliga a una abstraccioacuten del concepto de objeto denominada clase

Las clases permiten la agrupacioacuten de objetos que comparten las mismas propiedades y comportamiento Si bien clase y objeto suelen usarse como sinoacutenimos no lo son

El esfuerzo del programador ante una aplicacioacuten orientada a objetos se centra en la identificacioacuten de las clases sus atributos y operaciones asociadas

Las propiedades de cada clase deben cumplir una serie de premisas

Las propiedades deber ser significativas dentro del entorno de la aplicacioacuten es decir deben servir para identificar claramente y de una manera uacutenica (y univoca) a cada uno de los objetos

El nuacutemero de propiedades de un objeto debe ser el miacutenimo para realizar todas las operaciones que requiera la aplicacioacuten

Definamos una clase rectaacutengulo Esta clase puede tener como atributos un punto (xy) la anchura (a) y la longitud (l) Las operaciones a realizar son mover agrandar reducir et iquestEs posible realizarlas con las propiedades de la clase

Un anaacutelisis posterior nos indica que es posible la realizacioacuten de estas operaciones con los atributos definidos Pero si incluimos la operacioacuten girar vemos que con las propiedades definidas para la clase esta operacioacuten no se puede realizar Para incluir esta nueva operacioacuten debemos redefinir las propiedades del objeto en este caso las coordenadas de los veacutertices

Encapsulacioacuten y ocultacioacuten de datos

La capacidad de presentacioacuten de informacioacuten dentro de un objeto se divide en dos partes bien diferenciadas

Interna La informacioacuten que necesita el objeto para operar y que es innecesaria para los demaacutes objetos de la aplicacioacuten Estos atributos se denominada privados y tienen como marco de aplicacioacuten uacutenicamente a las operaciones asociadas al objeto

Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos Estas propiedades se denominan puacuteblicas y corresponde a la informacioacuten que necesitan conocer los restantes objetos de la aplicacioacuten respecto del objeto definido para poder operar

Podemos imaginarla encapsulacioacuten como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida Si introducimos datos por la entrada automaacuteticamente obtendraacute un resultado en la salida No necesita conocer ninguacuten detalle del funcionamiento interno de la caja

El teacutermino encapsulacioacuten indica l capacidad que tienen los objetos de construir una caacutepsula a su alrededor ocultando la informacioacuten que contienen (aqueacutella que es necesaria para su funcionamiento interno pero innecesaria para los demaacutes objetos) a las otras clases que componen la aplicacioacuten

Aunque a primera vista la encapsulacioacuten puede parecer superflua tengamos en cuenta que existen muchas variables utilizadas de forma temporal contadores y variables que contienen resultados intermedios etc D no ser por la encapsulacioacuten estas variables ocupariacutean memoria y podriacutean interferir en el funcionamiento del resto de los objetos

La encapsulacioacuten no es exclusiva de los lenguajes de programacioacuten orientados a objetos Aparece en los lenguajes basados en procedimientos (PASCAL C COBOL ETC) como una forma de proteger los datos que se manipulan dentro de las funciones

Los lenguajes OOP incorporan la posibilidad de encapsular tambieacuten las estructuras de datos que sirven como base a las funciones Aportan por tanto un nivel superior en cuanto a proteccioacuten de informacioacuten

La encapsulacioacuten nos permite el uso de libreriacuteas de objetos para el desarrollo de nuestros programas Recordemos que las libreriacuteas son definiciones de objetos de propoacutesito general que se incorporan a los programas Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde estaacute definido ya que contiene y define todo lo que necesita para poder funcionar es faacutecil utilizarlo en los mas variados tipos de aplicaciones Si aseguramos depurando las propiedades y las operaciones dentro de la clase que el objeto funcioacuten bien dentro de una aplicacioacuten con una correcta encapsulacioacuten el objeto podraacute funcionar en cualquier otra

Otra de las ventajas de la encapsulacioacuten es que al definir el objeto como una caja negra con entradas y salida asociadas en cualquier momento podemos cambiar el contenido de las operaciones del objeto de manera que no afecte al funcionamiento general del programa

La encapsulacioacuten estaacute en el nuacutecleo de dos grandes pilares de la construccioacuten de sistemas mantenibilidad y reusabilidad

Mantenibilidad

Cualidad que indica que un programa o sistema debe ser faacutecilmente modificable Es decir que los cambios en las condiciones externas (como la definicioacuten de una nueva variable) implicaraacuten modificaciones pequentildeas en el programa sistema El concepto de mantenibilidad implica que un programa al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante

Reusabilidad

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccioacuten de otros programas Ello implica que los objetos definidos en un programa pueden ser extraiacutedos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el coacutedigo del objeto El objeto final es que el programador construya una libreriacutea de objetos que le permita realizar programas basaacutendose en la teacutecnica de cortar y pegar Esta extrae (corta) coacutedigo de otras aplicaciones ya realizadas y las implementa (pega) en la aplicacioacuten a realizar donde tras algunos retoques la nueva aplicacioacuten estaraacute lista para funcionar Como podraacute observar el concepto de reusabilidad permite reducir el tiempo de realizacioacuten ganando en claridad mantenibilidad y productividad

La encapsulacioacuten de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad con el uacutenico coste adicional de definir con precisioacuten las entradas y salida de nuestras operaciones

Poliformismo

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 12: 2983238 programacion-orientada-a-objetos

Dependencia del lenguaje A pesar de la portabilidad conceptual de los objetos en un sistema orientado a objetos en la praacutectica existen muchas dependencias Muchos lenguajes orientados a objetos estaacuten compitiendo actualmente para dominar el mercado Cambiar el lenguaje de implementacioacuten de un sistema orientado a objetos no es una tarea sencilla por ejemplo C++ soporta el concepto de herencia multiple mientras que SmallTalk no lo soporta en consecuencia la eleccioacuten de un lenguaje tiene ramificaciones de disentildeo muy importamtes

Determinacion de las clases Una clase es un molde que se utiliza para crear nuevos objetos En consecuencia es importante crear el conjunto de clases adecuado para un proyecto Desafortunadamente la definicioacuten de las clases es maacutes un arte que una ciencia Si bien hay muchas jerarquiacuteas de clase predefinidas usualmente se deben crear clases especiacuteficas para la aplicacioacuten que se este desarrollando Luego en 6 meses oacute 1 antildeo se da cuenta que las clases que se establecieron no son posibles en ese caso seraacute necesario reestructurar la jerarquiacutea de clases devastando totalmente la planificacioacuten original

Performance En un sistema donde todo es un objeto y toda interaccion es a traveacutes de mensajes el traacutefico de mensajes afecta la performance A medida que la tecnologiacutea avanza y la velocidad de microprocesamiento potencia y tamantildeo de la memoria aumentan la situacion mejoraraacute pero en la situacioacuten actual un disentildeo de una aplicacioacuten orientada a objetos que no tiene en cuenta la performance no seraacute viable comercialmente

Idealmente habriacutea una forma de atacar estos problemas eficientemente al mismo tiempo que se obtienen los beneficios del desarrollo de una estrategia orientada a objetos Deberia existir una metodologiacutea faacutecil de aprender e independiente del lenguaje y facil de reestructurar que no drene la performance del sistema

Monografiacuteascom

Programacioacuten orientada a Objetos(OOP Object Oriented Programming)

1 Introduccioacuten 2 Objetos 3 Disentildeo de aplicaciones y eleccioacuten de entorno 4 Aplicaciones orientadas a objetos 5 Caracteriacutesticas de los lenguajes OOP 6 Panoraacutemica de los lenguajes OOP 7 Bases de datos orientadas a objetos 8 Objetos y asociaciones

9 La relacioacuten de herencia 10 Bibliografiacutea infografiacutea

Introduccioacuten

l teacutermino de Programacioacuten Orientada a Objetos indica maacutes una forma de disentildeo y una metodologiacutea de desarrollo de software que un lenguaje de programacioacuten ya que en realidad se puede aplicar el Disentildeo Orientado a Objetos (En ingleacutes abreviado OOD Object Oriented Design) a cualquier tipo de lenguaje de programacioacuten

El desarrollo de la OOP empieza a destacar durante la deacutecada de lo 80 tomando en cuenta la programacioacuten estructurada a la que engloba y dotando al programador de nuevos elementos para el anaacutelisis y desarrollo de software

El propoacutesito de este trabajo es explicar el disentildeo orientado a objeto y no una explicacioacuten de su programacioacuten puesto que no nos alcanzariacutea toda la curriacutecula para hacerlo

Baacutesicamente la OOP permite a los programadores escribir software de forma que esteacute organizado en la misma manera que el problema que trata de modelizar Los lenguajes de programacioacuten convencionales son poco maacutes que una lista de acciones a realizar sobre un conjunto de datos en una determinada secuencia Si en alguacuten punto del programa modificamos la estructura de los datos o la accioacuten realizada sobre ellos el programa cambia

La OOP aporta un enfoque nuevo convirtiendo la estructura de datos en el centro sobre el que pivotan las operaciones De esta forma cualquier modificacioacuten de la estructura de datos tiene efecto inmediato sobre las acciones a realizar sobre ella

siendo esta una de la diferencias radicales respecto a la programacioacuten estructurada

Para quienes no estaacuten familiarizados con la programacioacuten estructurada direacute que una de las bases de esta escuela de programacioacuten parte del disentildeo arriba ndash abajo En esta forma de disentildeo se descomponen los requerimientos del programa paso a paso hasta llegar a un nivel que permite expresarlos mediante procedimientos y funciones La OOP estructura los datos en objetos que pueden almacenar manipular y combinar informacioacuten

En resumen la programacioacuten estructurada presta atencioacuten al conjunto de acciones que manipulan el flujo de datos (desde la situacioacuten inicial a la final) mientras que la programacioacuten orientada a objetos presta atencioacuten a la interrelacioacuten que existe entre los datos y las acciones a realizar con ellos

Muchos habraacuten oiacutedo comentarios sobre la incidencia de la OOP sobre la programacioacuten convencional Se ha llegado a decir que el cambio introducido por la OOP es similar al producido por la aparicioacuten del ensamblador sobre el coacutedigo de maacutequina

La OOP proporciona las siguientes ventajas sobre otros lenguajes de programacioacuten

Uniformidad Ya que la representacioacuten de los objetos lleva implica tanto el anaacutelisis como el disentildeo y la codificacioacuten de los mismos

Comprensioacuten Tanto los datos que componen los objetos como los procedimientos que los manipulan estaacuten agrupados en clases que se corresponden con las estructuras de informacioacuten que el programa trata

Flexibilidad Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar cualquier cambio que se realice sobre ellos quedaraacute reflejado automaacuteticamente en cualquier lugar donde estos datos aparezcan

Estabilidad Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo

Reusabilidad La nocioacuten de objeto permite que programas que traten las mismas estructuras de informacioacuten reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan De esta forma el desarrollo de un programa puede llegar a ser una simple combinacioacuten de objetos ya definidos donde estos estaacuten relacionados de una manera particular

Uno de los puntos clave a remarcar en esta introduccioacuten es que la programacioacuten orientada a objetos no sustituye a ninguna metodologiacutea ni lenguaje de programacioacuten anterior Todos los programas que se realizan seguacuten OOD se pueden realizar igualmente mediante programacioacuten estructurada Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas

basadas en un interface de usuario graacutefico como Windows OS2 x-Windows etc Es mucho maacutes sencillo

OBJETOS

Caracteriacutesticas de los Objetos

Identidad del Objeto

La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos son distintos entre siacute De esta forma incluso una serie de Objetos coches recieacuten fabricados son distintos los unos de los otros

La afirmacioacuten anterior aunque parece obvia tiene importancia cuando descendemos al nivel de programacioacuten En este aacutembito cada uno de los objetos tiene un controlador pro el cual se identifica Este puede ser una variable una estructura de datos una cadena de caracteres etc El controlador seraacute distinto para cada uno de los objeto aunque las referencias a eacutestos sean uniformes e independientes del contenido permitiendo crear agrupaciones de objetos con el mismo tratamiento

Clasificacioacuten

Con la clasificacioacuten comienza la verdadera programacioacuten orientada a objetos Ellos nos obliga a una abstraccioacuten del concepto de objeto denominada clase

Las clases permiten la agrupacioacuten de objetos que comparten las mismas propiedades y comportamiento Si bien clase y objeto suelen usarse como sinoacutenimos no lo son

El esfuerzo del programador ante una aplicacioacuten orientada a objetos se centra en la identificacioacuten de las clases sus atributos y operaciones asociadas

Las propiedades de cada clase deben cumplir una serie de premisas

Las propiedades deber ser significativas dentro del entorno de la aplicacioacuten es decir deben servir para identificar claramente y de una manera uacutenica (y univoca) a cada uno de los objetos

El nuacutemero de propiedades de un objeto debe ser el miacutenimo para realizar todas las operaciones que requiera la aplicacioacuten

Definamos una clase rectaacutengulo Esta clase puede tener como atributos un punto (xy) la anchura (a) y la longitud (l) Las operaciones a realizar son mover agrandar reducir et iquestEs posible realizarlas con las propiedades de la clase

Un anaacutelisis posterior nos indica que es posible la realizacioacuten de estas operaciones con los atributos definidos Pero si incluimos la operacioacuten girar vemos que con las propiedades definidas para la clase esta operacioacuten no se puede realizar Para incluir esta nueva operacioacuten debemos redefinir las propiedades del objeto en este caso las coordenadas de los veacutertices

Encapsulacioacuten y ocultacioacuten de datos

La capacidad de presentacioacuten de informacioacuten dentro de un objeto se divide en dos partes bien diferenciadas

Interna La informacioacuten que necesita el objeto para operar y que es innecesaria para los demaacutes objetos de la aplicacioacuten Estos atributos se denominada privados y tienen como marco de aplicacioacuten uacutenicamente a las operaciones asociadas al objeto

Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos Estas propiedades se denominan puacuteblicas y corresponde a la informacioacuten que necesitan conocer los restantes objetos de la aplicacioacuten respecto del objeto definido para poder operar

Podemos imaginarla encapsulacioacuten como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida Si introducimos datos por la entrada automaacuteticamente obtendraacute un resultado en la salida No necesita conocer ninguacuten detalle del funcionamiento interno de la caja

El teacutermino encapsulacioacuten indica l capacidad que tienen los objetos de construir una caacutepsula a su alrededor ocultando la informacioacuten que contienen (aqueacutella que es necesaria para su funcionamiento interno pero innecesaria para los demaacutes objetos) a las otras clases que componen la aplicacioacuten

Aunque a primera vista la encapsulacioacuten puede parecer superflua tengamos en cuenta que existen muchas variables utilizadas de forma temporal contadores y variables que contienen resultados intermedios etc D no ser por la encapsulacioacuten estas variables ocupariacutean memoria y podriacutean interferir en el funcionamiento del resto de los objetos

La encapsulacioacuten no es exclusiva de los lenguajes de programacioacuten orientados a objetos Aparece en los lenguajes basados en procedimientos (PASCAL C COBOL ETC) como una forma de proteger los datos que se manipulan dentro de las funciones

Los lenguajes OOP incorporan la posibilidad de encapsular tambieacuten las estructuras de datos que sirven como base a las funciones Aportan por tanto un nivel superior en cuanto a proteccioacuten de informacioacuten

La encapsulacioacuten nos permite el uso de libreriacuteas de objetos para el desarrollo de nuestros programas Recordemos que las libreriacuteas son definiciones de objetos de propoacutesito general que se incorporan a los programas Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde estaacute definido ya que contiene y define todo lo que necesita para poder funcionar es faacutecil utilizarlo en los mas variados tipos de aplicaciones Si aseguramos depurando las propiedades y las operaciones dentro de la clase que el objeto funcioacuten bien dentro de una aplicacioacuten con una correcta encapsulacioacuten el objeto podraacute funcionar en cualquier otra

Otra de las ventajas de la encapsulacioacuten es que al definir el objeto como una caja negra con entradas y salida asociadas en cualquier momento podemos cambiar el contenido de las operaciones del objeto de manera que no afecte al funcionamiento general del programa

La encapsulacioacuten estaacute en el nuacutecleo de dos grandes pilares de la construccioacuten de sistemas mantenibilidad y reusabilidad

Mantenibilidad

Cualidad que indica que un programa o sistema debe ser faacutecilmente modificable Es decir que los cambios en las condiciones externas (como la definicioacuten de una nueva variable) implicaraacuten modificaciones pequentildeas en el programa sistema El concepto de mantenibilidad implica que un programa al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante

Reusabilidad

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccioacuten de otros programas Ello implica que los objetos definidos en un programa pueden ser extraiacutedos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el coacutedigo del objeto El objeto final es que el programador construya una libreriacutea de objetos que le permita realizar programas basaacutendose en la teacutecnica de cortar y pegar Esta extrae (corta) coacutedigo de otras aplicaciones ya realizadas y las implementa (pega) en la aplicacioacuten a realizar donde tras algunos retoques la nueva aplicacioacuten estaraacute lista para funcionar Como podraacute observar el concepto de reusabilidad permite reducir el tiempo de realizacioacuten ganando en claridad mantenibilidad y productividad

La encapsulacioacuten de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad con el uacutenico coste adicional de definir con precisioacuten las entradas y salida de nuestras operaciones

Poliformismo

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 13: 2983238 programacion-orientada-a-objetos

9 La relacioacuten de herencia 10 Bibliografiacutea infografiacutea

Introduccioacuten

l teacutermino de Programacioacuten Orientada a Objetos indica maacutes una forma de disentildeo y una metodologiacutea de desarrollo de software que un lenguaje de programacioacuten ya que en realidad se puede aplicar el Disentildeo Orientado a Objetos (En ingleacutes abreviado OOD Object Oriented Design) a cualquier tipo de lenguaje de programacioacuten

El desarrollo de la OOP empieza a destacar durante la deacutecada de lo 80 tomando en cuenta la programacioacuten estructurada a la que engloba y dotando al programador de nuevos elementos para el anaacutelisis y desarrollo de software

El propoacutesito de este trabajo es explicar el disentildeo orientado a objeto y no una explicacioacuten de su programacioacuten puesto que no nos alcanzariacutea toda la curriacutecula para hacerlo

Baacutesicamente la OOP permite a los programadores escribir software de forma que esteacute organizado en la misma manera que el problema que trata de modelizar Los lenguajes de programacioacuten convencionales son poco maacutes que una lista de acciones a realizar sobre un conjunto de datos en una determinada secuencia Si en alguacuten punto del programa modificamos la estructura de los datos o la accioacuten realizada sobre ellos el programa cambia

La OOP aporta un enfoque nuevo convirtiendo la estructura de datos en el centro sobre el que pivotan las operaciones De esta forma cualquier modificacioacuten de la estructura de datos tiene efecto inmediato sobre las acciones a realizar sobre ella

siendo esta una de la diferencias radicales respecto a la programacioacuten estructurada

Para quienes no estaacuten familiarizados con la programacioacuten estructurada direacute que una de las bases de esta escuela de programacioacuten parte del disentildeo arriba ndash abajo En esta forma de disentildeo se descomponen los requerimientos del programa paso a paso hasta llegar a un nivel que permite expresarlos mediante procedimientos y funciones La OOP estructura los datos en objetos que pueden almacenar manipular y combinar informacioacuten

En resumen la programacioacuten estructurada presta atencioacuten al conjunto de acciones que manipulan el flujo de datos (desde la situacioacuten inicial a la final) mientras que la programacioacuten orientada a objetos presta atencioacuten a la interrelacioacuten que existe entre los datos y las acciones a realizar con ellos

Muchos habraacuten oiacutedo comentarios sobre la incidencia de la OOP sobre la programacioacuten convencional Se ha llegado a decir que el cambio introducido por la OOP es similar al producido por la aparicioacuten del ensamblador sobre el coacutedigo de maacutequina

La OOP proporciona las siguientes ventajas sobre otros lenguajes de programacioacuten

Uniformidad Ya que la representacioacuten de los objetos lleva implica tanto el anaacutelisis como el disentildeo y la codificacioacuten de los mismos

Comprensioacuten Tanto los datos que componen los objetos como los procedimientos que los manipulan estaacuten agrupados en clases que se corresponden con las estructuras de informacioacuten que el programa trata

Flexibilidad Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar cualquier cambio que se realice sobre ellos quedaraacute reflejado automaacuteticamente en cualquier lugar donde estos datos aparezcan

Estabilidad Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo

Reusabilidad La nocioacuten de objeto permite que programas que traten las mismas estructuras de informacioacuten reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan De esta forma el desarrollo de un programa puede llegar a ser una simple combinacioacuten de objetos ya definidos donde estos estaacuten relacionados de una manera particular

Uno de los puntos clave a remarcar en esta introduccioacuten es que la programacioacuten orientada a objetos no sustituye a ninguna metodologiacutea ni lenguaje de programacioacuten anterior Todos los programas que se realizan seguacuten OOD se pueden realizar igualmente mediante programacioacuten estructurada Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas

basadas en un interface de usuario graacutefico como Windows OS2 x-Windows etc Es mucho maacutes sencillo

OBJETOS

Caracteriacutesticas de los Objetos

Identidad del Objeto

La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos son distintos entre siacute De esta forma incluso una serie de Objetos coches recieacuten fabricados son distintos los unos de los otros

La afirmacioacuten anterior aunque parece obvia tiene importancia cuando descendemos al nivel de programacioacuten En este aacutembito cada uno de los objetos tiene un controlador pro el cual se identifica Este puede ser una variable una estructura de datos una cadena de caracteres etc El controlador seraacute distinto para cada uno de los objeto aunque las referencias a eacutestos sean uniformes e independientes del contenido permitiendo crear agrupaciones de objetos con el mismo tratamiento

Clasificacioacuten

Con la clasificacioacuten comienza la verdadera programacioacuten orientada a objetos Ellos nos obliga a una abstraccioacuten del concepto de objeto denominada clase

Las clases permiten la agrupacioacuten de objetos que comparten las mismas propiedades y comportamiento Si bien clase y objeto suelen usarse como sinoacutenimos no lo son

El esfuerzo del programador ante una aplicacioacuten orientada a objetos se centra en la identificacioacuten de las clases sus atributos y operaciones asociadas

Las propiedades de cada clase deben cumplir una serie de premisas

Las propiedades deber ser significativas dentro del entorno de la aplicacioacuten es decir deben servir para identificar claramente y de una manera uacutenica (y univoca) a cada uno de los objetos

El nuacutemero de propiedades de un objeto debe ser el miacutenimo para realizar todas las operaciones que requiera la aplicacioacuten

Definamos una clase rectaacutengulo Esta clase puede tener como atributos un punto (xy) la anchura (a) y la longitud (l) Las operaciones a realizar son mover agrandar reducir et iquestEs posible realizarlas con las propiedades de la clase

Un anaacutelisis posterior nos indica que es posible la realizacioacuten de estas operaciones con los atributos definidos Pero si incluimos la operacioacuten girar vemos que con las propiedades definidas para la clase esta operacioacuten no se puede realizar Para incluir esta nueva operacioacuten debemos redefinir las propiedades del objeto en este caso las coordenadas de los veacutertices

Encapsulacioacuten y ocultacioacuten de datos

La capacidad de presentacioacuten de informacioacuten dentro de un objeto se divide en dos partes bien diferenciadas

Interna La informacioacuten que necesita el objeto para operar y que es innecesaria para los demaacutes objetos de la aplicacioacuten Estos atributos se denominada privados y tienen como marco de aplicacioacuten uacutenicamente a las operaciones asociadas al objeto

Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos Estas propiedades se denominan puacuteblicas y corresponde a la informacioacuten que necesitan conocer los restantes objetos de la aplicacioacuten respecto del objeto definido para poder operar

Podemos imaginarla encapsulacioacuten como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida Si introducimos datos por la entrada automaacuteticamente obtendraacute un resultado en la salida No necesita conocer ninguacuten detalle del funcionamiento interno de la caja

El teacutermino encapsulacioacuten indica l capacidad que tienen los objetos de construir una caacutepsula a su alrededor ocultando la informacioacuten que contienen (aqueacutella que es necesaria para su funcionamiento interno pero innecesaria para los demaacutes objetos) a las otras clases que componen la aplicacioacuten

Aunque a primera vista la encapsulacioacuten puede parecer superflua tengamos en cuenta que existen muchas variables utilizadas de forma temporal contadores y variables que contienen resultados intermedios etc D no ser por la encapsulacioacuten estas variables ocupariacutean memoria y podriacutean interferir en el funcionamiento del resto de los objetos

La encapsulacioacuten no es exclusiva de los lenguajes de programacioacuten orientados a objetos Aparece en los lenguajes basados en procedimientos (PASCAL C COBOL ETC) como una forma de proteger los datos que se manipulan dentro de las funciones

Los lenguajes OOP incorporan la posibilidad de encapsular tambieacuten las estructuras de datos que sirven como base a las funciones Aportan por tanto un nivel superior en cuanto a proteccioacuten de informacioacuten

La encapsulacioacuten nos permite el uso de libreriacuteas de objetos para el desarrollo de nuestros programas Recordemos que las libreriacuteas son definiciones de objetos de propoacutesito general que se incorporan a los programas Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde estaacute definido ya que contiene y define todo lo que necesita para poder funcionar es faacutecil utilizarlo en los mas variados tipos de aplicaciones Si aseguramos depurando las propiedades y las operaciones dentro de la clase que el objeto funcioacuten bien dentro de una aplicacioacuten con una correcta encapsulacioacuten el objeto podraacute funcionar en cualquier otra

Otra de las ventajas de la encapsulacioacuten es que al definir el objeto como una caja negra con entradas y salida asociadas en cualquier momento podemos cambiar el contenido de las operaciones del objeto de manera que no afecte al funcionamiento general del programa

La encapsulacioacuten estaacute en el nuacutecleo de dos grandes pilares de la construccioacuten de sistemas mantenibilidad y reusabilidad

Mantenibilidad

Cualidad que indica que un programa o sistema debe ser faacutecilmente modificable Es decir que los cambios en las condiciones externas (como la definicioacuten de una nueva variable) implicaraacuten modificaciones pequentildeas en el programa sistema El concepto de mantenibilidad implica que un programa al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante

Reusabilidad

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccioacuten de otros programas Ello implica que los objetos definidos en un programa pueden ser extraiacutedos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el coacutedigo del objeto El objeto final es que el programador construya una libreriacutea de objetos que le permita realizar programas basaacutendose en la teacutecnica de cortar y pegar Esta extrae (corta) coacutedigo de otras aplicaciones ya realizadas y las implementa (pega) en la aplicacioacuten a realizar donde tras algunos retoques la nueva aplicacioacuten estaraacute lista para funcionar Como podraacute observar el concepto de reusabilidad permite reducir el tiempo de realizacioacuten ganando en claridad mantenibilidad y productividad

La encapsulacioacuten de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad con el uacutenico coste adicional de definir con precisioacuten las entradas y salida de nuestras operaciones

Poliformismo

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 14: 2983238 programacion-orientada-a-objetos

siendo esta una de la diferencias radicales respecto a la programacioacuten estructurada

Para quienes no estaacuten familiarizados con la programacioacuten estructurada direacute que una de las bases de esta escuela de programacioacuten parte del disentildeo arriba ndash abajo En esta forma de disentildeo se descomponen los requerimientos del programa paso a paso hasta llegar a un nivel que permite expresarlos mediante procedimientos y funciones La OOP estructura los datos en objetos que pueden almacenar manipular y combinar informacioacuten

En resumen la programacioacuten estructurada presta atencioacuten al conjunto de acciones que manipulan el flujo de datos (desde la situacioacuten inicial a la final) mientras que la programacioacuten orientada a objetos presta atencioacuten a la interrelacioacuten que existe entre los datos y las acciones a realizar con ellos

Muchos habraacuten oiacutedo comentarios sobre la incidencia de la OOP sobre la programacioacuten convencional Se ha llegado a decir que el cambio introducido por la OOP es similar al producido por la aparicioacuten del ensamblador sobre el coacutedigo de maacutequina

La OOP proporciona las siguientes ventajas sobre otros lenguajes de programacioacuten

Uniformidad Ya que la representacioacuten de los objetos lleva implica tanto el anaacutelisis como el disentildeo y la codificacioacuten de los mismos

Comprensioacuten Tanto los datos que componen los objetos como los procedimientos que los manipulan estaacuten agrupados en clases que se corresponden con las estructuras de informacioacuten que el programa trata

Flexibilidad Al tener relacionados los procedimientos que manipulan los datos con los datos a tratar cualquier cambio que se realice sobre ellos quedaraacute reflejado automaacuteticamente en cualquier lugar donde estos datos aparezcan

Estabilidad Dado que permite un tratamiento diferenciado de aquellos objetos que permanecen constantes en el tiempo sobre aquellos que cambian con frecuencia permite aislar las partes del programa que permanecen inalterables en el tiempo

Reusabilidad La nocioacuten de objeto permite que programas que traten las mismas estructuras de informacioacuten reutilicen las definiciones de objetos empleadas en otros programas e incluso los procedimientos que los manipulan De esta forma el desarrollo de un programa puede llegar a ser una simple combinacioacuten de objetos ya definidos donde estos estaacuten relacionados de una manera particular

Uno de los puntos clave a remarcar en esta introduccioacuten es que la programacioacuten orientada a objetos no sustituye a ninguna metodologiacutea ni lenguaje de programacioacuten anterior Todos los programas que se realizan seguacuten OOD se pueden realizar igualmente mediante programacioacuten estructurada Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas

basadas en un interface de usuario graacutefico como Windows OS2 x-Windows etc Es mucho maacutes sencillo

OBJETOS

Caracteriacutesticas de los Objetos

Identidad del Objeto

La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos son distintos entre siacute De esta forma incluso una serie de Objetos coches recieacuten fabricados son distintos los unos de los otros

La afirmacioacuten anterior aunque parece obvia tiene importancia cuando descendemos al nivel de programacioacuten En este aacutembito cada uno de los objetos tiene un controlador pro el cual se identifica Este puede ser una variable una estructura de datos una cadena de caracteres etc El controlador seraacute distinto para cada uno de los objeto aunque las referencias a eacutestos sean uniformes e independientes del contenido permitiendo crear agrupaciones de objetos con el mismo tratamiento

Clasificacioacuten

Con la clasificacioacuten comienza la verdadera programacioacuten orientada a objetos Ellos nos obliga a una abstraccioacuten del concepto de objeto denominada clase

Las clases permiten la agrupacioacuten de objetos que comparten las mismas propiedades y comportamiento Si bien clase y objeto suelen usarse como sinoacutenimos no lo son

El esfuerzo del programador ante una aplicacioacuten orientada a objetos se centra en la identificacioacuten de las clases sus atributos y operaciones asociadas

Las propiedades de cada clase deben cumplir una serie de premisas

Las propiedades deber ser significativas dentro del entorno de la aplicacioacuten es decir deben servir para identificar claramente y de una manera uacutenica (y univoca) a cada uno de los objetos

El nuacutemero de propiedades de un objeto debe ser el miacutenimo para realizar todas las operaciones que requiera la aplicacioacuten

Definamos una clase rectaacutengulo Esta clase puede tener como atributos un punto (xy) la anchura (a) y la longitud (l) Las operaciones a realizar son mover agrandar reducir et iquestEs posible realizarlas con las propiedades de la clase

Un anaacutelisis posterior nos indica que es posible la realizacioacuten de estas operaciones con los atributos definidos Pero si incluimos la operacioacuten girar vemos que con las propiedades definidas para la clase esta operacioacuten no se puede realizar Para incluir esta nueva operacioacuten debemos redefinir las propiedades del objeto en este caso las coordenadas de los veacutertices

Encapsulacioacuten y ocultacioacuten de datos

La capacidad de presentacioacuten de informacioacuten dentro de un objeto se divide en dos partes bien diferenciadas

Interna La informacioacuten que necesita el objeto para operar y que es innecesaria para los demaacutes objetos de la aplicacioacuten Estos atributos se denominada privados y tienen como marco de aplicacioacuten uacutenicamente a las operaciones asociadas al objeto

Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos Estas propiedades se denominan puacuteblicas y corresponde a la informacioacuten que necesitan conocer los restantes objetos de la aplicacioacuten respecto del objeto definido para poder operar

Podemos imaginarla encapsulacioacuten como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida Si introducimos datos por la entrada automaacuteticamente obtendraacute un resultado en la salida No necesita conocer ninguacuten detalle del funcionamiento interno de la caja

El teacutermino encapsulacioacuten indica l capacidad que tienen los objetos de construir una caacutepsula a su alrededor ocultando la informacioacuten que contienen (aqueacutella que es necesaria para su funcionamiento interno pero innecesaria para los demaacutes objetos) a las otras clases que componen la aplicacioacuten

Aunque a primera vista la encapsulacioacuten puede parecer superflua tengamos en cuenta que existen muchas variables utilizadas de forma temporal contadores y variables que contienen resultados intermedios etc D no ser por la encapsulacioacuten estas variables ocupariacutean memoria y podriacutean interferir en el funcionamiento del resto de los objetos

La encapsulacioacuten no es exclusiva de los lenguajes de programacioacuten orientados a objetos Aparece en los lenguajes basados en procedimientos (PASCAL C COBOL ETC) como una forma de proteger los datos que se manipulan dentro de las funciones

Los lenguajes OOP incorporan la posibilidad de encapsular tambieacuten las estructuras de datos que sirven como base a las funciones Aportan por tanto un nivel superior en cuanto a proteccioacuten de informacioacuten

La encapsulacioacuten nos permite el uso de libreriacuteas de objetos para el desarrollo de nuestros programas Recordemos que las libreriacuteas son definiciones de objetos de propoacutesito general que se incorporan a los programas Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde estaacute definido ya que contiene y define todo lo que necesita para poder funcionar es faacutecil utilizarlo en los mas variados tipos de aplicaciones Si aseguramos depurando las propiedades y las operaciones dentro de la clase que el objeto funcioacuten bien dentro de una aplicacioacuten con una correcta encapsulacioacuten el objeto podraacute funcionar en cualquier otra

Otra de las ventajas de la encapsulacioacuten es que al definir el objeto como una caja negra con entradas y salida asociadas en cualquier momento podemos cambiar el contenido de las operaciones del objeto de manera que no afecte al funcionamiento general del programa

La encapsulacioacuten estaacute en el nuacutecleo de dos grandes pilares de la construccioacuten de sistemas mantenibilidad y reusabilidad

Mantenibilidad

Cualidad que indica que un programa o sistema debe ser faacutecilmente modificable Es decir que los cambios en las condiciones externas (como la definicioacuten de una nueva variable) implicaraacuten modificaciones pequentildeas en el programa sistema El concepto de mantenibilidad implica que un programa al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante

Reusabilidad

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccioacuten de otros programas Ello implica que los objetos definidos en un programa pueden ser extraiacutedos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el coacutedigo del objeto El objeto final es que el programador construya una libreriacutea de objetos que le permita realizar programas basaacutendose en la teacutecnica de cortar y pegar Esta extrae (corta) coacutedigo de otras aplicaciones ya realizadas y las implementa (pega) en la aplicacioacuten a realizar donde tras algunos retoques la nueva aplicacioacuten estaraacute lista para funcionar Como podraacute observar el concepto de reusabilidad permite reducir el tiempo de realizacioacuten ganando en claridad mantenibilidad y productividad

La encapsulacioacuten de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad con el uacutenico coste adicional de definir con precisioacuten las entradas y salida de nuestras operaciones

Poliformismo

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 15: 2983238 programacion-orientada-a-objetos

basadas en un interface de usuario graacutefico como Windows OS2 x-Windows etc Es mucho maacutes sencillo

OBJETOS

Caracteriacutesticas de los Objetos

Identidad del Objeto

La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos son distintos entre siacute De esta forma incluso una serie de Objetos coches recieacuten fabricados son distintos los unos de los otros

La afirmacioacuten anterior aunque parece obvia tiene importancia cuando descendemos al nivel de programacioacuten En este aacutembito cada uno de los objetos tiene un controlador pro el cual se identifica Este puede ser una variable una estructura de datos una cadena de caracteres etc El controlador seraacute distinto para cada uno de los objeto aunque las referencias a eacutestos sean uniformes e independientes del contenido permitiendo crear agrupaciones de objetos con el mismo tratamiento

Clasificacioacuten

Con la clasificacioacuten comienza la verdadera programacioacuten orientada a objetos Ellos nos obliga a una abstraccioacuten del concepto de objeto denominada clase

Las clases permiten la agrupacioacuten de objetos que comparten las mismas propiedades y comportamiento Si bien clase y objeto suelen usarse como sinoacutenimos no lo son

El esfuerzo del programador ante una aplicacioacuten orientada a objetos se centra en la identificacioacuten de las clases sus atributos y operaciones asociadas

Las propiedades de cada clase deben cumplir una serie de premisas

Las propiedades deber ser significativas dentro del entorno de la aplicacioacuten es decir deben servir para identificar claramente y de una manera uacutenica (y univoca) a cada uno de los objetos

El nuacutemero de propiedades de un objeto debe ser el miacutenimo para realizar todas las operaciones que requiera la aplicacioacuten

Definamos una clase rectaacutengulo Esta clase puede tener como atributos un punto (xy) la anchura (a) y la longitud (l) Las operaciones a realizar son mover agrandar reducir et iquestEs posible realizarlas con las propiedades de la clase

Un anaacutelisis posterior nos indica que es posible la realizacioacuten de estas operaciones con los atributos definidos Pero si incluimos la operacioacuten girar vemos que con las propiedades definidas para la clase esta operacioacuten no se puede realizar Para incluir esta nueva operacioacuten debemos redefinir las propiedades del objeto en este caso las coordenadas de los veacutertices

Encapsulacioacuten y ocultacioacuten de datos

La capacidad de presentacioacuten de informacioacuten dentro de un objeto se divide en dos partes bien diferenciadas

Interna La informacioacuten que necesita el objeto para operar y que es innecesaria para los demaacutes objetos de la aplicacioacuten Estos atributos se denominada privados y tienen como marco de aplicacioacuten uacutenicamente a las operaciones asociadas al objeto

Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos Estas propiedades se denominan puacuteblicas y corresponde a la informacioacuten que necesitan conocer los restantes objetos de la aplicacioacuten respecto del objeto definido para poder operar

Podemos imaginarla encapsulacioacuten como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida Si introducimos datos por la entrada automaacuteticamente obtendraacute un resultado en la salida No necesita conocer ninguacuten detalle del funcionamiento interno de la caja

El teacutermino encapsulacioacuten indica l capacidad que tienen los objetos de construir una caacutepsula a su alrededor ocultando la informacioacuten que contienen (aqueacutella que es necesaria para su funcionamiento interno pero innecesaria para los demaacutes objetos) a las otras clases que componen la aplicacioacuten

Aunque a primera vista la encapsulacioacuten puede parecer superflua tengamos en cuenta que existen muchas variables utilizadas de forma temporal contadores y variables que contienen resultados intermedios etc D no ser por la encapsulacioacuten estas variables ocupariacutean memoria y podriacutean interferir en el funcionamiento del resto de los objetos

La encapsulacioacuten no es exclusiva de los lenguajes de programacioacuten orientados a objetos Aparece en los lenguajes basados en procedimientos (PASCAL C COBOL ETC) como una forma de proteger los datos que se manipulan dentro de las funciones

Los lenguajes OOP incorporan la posibilidad de encapsular tambieacuten las estructuras de datos que sirven como base a las funciones Aportan por tanto un nivel superior en cuanto a proteccioacuten de informacioacuten

La encapsulacioacuten nos permite el uso de libreriacuteas de objetos para el desarrollo de nuestros programas Recordemos que las libreriacuteas son definiciones de objetos de propoacutesito general que se incorporan a los programas Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde estaacute definido ya que contiene y define todo lo que necesita para poder funcionar es faacutecil utilizarlo en los mas variados tipos de aplicaciones Si aseguramos depurando las propiedades y las operaciones dentro de la clase que el objeto funcioacuten bien dentro de una aplicacioacuten con una correcta encapsulacioacuten el objeto podraacute funcionar en cualquier otra

Otra de las ventajas de la encapsulacioacuten es que al definir el objeto como una caja negra con entradas y salida asociadas en cualquier momento podemos cambiar el contenido de las operaciones del objeto de manera que no afecte al funcionamiento general del programa

La encapsulacioacuten estaacute en el nuacutecleo de dos grandes pilares de la construccioacuten de sistemas mantenibilidad y reusabilidad

Mantenibilidad

Cualidad que indica que un programa o sistema debe ser faacutecilmente modificable Es decir que los cambios en las condiciones externas (como la definicioacuten de una nueva variable) implicaraacuten modificaciones pequentildeas en el programa sistema El concepto de mantenibilidad implica que un programa al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante

Reusabilidad

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccioacuten de otros programas Ello implica que los objetos definidos en un programa pueden ser extraiacutedos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el coacutedigo del objeto El objeto final es que el programador construya una libreriacutea de objetos que le permita realizar programas basaacutendose en la teacutecnica de cortar y pegar Esta extrae (corta) coacutedigo de otras aplicaciones ya realizadas y las implementa (pega) en la aplicacioacuten a realizar donde tras algunos retoques la nueva aplicacioacuten estaraacute lista para funcionar Como podraacute observar el concepto de reusabilidad permite reducir el tiempo de realizacioacuten ganando en claridad mantenibilidad y productividad

La encapsulacioacuten de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad con el uacutenico coste adicional de definir con precisioacuten las entradas y salida de nuestras operaciones

Poliformismo

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 16: 2983238 programacion-orientada-a-objetos

La capacidad de presentacioacuten de informacioacuten dentro de un objeto se divide en dos partes bien diferenciadas

Interna La informacioacuten que necesita el objeto para operar y que es innecesaria para los demaacutes objetos de la aplicacioacuten Estos atributos se denominada privados y tienen como marco de aplicacioacuten uacutenicamente a las operaciones asociadas al objeto

Externa La que necesitan el resto de los objetos para interactuar con el objeto que definimos Estas propiedades se denominan puacuteblicas y corresponde a la informacioacuten que necesitan conocer los restantes objetos de la aplicacioacuten respecto del objeto definido para poder operar

Podemos imaginarla encapsulacioacuten como introducir el objeto dentro de una caja negra donde existen dos ranuras denominadas entrada y salida Si introducimos datos por la entrada automaacuteticamente obtendraacute un resultado en la salida No necesita conocer ninguacuten detalle del funcionamiento interno de la caja

El teacutermino encapsulacioacuten indica l capacidad que tienen los objetos de construir una caacutepsula a su alrededor ocultando la informacioacuten que contienen (aqueacutella que es necesaria para su funcionamiento interno pero innecesaria para los demaacutes objetos) a las otras clases que componen la aplicacioacuten

Aunque a primera vista la encapsulacioacuten puede parecer superflua tengamos en cuenta que existen muchas variables utilizadas de forma temporal contadores y variables que contienen resultados intermedios etc D no ser por la encapsulacioacuten estas variables ocupariacutean memoria y podriacutean interferir en el funcionamiento del resto de los objetos

La encapsulacioacuten no es exclusiva de los lenguajes de programacioacuten orientados a objetos Aparece en los lenguajes basados en procedimientos (PASCAL C COBOL ETC) como una forma de proteger los datos que se manipulan dentro de las funciones

Los lenguajes OOP incorporan la posibilidad de encapsular tambieacuten las estructuras de datos que sirven como base a las funciones Aportan por tanto un nivel superior en cuanto a proteccioacuten de informacioacuten

La encapsulacioacuten nos permite el uso de libreriacuteas de objetos para el desarrollo de nuestros programas Recordemos que las libreriacuteas son definiciones de objetos de propoacutesito general que se incorporan a los programas Al ser el objeto parcialmente independiente en su funcionamiento del programa en donde estaacute definido ya que contiene y define todo lo que necesita para poder funcionar es faacutecil utilizarlo en los mas variados tipos de aplicaciones Si aseguramos depurando las propiedades y las operaciones dentro de la clase que el objeto funcioacuten bien dentro de una aplicacioacuten con una correcta encapsulacioacuten el objeto podraacute funcionar en cualquier otra

Otra de las ventajas de la encapsulacioacuten es que al definir el objeto como una caja negra con entradas y salida asociadas en cualquier momento podemos cambiar el contenido de las operaciones del objeto de manera que no afecte al funcionamiento general del programa

La encapsulacioacuten estaacute en el nuacutecleo de dos grandes pilares de la construccioacuten de sistemas mantenibilidad y reusabilidad

Mantenibilidad

Cualidad que indica que un programa o sistema debe ser faacutecilmente modificable Es decir que los cambios en las condiciones externas (como la definicioacuten de una nueva variable) implicaraacuten modificaciones pequentildeas en el programa sistema El concepto de mantenibilidad implica que un programa al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante

Reusabilidad

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccioacuten de otros programas Ello implica que los objetos definidos en un programa pueden ser extraiacutedos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el coacutedigo del objeto El objeto final es que el programador construya una libreriacutea de objetos que le permita realizar programas basaacutendose en la teacutecnica de cortar y pegar Esta extrae (corta) coacutedigo de otras aplicaciones ya realizadas y las implementa (pega) en la aplicacioacuten a realizar donde tras algunos retoques la nueva aplicacioacuten estaraacute lista para funcionar Como podraacute observar el concepto de reusabilidad permite reducir el tiempo de realizacioacuten ganando en claridad mantenibilidad y productividad

La encapsulacioacuten de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad con el uacutenico coste adicional de definir con precisioacuten las entradas y salida de nuestras operaciones

Poliformismo

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 17: 2983238 programacion-orientada-a-objetos

La encapsulacioacuten estaacute en el nuacutecleo de dos grandes pilares de la construccioacuten de sistemas mantenibilidad y reusabilidad

Mantenibilidad

Cualidad que indica que un programa o sistema debe ser faacutecilmente modificable Es decir que los cambios en las condiciones externas (como la definicioacuten de una nueva variable) implicaraacuten modificaciones pequentildeas en el programa sistema El concepto de mantenibilidad implica que un programa al igual que un ser vivo debe ser capaz de adaptarse a un medio ambiente siempre cambiante

Reusabilidad

Cualidad que nos indica que partes del programa ( en este caso objetos) pueden ser reutilizados en la confeccioacuten de otros programas Ello implica que los objetos definidos en un programa pueden ser extraiacutedos del mismo e implantados en otro sin tener que realizar modificaciones importantes en el coacutedigo del objeto El objeto final es que el programador construya una libreriacutea de objetos que le permita realizar programas basaacutendose en la teacutecnica de cortar y pegar Esta extrae (corta) coacutedigo de otras aplicaciones ya realizadas y las implementa (pega) en la aplicacioacuten a realizar donde tras algunos retoques la nueva aplicacioacuten estaraacute lista para funcionar Como podraacute observar el concepto de reusabilidad permite reducir el tiempo de realizacioacuten ganando en claridad mantenibilidad y productividad

La encapsulacioacuten de datos se muestra como una herramienta poderosa que nos permite ganar en tiempo de desarrollo y claridad con el uacutenico coste adicional de definir con precisioacuten las entradas y salida de nuestras operaciones

Poliformismo

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 18: 2983238 programacion-orientada-a-objetos

El polimorfismo es una nueva caracteriacutestica aportada por la OOP Esta propiedad indica la posibilidad de definir varias operaciones con el mismo nombre diferenciaacutendolas uacutenicamente en los paraacutemetros de entrada Dependiendo del objeto que se introduzca como paraacutemetro de entrada se elegiraacute automaacuteticamente cual de las operaciones se va a realizar

Ya estaacute habituado al operador ltltsumagtgt que estaacute presente en todos los lenguajes de programacioacuten Sin embargo los operadores ltltsuma de fraccionesgtgt y ltltsuma de nuacutemeros complejosgtgt no existen en casi ninguacuten lenguaje de programacioacuten

Los lenguajes OOP permiten definir un operador ltltsumagtgt tal que reconozca que tipo de objeto se le estaacute aplicando a traveacutes de operaciones de objetos Previamente deberaacute definir la fraccioacuten y el nuacutemero complejo como una clase y la operacioacuten suma como una operacioacuten de una clase

Definiendo adecuadamente las operaciones suma de fracciones y suma de nuacutemeros imaginarios el operador suma devolveraacute en el caso que los operandos sean fracciones una fraccioacuten y en el caso de los nuacutemeros imaginarios otros nuacutemero imaginario

Es posible extender el concepto e incluso definir operaciones como suma de bases de datos

El operador suma de base de datos Aunque a primera vista la expresioacuten C= A+B siendo A y B bases de datos nos pudiera parecer una extraordinaria simplificacioacuten nos conduce a la pregunta iquestQueacute es la suma de una base d datos

Consideremos varias posibilidades

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 19: 2983238 programacion-orientada-a-objetos

Introduccioacuten de registros Lo que exige que A y B tengan la misma estructura

Unioacuten de campos Aquellos campos que aparezcan en B pero no en A seraacuten antildeadidos a C

iquestAlguna de estas dos opciones es verdaderamente una suma Es decir iquestCumple las propiedades conmutativa asociativa de elemento neutro etc iquestQueacute ocurre si sumo dos bases de datos con estructuras distintas

Como puede observar la definicioacuten de un operador sobre un tipo complejo de datos intentando utilizar identificadores de operadores de datos simples puede tener resultados impredecibles

Una de las ventajas maacutes importantes sin entrar en la redefinicioacuten de operadores es permitir la realizacioacuten de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan Gracias a la encapsulacioacuten y el polimorfismo aunque se utilicen los mismos nombre con las operaciones en dos clases distintas el programa reconoce a que clase se aplica durante la ejecucioacuten

Como se podraacute observar el polimorfismo y la encapsulacioacuten de datos estaacuten iacutentimamente ligados y nos permiten un mayor grado de mantenibilidad y reusabilidad que los lenguajes tradicionales Esta ese precisamente una de las causas de la revolucioacuten que ha supuesto la introduccioacuten de los lenguajes orientados a objetos dentro de la programacioacuten

Herencia

La herencia es la uacuteltima de las propiedades relativas a la OOP Consiste en la propagacioacuten de los atributos y las operaciones a traveacutes de distintas sub-clases definidas a partir de una clase comuacuten

Introduce por tanto una posibilidad de refinamiento sucesivo del concepto de clase Nos permite definir una clase principal y a traveacutes de sucesivas aproximaciones cualquier caracteriacutestica de los objetos A partir de ahora definiremos como sub-clases todas aquellas clases obtenidas mediante refinamiento de una (o varias) clases principales

La herencia nos permite crear estructuras jeraacuterquicas de clases donde es posible la creacioacuten de sub-clases que incluyan nuevas propiedades y atributos Estas sub-clases admiten la definicioacuten de nuevos atributos asiacute como crear modificar o inhabilitar propiedades

Para pensarlo de manera maacutes faacutecil podemos abstraernos al siguiente ejemplo

Pensemos en los distintos sub-modelo s asociados a un modelo baacutesico de automoacutevil A partir de este modelo baacutesico los fabricantes introducen distintas caracteriacutesticas (aire acondicionado ABS distintas tapiceriacuteas acabados etc) que crean sub ndash clases Todas estas sub-clases tienen en comuacuten la estructura baacutesica (chasis direccioacuten etc) u variacutean soacutelo en algunos de sus componentes

Asociemos a este tipo baacutesico una clase cuyos atributos representen las piezas que componen el coche Las sub-clases aportaraacuten sus propios atributos (en el caso de

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 20: 2983238 programacion-orientada-a-objetos

vehiacuteculos con aire acondicionado todos aquellas piezas que lo componen) permitiendo la definicioacuten de todos los posibles modelos

Ademaacutes es posible que una sub-clase herede atributos y propiedades de maacutes de una clase Este proceso se denomina herencia muacuteltiple y lo veremos con maacutes detalle en capiacutetulos posteriores

La herencia es sin duda alguna una de las propiedades maacutes importantes de la OOP ya que permite a traveacutes de la definicioacuten de una clase baacutesica ir antildeadiendo propiedades a medida que sean necesarias y ademaacutes en el sub-conjunto de objetos que sea preciso

La herencia permite que los objetos pueden compartir datos y comportamientos a traveacutes de las diferentes sub-clases sin incurrir en redundancia Maacutes importante que el ahorro de coacutedigo es la claridad que aporta al identificar que las distintas operaciones sobre los objetos son en realidad una misma cosa

Conclusioacuten

Identidad clasificacioacuten polimorfismo y herencia caracterizan a los lenguajes orientados a objetos Cada uno de estos conceptos puede utilizarse aisladamente incluso aparecen en otras metodologiacuteas de programacioacuten pero juntos se complementan en una relacioacuten sineacutergica Los beneficios de la programacioacuten orientada a objetos son maacutes que los que pueden verse a simple vista El eacutenfasis en las propiedades esenciales de un objeto fuerza al desarrollador a pensar cuidadosamente que es un objeto y que es lo que hace con el resultado de que el sistema es normalmente maacutes preciso general y robusto que si pusieacuteramos el eacutenfasis en los procedimientos y los datos por separado

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 21: 2983238 programacion-orientada-a-objetos

Construccioacuten de clases

Tal como hemos definido con anterioridad una clase de objeto describe a un grupo de objetos con similares

o Propiedades (atributos) o Comportamientos (operaciones) o Relaciones con otros objetos

La abreviatura clase es utilizada en lugar de clase de objetos Los objetos difieren en los valores asociados a sus atributos definidos dentro de la clase Cada objeto ltltconocegtgt cuaacutel es su clase La mayoriacutea de los lenguajes orientados a objetos pueden determinar a que clase pertenece un objeto durante la ejecucioacuten del programa

A continuacioacuten expondremos una serie de pasos para definir una clase

Identificar los objetos

Para ello examine la aplicacioacuten e identifique las distintas estructuras de datos algunos tips a tener en cuenta son los siguientes

bull El nombre de la aplicacioacuten a veces nos da la del nombre del objeto principal bull Los objetos software pueden imitar el mundo real modelizando las

propiedades de los objetos a traveacutes de variables Cualquier propiedad de un objeto puede ser identificada dentro del objeto correspondiente a traveacutes de variables

bull Los objetos no se han de corresponder siempre con objetos fiacutesicos sino que tambieacuten pueden ser entidades que se utilizan dentro de la construccioacuten del programa

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 22: 2983238 programacion-orientada-a-objetos

bull Piense en el objeto en ltltprimera personagtgt Este truco nos puede identificar claramente los atributos y sus operaciones asociadas ltltSoy un cuadrado y me muevo giro agrando y reduzco Las partes que me componen son los puntos de mis veacuterticesgtgt

bull Una clase es un tipo de dato que puede ser usado para declarar objetos de la misma forma que una estructura es un tipo definido por el usuario que puede utilizarse para declarar variables

Definir las operaciones

Defina las operaciones a partir de los objetos examinando las distintas operaciones asociadas a un conjunto de datos Los atributos del objeto se deben definir de tal manera que eacutestos satisfagan todos los requerimientos de cada una de las operaciones

A estas operaciones antildeada dos maacutes Crear y Destruir Estas operaciones nos serviraacuten para inicializar y borrar el objeto dentro de la aplicacioacuten

A partir de la definicioacuten de las propiedades un objeto siempre debe ser capaz de responder a estas tres preguntas iquestQueacute soy iquestQueacute hago iquestQueacute dejo ver al resto del mundo

Algunas de las operaciones soacutelo se aplicaraacuten a determinados objetos pertenecientes a las clases Hemos visto que a traveacutes de la herencia podemos ltltespecializargtgt un sub conjunto de objetos creando una sub-clase

Uacutenicamente aquellas operaciones que sean comunes a todos los objetos de la clase deben incluirse dentro de las operaciones de la clase El resto que corresponden a las operaciones de sub-Grupos de objetos se deben definir dentro de la especializaciones de la clase

Definir los atributos de los objetos

Una vez identificados los objetos defina los atributos de la clase Un atributo es un valor almacenado en los objetos de la clase

Aplicaciones orientadas a objetos

A lo largo de la historia de la programacioacuten los lenguajes y las metodologiacuteas han pasado de una relativa simplicidad a una complejidad creciente Los lenguajes de programacioacuten orientados a objetos pretenden aportar simplicidad a la tarea de programacioacuten de grandes aplicaciones

Cuando se crearon las primeras computadoras todaviacutea no existiacutean los lenguajes de programacioacuten tal como ahora los entendemos El lenguaje ensamblador puede considerarse como el primer lenguaje de programacioacuten propiamente dicho Permitiacutea al usuario un diaacutelogo maacutes fluido con la maacutequina a traveacutes de instrucciones que teniacutean relacioacuten directa con el conjunto de operaciones que la maacutequina podiacutea realizar

A partir de este momento empezoacute la evolucioacuten de los lenguajes de programacioacuten _cada uno teniacutea su entorno definido y aunque en realidad todos los lenguajes son

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 23: 2983238 programacion-orientada-a-objetos

polivalentes (en teoriacutea con cualquiera de ellos se puede desarrollar cualquier programa de gestioacuten o cientiacutefico) Pronto aparecioacute la especializacioacuten funcional Asiacute COBOL (Common Business Orientated Language) se introdujo como lenguaje mainframe para el disentildeo de aplicaciones de gestioacuten FORTRAN (Formula Translator) para el disentildeo de aplicaciones cientiacuteficas APL (A Programming Language) para el caacutelculo matemaacutetico etc

A medida que el software tomaba importancia aparecieron los primeros problemas relacionados con la programacioacuten Al tiempo que aumenta el volumen de un programa disminuye el control del mismo por parte del programador y la capacidad de este de dar mantenimiento

En un intento de solucionar estos problemas aparecen las metodologiacuteas de programacioacuten Una metodologiacutea es un conjunto de reglas destinadas a simplificar las tareas de disentildeo estimacioacuten de costes desarrollo y mantenimiento de un sistema informaacutetico A menudo se ven acompantildeadas con unas herramientas (CASE Computer Aided Software Engeneering) que permiten la elaboracioacuten estructurada y documentada de los sistemas informaacuteticos

DISENtildeO DE APLICACIONES Y ELECCIOacuteN DE ENTORNO

En entorno de programacioacuten implica tanto el lenguaje de programacioacuten como al empleo de una determinada metodologiacutea

Los lenguajes de programacioacuten no se producen por generacioacuten espontaacutenea y se ven influidos en gran manera por la forma en la que los profesionales piensan que se debe programar De esta manera se crea un conjunto de reglas para simplificar la tarea de programacioacuten Generalizadas y codificadas se convierten en ltltprincipiosgtgt de los que surgen los lenguajes de programacioacuten en un afaacuten por darles soporte

Estos ltltprincipiosgtgt son modelos que proporcionan teacutecnicas que a su vez deben aplicarse en el disentildeo e implementacioacuten de los programas Estas teacutecnicas nos indican la forma de resolver los distintos problemas que surgen a la hora de programar

Decimos que un lenguaje de programacioacuten ltltsoportagtgt un conjunto de ltltprincipiosgtgt si el lenguaje simplifica la aplicacioacuten de estas teacutecnicas A estos ltltprincipiosgtgt se les denomina metodologiacuteas de programacioacuten

Las metodologiacuteas de programacioacuten son modelos sobre como disentildear e implementar los programas Diferentes modelos tienen como resultado diferentes teacutecnicas Que cada teacutecnica sea distinta no implica que una sea la verdadera y que las demaacutes falsas Por el contrario las metodologiacuteas se complementan entre siacute Lo que todas las metodologiacuteas tienen en comuacuten es la premisa de que hay que partir de abstracciones que corresponden a elementos del problema a resolver y que la implementacioacuten de la solucioacuten se debe realizar mediante un conjunto de moacutedulos preferiblemente reutilizables

Las metodologiacuteas orientadas a objetos se centran en las estructuras de datos que sin embargo se relegan a un segundo plano en los modelos procedurales La base de esta metodologiacutea es que una estructura de datos debe contener las operaciones

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 24: 2983238 programacion-orientada-a-objetos

que los modifican La teacutecnica que se utiliza para obtener esta ltltabstraccioacuten de datosgtgt es la encapsulacioacuten de los mismos en una estructura conocida como clase

El accesos a los datos contenidos en la clase se realiza mediante las operaciones que la propia clase define Por tanto la metodologiacutea orientada a objetos complementa el punto de vista procedural de operaciones realizadas sobre un flujo de datos al asociar a cada dato el conjunto de operaciones que lo modifican Como podraacute ver ambos enfoques son complementarios

Para ilustrar las diferencias entre las aproximaciones orientadas a procedimientos y las orientadas a objetos considere el disentildeo de un ltltcompiladorgtgt

El compilador es un programa que a partir de un conjunto de fichero fuente (programa) construye el coacutedigo objeto que posteriormente se convierte en programa Para realizar su trabajo el compilador lee el fichero fuente y separa de eacutel las variables y las instrucciones Las variables constituyen la tabla de siacutembolos del programa mientras que las instrucciones se organizan en un aacuterbol sintaacutectico donde se plasman todas la referencias que realizan los mandatos y funciones entre siacute

El modelo mejor establecido es el basado en funciones (procedural) que trata de la construccioacuten de un programa como una coleccioacuten de funciones Las metodologiacuteas proporcionan una gruiacutea sobre coacutemo disentildear organizar e implementar las funciones que componen un programa El meacutetodo de disentildeo es la descomposicioacuten funcional que identifica las funciones como los pasos a seguir en la resolucioacuten de un problema La organizacioacuten en archivos permite que las funciones se agrupen moacutedulos separados mientras que las teacutecnicas de

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 25: 2983238 programacion-orientada-a-objetos

programacioacuten estructurada permiten que las implementaciones de las funciones sean faacuteciles de consultar y mantener

La programacioacuten orientada a objetos estaacute basada en un modelo de construcciones de programas como un conjunto de clases El disentildeo orientado a objetos identifica los tipos que representan los distintos objetos en el programa Las operaciones a realizar con cada uno delos objetos son al igual que en el modelo procedural los pasos destinados a solucionar el problema El objeto sirve ademaacutes de moacutedulo que puede reutilizarse para la solucioacuten de un problema de similares caracteriacutesticas en otro programa

Ninguna metodologiacutea resuelve con acierto todos los tipos de problemas La programacioacuten requiere una especializacioacuten como la que se produce en la ingenieriacutea pero todaviacutea no es posible identificarla como una ciencia Las teacutecnicas a emplear se han de utilizar con exquisito cuidado sin perder de vista el objetivo de resolver un determinado problema

Actualmente existe la tendencia de identificar la programacioacuten con una disciplina como la ingenieriacutea Sin embargo debe considerarse maacutes como un arte como la arquitectura donde se unen la inspiracioacuten y el dominio de la teacutecnica

Para la eleccioacuten de un determinado entorno debemos fijar los criterios necesarios como los que describimos a continuacioacuten

Tamantildeo de la aplicacioacuten

Cuanto mayor sea el volumen de informacioacuten a procesar mas necesidad habraacute de estructurar dicha informacioacuten de forma que se faacutecil su manipulacioacuten

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 las relaciones que puedan tener los datos entre si etc

Funciones El meacutetodo para la obtencioacuten de nuevos datos es complicado o requiere un esfuerzo de programacioacuten importante

Aunque tratados como grupos independientes ambos estaacuten generalmente interrelacionados De esta forma una estructura de datos compleja suele ir acompantildeada de un conjunto de funciones de disentildeo complejo

Asimismo una mayor abstraccioacuten se traduce en unas instrucciones mas potentes y un soporte de estructuras de datos maacutes complejas Esto a menudo se traduce en que el compilador (programa que traduce el programa introducido por el usuario en coacutedigo ejecutable por la maacutequina) ha de introducir una cantidad grande de coacutedigo auxiliar para poder ejecutar el coacutedigo fuente

Si ha programado en C o en Turbo Pascal habraacute observado que los ejecutables son en general de pequentildeo tamantildeo Un simple programa ltltHola mundogtgt claacutesico de programacioacuten Nunca es mayor de seis liacuteneas de coacutedigo y su ejecutable es siempre inferior a 10 Kbytes Si tomamos Clipper el programa no ocupa maacutes de una liacutenea pero maacutes de 200 Kbytes

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 26: 2983238 programacion-orientada-a-objetos

Rapidez

En algunos problemas la rapidez de respuesta es criacutetica Este factor depende mucho de soporte hardware y lentamente va asumiendo menos importancia

Portabilidad

La portabilidad es la capacidad que ha de tener el programa para funcionar en distintos entornos operativos La realizacioacuten de un programa portable en general depende de la eleccioacuten de un lenguaje de programacioacuten asiacute como del alejamiento de las ventajas e inconvenientes que proporciona el soporte hardware y el sistema operativo La creacioacuten de un programa portable a menudo incide negativamente en los apartados de tamantildeo y rapidez ya que un alejamiento de la plataforma hardware y del sistema operativo a menudo se consigue emulando sus caracteriacutesticas Esto conlleva un aumento del tamantildeo y la complejidad del programa asiacute como un incremento en el tiempo de ejecucioacuten

Gestioacuten de recursos

Este factor indica las exigencias que hace nuestro lenguaje de los recursos disponibles por el ordenado El maacutes limitado aun maacutes que el espacio en disco es la memoria Un programa grande que gestione de manera incorrecta la memoria pronto agotaraacute todos los recursos del sistema

Interface de usuario

Aunque no se puede contar como un factor a considerar la importancia que el interface de usuario estaacute tomando en los uacuteltimos antildeos hace que lo consideremos por separado El disentildeo del interface de usuario aporta una complejidad propia al desarrollo de aplicaciones De hecho se considera que en un principio este apartado ocupaba apenas entre el 10 y el 30 por ciento del esfuerzo de programacioacuten para llegar a absorber entre el 50 y 70 por ciento de dicho esfuerzo en la actualidad

La aparicioacuten de interfaces graacuteficos de usuario estaacutendar (Windows os2 X-Windows etc) ha hecho que factores como la rapidez o el tamantildeo vuelvan a tomarse en cuenta despueacutes de que el consumo de recursos de la parte del interface de usuario creciera de forma espectacular

APLICACIONES ORIENTADAS A OBJETOS

Coacutemo afectan los requerimientos anteriores para la eleccioacuten de un lenguaje orientado a objetos como herramienta para el desarrollo de nuestros programas

Claridad

Al ligar de forma evidente la estructura de la informacioacuten con los procedimientos que la manipulan los programas ganan en claridad a la hora de desarrollarlos y mantenerlos Esto supone una ventaja frente a los lenguajes procedurales aunque eacutestos podriacutean suplir esta deficiencia mediante una correcta eleccioacuten de los nombres de las variables y funciones lo que se denomina una ltltoportuna codificacioacutengtgt

Complejidad

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 27: 2983238 programacion-orientada-a-objetos

Cuando la complejidad de un problema es abarcable por una sola persona resolverlo con una herramienta u otra no aporta grandes ventajas Pero cuando este desarrollo la tiene que realizar un equipo grande debe existir una forma para aislar partes de problema

Uno de los problemas maacutes comunes y a su vez maacutes simples de solucionar en el disentildeo de grandes sistemas es el nombre que se da a las funciones y que tipo de datos manipulan eacutestas

En la realizacioacuten de un sistema informaacutetico se utiliza un equipo de varias personas El trabajo se divide en tres aacutereas funcionales una parte del equipo se encarga del interface de usuario otra de la manipulacioacuten de datos y la uacuteltima del disentildeo de salidas impresas

Cada quipo utiliza funciones y datos suministrados por los otros miembros del equipo y a su vez disentildea funciones para su uso interno y para el uso del resto de los grupos Si no se realiza la divisioacuten del trabajo de forma adecuada puede producirse el caos He aquiacute una pequentildea enumeracioacuten de los problemas que se pueden encontrar

bull Las funciones desarrolladas por cada uno de los grupos no encajan con las necesidades de los demaacutes

bull Otros grupos han elegido nombres de variables y funciones similares a los elegidos por nuestro grupo Estas funciones y variables son praacutecticamente iguales a las desarrolladas por nosotros pero variacutean ligeramente en el tratamiento de la informacioacuten por lo que no podemos sustituir nuestras funciones Ambas deben coexistir aumentando la complejidad del programa de manera innecesaria

bull El resto de los grupos soacutelo cubren determinados aspectos de la informacioacuten a tratar pero no proporcionan toda la informacioacuten necesaria para que el programa funcione El resto de informacioacuten debe suministrarse suplantando parte de la funcionalidad destinada a otros grupos

bull Algunas de las modificaciones que realizamos sobre variables locales o globales producen resultados imprevistos en el resto de los moacutedulosTamantildeo

Las aplicaciones orientadas a objetos son ideales para la realizacioacuten de programas de gran tamantildeo Las facilidades de encapsulacioacuten y asociacioacuten de las funciones a los datos que manipulan simplifican el proceso de desarrollo De hecho las bases de datos orientadas a objetos suponen un gran adelanto ya que auacutenan la flexibilidad en la manipulacioacuten de los OOP con la capacidad de consulta de un DBMS (Data Base Management System)

Relacioacuten entre Datos

Por el mismo motivo se veraacuten beneficiados aquellos programas que impliquen una relacioacuten compleja entre los datos Este tipo de complejidad permite la utilizacioacuten de todas las ventajas de los lenguajes de programacioacuten orientados a objetos Propiedades como la herencia ( donde los objetos pueden heredar

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 28: 2983238 programacion-orientada-a-objetos

estructura y operaciones de objetos predecesores) la encapsulacioacuten etc Muestran en este tipo de programas todas sus ventajas

Rapidez

En este aspecto los lenguajes orientados a objetos muestran una clara desventaja frente a otros lenguajes que se acercan maacutes a las especificaciones de la maacutequina Si la rapidez es criacutetica puede elegir un lenguaje de programacioacuten como C++ que aporta toda la funcionalidad de los lenguajes orientados a objetos con la rapidez y la compatibilidad de C

Gestioacuten de recursos

Las aplicaciones orientadas a objetos demandan normalmente maacutes recursos del sistema que las aplicaciones procedurales La creacioacuten dinaacutemica 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 a menudo el espacio que los objetos dejan de utilizar Este procedimiento de optimizacioacuten como garbage collection (recoleccioacuten de basura implementado en java) minimiza los efecto de la creacioacuten dinaacutemica de objetos

Interface de usuario

El interface de usuario es uno de los aspectos maacutes importantes en la programacioacuten actual La aparicioacuten de sistemas de explotacioacuten que soportan un interface graacutefico de usuario como Windows X-Windows o Presentation Manager hace que la mayoriacutea de los usuarios prefieran que sus programas corran bajo este tipo de interface Este es uno de los puntos fuertes para la eleccioacuten de un lenguaje OOP La mayoriacutea de los interfaces graacuteficos actuales han sido disentildeados o redisentildeados en base a la OOP Existen en el mercado libreriacuteas de clases que soportan todos los dispositivos de control de ventanas como menuacutes combo box listas barras de herramientas etc

Lenguajes orientados a objetos

Los lenguajes OOP implementan de manera distinta los conceptos de programacioacuten orientada a objetos No existe el lenguaje perfecto capaz de satisfacer todas las necesidades y que se adapte a todos los estilos

A Continuacioacuten unos consejos que nos facilitaraacuten la eleccioacuten del lenguaje de programacioacuten adecuado

bull Si los programas se van a sentar en una cualidad concreta de los OOP como herencia elija el que mejor soporte le deacute

bull Los lenguajes interpretados sirven para realizar un desarrollo raacutepido o para aquellos programas que necesiten una actualizacioacuten constante Si el programa necesita rapidez o es criacutetico respecto al tamantildeo considere el uso de lenguajes que incorporen compilador

bull No ltltreinvente la ruedagtgt Si el lenguaje le proporciona una libreriacutea de clases no intente reescribrlas de nuevo use las que le ofrece el sistema Es maacutes tome como factor de eleccioacuten las libreriacuteas de clases que el compilador incorpora o que esteacuten disponibles en el mercado

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 29: 2983238 programacion-orientada-a-objetos

bull Si necesita mejorar la calidad del programa previniendo errores utilice un lenguaje que le permita definir las variables con sus tipos asociados

bull Si la memoria del sistema es limitada utilice lenguajes que permitan la creacioacuten y destruccioacuten automaacutetica de clases dependiendo de su utilizacioacuten

CARACTERIacuteSTICAS DE LOS LENGUAJES OOP

Herencia muacuteltiple

Esta caracteriacutestica suele ser comuacuten a la mayoriacutea de los lenguajes OOP aunque introduce un problema al existir la posibilidad de que el objeto sucesor herede el mismo atributo aunque con distinto tipo y valor de mas de un predecesor Alguno de los lenguajes de programacioacuten solucionan este problema de forma automaacutetica aunque los maacutes populares generan un error en el tiempo de compilacioacuten Recomendamos que se examinen con cuidado las clases para evitar en lo posible estos errores

Eficiencia

Los lenguajes OOP arrastraron en un principio la reputacioacuten de ser ineficaces Esto se debiacutea en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados La existencia de compiladores permite a los desarrolladores ganar rapidez Actualmente usando un buen lenguaje orientado a objetos como C++ Java etc Junto con las libreriacuteas apropiadas para la realizacioacuten de un programa puede que se ejecute maacutes raacutepidamente que el mismo programa compilado con un lenguaje procedural

Asignacioacuten de tipos

Los lenguajes orientados a objetos variacutean de forma sustancial la forma por la que se aproximan a la asignacioacuten de tipos

Por asignacioacuten de tipos entendemos que cada variable sea identificada como perteneciente a una clase (asignacioacuten fuerte) o sea simplemente un objeto indeterminado (asignacioacuten deacutebil) Eiffel y C son dos lenguajes basados en la asignacioacuten fuerte frente a Smalltalk en el que todas las variables definidas pertenecen a una clase indeterminada

La asignacioacuten fuerte sirve a dos propoacutesitos Por una parte para que el desarrollador pueda identificar a que clase pertenece cada operacioacuten De forma concreta en aquellos lenguajes donde estaacute implementado el operator overloading (refefinicioacuten de operador) el compilador puede reconocer a traveacutes de las clases que entran como paraacutemetros en la operacioacuten que operacioacuten tiene que utilizar

Por otra este tipo de declaracioacuten permite al compilador un mayor grado de optimizacioacuten 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 la computadora

Hay dos tipos de aproximacioacuten a la gestioacuten de memoria

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 30: 2983238 programacion-orientada-a-objetos

El sistema en tiempo de ejecucioacuten libera la memoria automaacuteticamente a medida que los objetos dejan de utilizarse

El sistema tiene instrucciones concretas para liberar l memoria expliacutecitamente Este el enfoque adoptado por lenguajes como C++ que aportan dos operadores crear y destruir El primero reserva automaacuteticamente memoria mientras que el segundo la libera

Encapsulacioacuten

Consiste en separar aquellos atributos del objeto que deben ser conocidos por el resto de aquellos necesario para su funcionamiento propio No es propio de los lenguajes orientados a objetos pero la capacidad de eacutestos para unir las estructuras de datos a los procedimientos que los modifican lo hacen maacutes potente que los lenguajes llamados ltltModularesgtgt

PANORAMICA DE LOS LENGUAJES OOP

A continuacioacuten una pequentildea panoraacutemica de los lenguajes orientados a objetos

SMALLTALK

Fue el primer lenguaje de programacioacuten orientado a objetos Desarrollado en el Xerox PARC en sus primeras implementaciones no ofrece solamente un interprete sino que es mucho maacutes ambicioso integrando inteacuterprete on-line y otros aspectos que le convierten en un ltltpseudogtgt sistema operativo Es el primero en aportar la arquitectura de ModeloVisorControlador El interface de usuario se divide en una definicioacuten sobre la que se aplican determinado nuacutemero de vistas gestionadas por un controlador El MVC permite al desarrollador concentrarse en la parte esencial de la aplicacioacuten (el modelo) y antildeadir interfaces de usuarios ( las vistas y controles) de forma independiente

Ventajas

bull Smalltalk es un lenguaje puro orientado a objetos bull La implementacioacuten a traveacutes de un inteacuterprete facilita la labor de desarrollo de

programas Las clases son antildeadidas corregidas y depuradas de forma interactiva

bull Tiene una sintaxis simple donde las variables y los atributos no necesitan tener un tipo asociado Todo estaacute definido en principio como objeto incluyendo las propias clases

Inconvenientes

bull Es un lenguaje interpretado lo que reduce su rendimiento y dificulta su comercializacioacuten

bull Al proporcionar su propio entorno operativo interactuacutea mal con otro tipo de software o hardware

Eiffel

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 31: 2983238 programacion-orientada-a-objetos

Es un lenguaje de programacioacuten escrito por Bertrand Meyer Al contrario que Smalltalk incluye un preprocesador que permite la traduccioacuten de coacutedigo Eiffel a Lenguaje C Es ideal para la ingenieriacutea de software que permite la encapsulacioacuten control de acceso y aacutembito de las modificaciones Como lenguaje orientado a objetos ltltpurogtgt es presumiblemente el mejor por sus capacidades teacutecnicas

Los programas consisten en la declaracioacuten de colecciones de clases que incluyen meacutetodos El punto primordial de un programa Eiffel es la declaracioacuten de clases que asocia atributos Ambos clases y atributos son accesibles a partir de la implementacioacuten de un concepto llamado caracteriacutestica Una caracteriacutestica es por tanto una agrupacioacuten de datos y unas formas tiacutepicas de tratarlos

En Eiffel una declaracioacuten de clases puede incluir

bull Una lista de caracteriacutesticas exportables bull Una lista de las clases antecesora clases de la que eacutesta es una derivacioacuten bull Una lista de declaraciones de caracteriacutesticas

Ventajas

bull Es un lenguaje orientado a objetos ltltpurogtgt bull Eiffel es un lenguaje de programacioacuten orientado hacia el disentildeo de grandes

aplicaciones Las propiedades anteriores le hacen ideal para el disentildeo de aplicaciones en grupos de trabajo

bull El paso intermedio a coacutedigo C se puede considerar como una ventaja y no como un inconveniente ya que aquellas secciones que sean difiacuteciles de tratar con Eiffel pueden elaborarse a partir de coacutedigo C Su compatibilidad con C asegura tambieacuten su portabilidad hacia otros sistemas operativos

Desventajas

bull El manejo de la memoria un punto delicado en todos los lenguajes orientados a objetos no es transparente como en el caso de Smalltalk

bull Las libreriacuteas de clases son reducidas bull El rendimiento es mayor que el de Smalltalk pero al tener que incluir un

moacutedulo Run-time dentro del ejecutable su tamantildeo crece y su rendimiento baja

C++

Es un lenguaje de uso general que deriva del C

Antildeade a su predecesor una serie de caracteriacutesticas que le convierten en un lenguaje orientado a objetos Dentro de estas caracteriacutesticas debemos resaltar

bull La abstraccioacuten de datos bull La programacioacuten orientada a objetos ya que permite asociar a los datos las

funciones que los manipulan

C++ conserva todas las capacidades de su predecesor C De hecho el coacutedigo C puede tratarse con compiladores C++ y ejecutarse sin ninguacuten problema En un

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 32: 2983238 programacion-orientada-a-objetos

principio C++ era traducido a coacutedigo C a traveacutes de una utilidad llamada precompilador

Tambieacuten es cierto que se pueden utilizar algunas de las ventajas de C++ (como C mejorado) para escribir coacutedigo no orientado a objetos

Enumeramos los aspectos maacutes importantes que hacen del C++ un lenguaje orientado a objetos

bull La mayor contribucioacuten que realiza C++ al C es la introduccioacuten del tipo clase Las clases permiten definir conjunto de datos y las funciones que los manipulan

bull La ocultacioacuten de datos es el mecanismo para implementar la abstraccioacuten de datos La abstraccioacuten de datos permite al programador ltltolvidargtgt el funcionamiento interno de una clase ya que sabe que su funcionamiento no va a alterar anoacutemalamente el funcionamiento de otras clases Una vez definida la clase es transparente para el desarrollador y permite operar con ella como si fuera un tipo baacutesico

bull La herencia extiende el concepto de abstraccioacuten de datos al permitir la construccioacuten de clases a partir de otras (sus antecesores)

bull Los operadores definidos por el usuario permiten un tratamiento homogeacuteneo entre los tipos predefinidos por el lenguaje y los desarrollados por el programado

Otras caracteriacutesticas no relativas a la programacioacuten orientada a objetos simplifican el disentildeo y desarrollo

bull Optimizacioacuten de explotacioacuten de memorias que permite la creacioacuten de estructuras de datos dinaacutemicas

bull Implementacioacuten del solapamiento de funciones Esta teacutecnica permite definir varias funciones con el mismo nombre pero distintos paraacutemetros de entrada Dependiendo de los paraacutemetros que acompantildeen la llamada de la funcioacuten seraacute ejecutada una u otra

BASES DE DATOS ORIENTADAS A OBJETOS

La programacioacuten orientada a objetos es muy versaacutetil No se restringe uacutenicamente al disentildeo de programas sino que es posible aplicar los mismo conceptos al disentildeo de bases de datos El uso de una teacutecnica orientada a objetos trasciende a la eleccioacuten de la base de datos

El uso de esta teacutecnica en el disentildeo de bases de datos aporta las cualidades de esta metodologiacutea a nuestro disentildeo Eficiencia coherencia y un menor coste a la hora de actualizar la estructura de las bases de datos son los principales beneficios que aporta

Como valor antildeadido el uso de una misma teacutecnica en el disentildeo tanto de los programas como de las bases de datos proporciona coherencia a nuestro sistema

Las bases de datos orientadas a objetos unen dos tecnologiacuteas

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 33: 2983238 programacion-orientada-a-objetos

La de las bases de datos y la de los lenguajes orientados a objetos Los Lenguajes OOP aportan gran capacidad en la manipulacioacuten de datos pero no implementan el almacenamiento y consulta de grandes voluacutemenes de datos

Por el contrario las bases de datos convencionales aportan un dominio de las teacutecnicas de almacenamiento y consulta de grandes voluacutemenes de datos aunque su capacidad de manipulacioacuten es limitada

Las bases de datos orientadas a objetos pretenden unir la capacidad de manipulacioacuten de datos de los OPP con la capacidad de almacenamiento y consulta de los DBMS

Las aplicaciones convencionales que agrupan programas y bases de datos separan ambos entornos de manera clara

El desarrollador usa teacutecnicas procedurales para la descomposicioacuten de problemas y su codificacioacuten en funciones Posteriormente se emplean teacutecnicas como las de Entidad ndash Relacioacuten para el disentildeo de la base de datos

Su codificacioacuten suele realizarse en un lenguaje de alto nivel como C que lleva embebido coacutedigo SQL El teacutermino embebido describe la inclusioacuten de un moacutedulo escrito bajo otro lenguaje de programacioacuten dentro del coacutedigo fuente El compilador incorpora durante la fase de enlace el Run-Time correspondiente para que pueda funcionar el coacutedigo embebido

Como podraacute observar esta teacutecnica presenta defectos evidentes

Por una parte se utilizan diferentes teacutecnicas para el desarrollo de ambos apartados por lo que la tarea de disentildeo no se puede considerara como un todo uacutenico

Por otra y en gran medida debida a la primera los lenguajes que se utilizan para la implementacioacuten difieren dificultando las labores de mantenimiento

Ejemplos

Como habraacute podido observar a lo largo de esta monografiacutea nuestro propoacutesito no ha siso el de ensentildear una metodologiacutea ni la ensentildeanza de un determinado lenguaje de programacioacuten

El objetivo es por el contrario dar una panoraacutemica de los conceptos de la programacioacuten orientada a objetos de las metodologiacuteas y de las teacutecnicas de desarrollo de aplicaciones

En este apartado nos centraremos en lo aspectos maacutes importantes en el desarrollo de aplicaciones bajo OOP identificacioacuten de objetos y anaacutelisis de asociaciones

OBJETOS Y ASOCIACIONES

La parte maacutes importante de todo disentildeo es el punto de entrada de la definicioacuten de requerimientos En la observacioacuten atenta de los requerimientos se pueden hallar la mayoriacutea de los objetos pertenecientes a nuestra aplicacioacuten

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 34: 2983238 programacion-orientada-a-objetos

En este ejemplo nos centraremos en la identificacioacuten de objetos a partir de los requerimientos baacutesicos de la aplicacioacuten

Este anaacutelisis es el primero que debe hacerse dentro de OOP y es tambieacuten uacutetil para cualquier otra teacutecnica de programacioacuten

Analicemos la siguiente definicioacuten de requerimientos

El ltltsistema de tratamiento de informacioacuten documentalgtgt es un gestor de ltltdocumentosgtgt de tal manera que puedan clasificar en uno o varios ltltiacutendicesgtgt recuperar para su modificacioacuten visualizar para su consulta reclasificar archivar y destruir El ltltsistemagtgt procesa la peticioacuten del ltltusuariogtgt devolviendo un mensaje e indicando el eacutexito o el fracaso de la peticioacuten

De una manera general hemos indicado entre comillas los sustantivos y en cursiva los verbos De esta forma hemos identificado los objetos principales de la aplicacioacuten y las operaciones asociadas a cada uno de los objetos

Observe el siguiente diagrama

Hemos traducido los requerimientos a un conjunto de objetos

Estos estaacuten inconexos entre siacute pero aplicando la ltltloacutegicagtgt podemos ver las relaciones que existen entre ellos Sin salirnos de las especificaciones de la aplicacioacuten vemos que existen las asociaciones que aparecen en la siguiente figura

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 35: 2983238 programacion-orientada-a-objetos

Como podemos observar algunas asociaciones ciacuteclicas como Indice lt-gt Documento Estas asociaciones pueden simplificarse Tambieacuten existen otras impliacutecitas que examinaremos maacutes adelante como Usuario-gtDocumento-gtIndice

Observemos graacuteficamente las asociaciones que mantienen los objetos entre siacute en la siguiente figura

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 36: 2983238 programacion-orientada-a-objetos

Como puede verse hay dos asociaciones sospechosas ya que no son verbos sino los sustantivos ltltpeticioacutengtgt y ltltmensajegtgt Estas dos asociaciones se pueden ltltobjetivargtgt de tal manera que reuacutenan las condiciones de un objeto Para ello debemos volver a las especificaciones iniciales

Cuando se archiva un documento se debe indicar el nombre del documento asiacute como los iacutendices a los que se va a asociar Las peticiones de recuperacioacuten deben incluir un iacutendice y el nombre del archivo Las consultas a los iacutendices deben incluir el nombre del indice y una condicioacuten

A partir de este anaacutelisis se puede depurar con HERENCIA y posteriormente realizar un ltltajuste finogtgt

LA RELACION DE HERENCIA

A continuacioacuten vamos a centrarnos en la relacioacuten de herencia

Como ya sabemos eacutesta puede agrupar objeto son similares caracteriacutestica o bien especializar objetos a partir de una geneacuterico Observemos nuevamente los requerimientos de nuestro sistema

wwwdesarrollowebcom

Introducimos para los maacutes profanos las bases sobre las que se asienta la Programacioacuten Orientada a Objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 37: 2983238 programacion-orientada-a-objetos

La programacioacuten Orientada a objetos (POO) es una forma especial de programar maacutes cercana a como expresariacuteamos las cosas en la vida real que otros tipos de programacioacuten

Con la POO tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en teacuterminos de objetos propiedades meacutetodos y otras cosas que veremos raacutepidamente para aclarar conceptos y dar una pequentildea base que permita soltarnos un poco con este tipo de programacioacuten

Motivacioacuten

Durante antildeos los programadores se han dedicado a construir aplicaciones muy parecidas que resolviacutean una y otra vez los mismos problemas Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creoacute la POO Que es una serie de normas de realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo de manera que consigamos que el coacutedigo se pueda reutilizar

La POO no es difiacutecil pero es una manera especial de pensar a veces subjetiva de quien la programa de manera que la forma de hacer las cosas puede ser diferente seguacuten el programador Aunque podamos hacer los programas de formas distintas no todas ellas son correctas lo difiacutecil no es programar orientado a objetos sino programar bien Programar bien es importante porque asiacute nos podemos aprovechar de todas las ventajas de la POO

Coacutemo se piensa en objetos

Pensar en teacuterminos de objetos es muy parecido a coacutemo lo hariacuteamos en la vida real Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO Diriacuteamos que el coche es el elemento principal que tiene una serie de caracteriacutesticas como podriacutean ser el color el modelo o la marca Ademaacutes tiene una serie de funcionalidades asociadas como pueden ser ponerse en marcha parar o aparcar

Pues en un esquema POO el coche seriacutea el objeto las propiedades seriacutean las caracteriacutesticas como el color o el modelo y los meacutetodos seriacutean las funcionalidades asociadas como ponerse en marcha o parar

Por poner otro ejemplo vamos a ver coacutemo modelizariacuteamos en un esquema POO una fraccioacuten es decir esa estructura matemaacutetica que tiene un numerador y un denominador que divide al numerador por ejemplo 32

La fraccioacuten seraacute el objeto y tendraacute dos propiedades el numerador y el denominador Luego podriacutea tener varios meacutetodos como simplificarse sumarse con otra fraccioacuten o nuacutemero restarse con otra fraccioacuten etc

Estos objetos se podraacuten utilizar en los programas por ejemplo en un programa de matemaacuteticas haraacutes uso de objetos fraccioacuten y en un programa que gestione un taller de coches utilizaraacutes objetos coche Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 38: 2983238 programacion-orientada-a-objetos

tambieacuten son objetos Es decir el taller de coches seraacute un objeto que utilizaraacute objetos coche herramienta mecaacutenico recambios etc

Clases en POO

Las clases son declaraciones de objetos tambieacuten se podriacutean definir como abstracciones de objetos Esto quiere decir que la definicioacuten de un objeto es la clase Cuando programamos un objeto y definimos sus caracteriacutesticas y funcionalidades en realidad lo que estamos haciendo es programar una clase En los ejemplos anteriores en realidad hablaacutebamos de las clases coche o fraccioacuten porque soacutelo estuvimos definiendo aunque por encima sus formas

Propiedades en clases

Las propiedades o atributos son las caracteriacutesticas de los objetos Cuando definimos una propiedad normalmente especificamos su nombre y su tipo Nos podemos hacer a la idea de que las propiedades son algo asiacute como variables donde almacenamos datos relacionados con los objetos

Meacutetodos en las clases

Son las funcionalidades asociadas a los objetos Cuando estamos programando las clases las llamamos meacutetodos Los meacutetodos son como funciones que estaacuten asociadas a un objeto

Objetos en POO

Los objetos son ejemplares de una clase cualquiera Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se crearaacute Esta accioacuten de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traduccioacuten de la palabra instace que en ingleacutes significa ejemplar) Por ejemplo un objeto de la clase fraccioacuten es por ejemplo 35 El concepto o definicioacuten de fraccioacuten seriacutea la clase pero cuando ya estamos hablando de una fraccioacuten en concreto 47 81000 o cualquier otra la llamamos objeto

Para crear un objeto se tiene que escribir una instruccioacuten especial que puede ser distinta dependiendo el lenguaje de programacioacuten que se emplee pero seraacute algo parecido a esto

miCoche = new Coche()

Con la palabra new especificamos que se tiene que crear una instancia de la clase que sigue a continuacioacuten Dentro de los pareacutentesis podriacuteamos colocar paraacutemetros con los que inicializar el objeto de la clase coche

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores Por ejemplo cuando tenemos un coche la propiedad color tomaraacute un valor en concreto como por ejemplo rojo o gris metalizado El valor concreto de una propiedad de un objeto se llama estado

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 39: 2983238 programacion-orientada-a-objetos

Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto

miCochecolor = rojo

El objeto es miCoche luego colocamos el operador punto y por uacuteltimo el nombre e la propiedad a la que deseamos acceder En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a rojo con una simple asignacioacuten

Mensajes en objetos

Un mensaje en un objeto es la accioacuten de efectuar una llamada a un meacutetodo Por ejemplo cuando le decimos a un objeto coche que se ponga en marcha estamos pasaacutendole el mensaje ldquoponte en marchardquo

Para mandar mensajes a los objetos utilizamos el operador punto seguido del meacutetodo que deseamos invocar

miCocheponerseEnMarcha()

En este ejemplo pasamos el mensaje ponerseEnMarcha() Hay que colocar pareacutentesis igual que cualquier llamada a una funcioacuten dentro iriacutean los paraacutemetros

Otras cosas

Hay mucho todaviacutea que conocer de la POO ya que soacutelo hemos hecho referencia a las cosas maacutes baacutesicas Tambieacuten existen mecanismos como la herencia y el polimorfismo que son unas de las posibilidades maacutes potentes de la POO

La herencia sirve para crear objetos que incorporen propiedades y meacutetodos de otros objetos Asiacute podremos construir unos objetos a partir de otros sin tener que reescribirlo todo

El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos trabajando y abstraernos para definir un coacutedigo que sea compatible con objetos de varios tipos

Son conceptos avanzados que cuesta explicar en las liacuteneas de ese informe No hay que olvidar que existen libros enteros dedicados a la POO y aquiacute solo pretendemos dar un repaso a algunas cosas para que os suenen cuando tengaacuteis que poneros delante de ellas en los lenguajes de programacioacuten que debe conocer un desarrollador del web

Ejemplo concreto de programacioacuten orientada a objetos

Para conseguir un ejemplo concreto de lo que es la programacioacuten orientada a objetos podemos entrar en el Manual de PHP 5 Realmente este manual explica las caracteriacutesticas de orientacioacuten a objetos de PHP 5 y ofrece ejemplos concretos de creacioacuten de clases con caracteriacutesticas como herencia polimorfismo etc

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 40: 2983238 programacion-orientada-a-objetos

wwwjavaciberaulacom

Tecnologiacutea orientada a objetos

Hoy en diacutea la tecnologiacutea orientada a objetos ya no se aplica solamente a los lenguajes de programacioacuten ademaacutes se viene aplicando en el anaacutelisis y disentildeo con mucho eacutexito al igual que en las bases de datos Es que para hacer una buena programacioacuten orientada a objetos hay que desarrollar todo el sistema aplicando esta tecnologiacutea de ahiacute la importancia del anaacutelisis y el disentildeo orientado a objetos

La programacioacuten orientada a objetos es una de las formas maacutes populares de programar y viene teniendo gran acogida en el desarrollo de proyectos de software desde los uacuteltimos antildeos Esta acogida se debe a sus grandes capacidades y ventajas frente a las antiguas formas de programar

Una Perspectiva HistoacutericaTradicionalmente la programacioacuten fue hecha en una manera secuencial o lineal es decir una serie de pasos consecutivos con estructuras consecutivas y bifurcaciones

Los lenguajes basados en esta forma de programacioacuten ofreciacutean ventajas al principio pero el problema ocurre cuando los sistemas se vuelven complejos Estos programas escritos al estilo ldquoespaguettirdquo no ofrecen flexibilidad y el mantener una gran cantidad de liacuteneas de coacutedigo en soacutelo bloque se vuelve una tarea complicada

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 41: 2983238 programacion-orientada-a-objetos

Frente a esta dificultad aparecieron los lenguajes basados en la programacioacuten estructurada La idea principal de esta forma de programacioacuten es separar las partes complejas del programa en moacutedulos o segmentos que sean ejecutados conforme se requieran De esta manera tenemos un disentildeo modular compuesto por moacutedulos independientes que puedan comunicarse entre siacute Poco a poco este estilo de programacioacuten fue reemplazando al estilo ldquoespaguettirdquo impuesto por la programacioacuten lineal

Entonces vemos que la evolucioacuten que se fue dando en la programacioacuten se orientaba siempre a ir descomponiendo maacutes el programa Este tipo de descomposicioacuten conduce directamente a la programacioacuten orientada a objetos

Pues la creciente tendencia de crear programas cada vez maacutes grandes y complejos llevoacute a los desarrolladores a crear una nueva forma de programar que les permita crear sistemas de niveles empresariales y con reglas de negocios muy complejas Para estas necesidades ya no bastaba la programacioacuten estructurada ni mucho menos la programacioacuten lineal Es asiacute como aparece la programacioacuten orientada a objetos (POO) La POO viene de la evolucioacuten de la programacioacuten estructurada baacutesicamente la POO simplifica la programacioacuten con la nueva filosofiacutea y nuevos conceptos que tiene La POO se basa en la dividir el programa en pequentildeas unidades loacutegicas de coacutedigo A estas pequentildeas unidades loacutegicas de coacutedigo se les llama objetos Los objetos son unidades independientes que se comunican entre ellos mediante mensajes Veamos con mayor detenimiento este tema

iquestCuaacuteles son las ventajas de un lenguaje orientado a objetos

bull Fomenta la reutilizacioacuten y extensioacuten del coacutedigo bull Permite crear sistemas maacutes complejos bull Relacionar el sistema al mundo real bull Facilita la creacioacuten de programas visuales bull Construccioacuten de prototipos bull Agiliza el desarrollo de software bull Facilita el trabajo en equipo bull Facilita el mantenimiento del software

Lo interesante de la POO es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 42: 2983238 programacion-orientada-a-objetos

El modelo Orientado a Objetos

Para entender este modelo vamos a revisar 4 conceptos baacutesicos

bull Objetos bull Clases bull Herencia bull Enviacuteo de mensajes

1 Objetos

Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos

Existen muchas definiciones que se le ha dado al Objeto Primero empecemos entendiendo que es un objeto del mundo real Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor Digamos que para leer este artiacuteculo lo hacemos a traveacutes del monitor y una computadora ambos son objetos al igual que nuestro teleacutefono celular un aacuterbol o un automoacutevil

Analicemos un poco maacutes a un objeto del mundo real como la computadora No necesitamos ser expertos en hardware para saber que una computadora estaacute compuesta internamente por varios componentes la tarjeta madre el chip del procesador un disco duro una tarjeta de video y otras partes maacutes El trabajo en conjunto de todos estos componentes hace operar a una computadora

Internamente cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compantildeiacuteas con diversos meacutetodos de disentildeo Pero nosotros no necesitamos saber coacutemo trabajan cada uno de estos componentes como saber que hace cada uno de los chips de la tarjeta madre o coacutemo funciona internamente el procesador Cada componente es una unidad autoacutenoma y todo lo que necesitamos saber de adentro es coacutemo interactuacutean entre siacute los componentes saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre o conocer donde se coloca la tarjeta de video Cuando conocemos como interaccionan los componentes entre siacute podremos armar faacutecilmente una computadora

iquestQue tiene que ver esto con la programacioacuten La programacioacuten orientada a objetos trabaja de esta manera Todo

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 43: 2983238 programacion-orientada-a-objetos

el programa estaacute construido en base a diferentes componentes (Objetos) cada uno tiene un rol especiacutefico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas

Todo objeto del mundo real tiene 2 componentes caracteriacutesticas y comportamiento

Por ejemplo los automoacuteviles tienen caracteriacutesticas (marca modelo color velocidad maacutexima etc) y comportamiento (frenar acelerar retroceder llenar combustible cambiar llantas etc)

Los Objetos de Software al igual que los objetos del mundo real tambieacuten tienen caracteriacutesticas y comportamientos Un objeto de software mantiene sus caracteriacutesticas en una o maacutes variables e implementa su comportamiento con meacutetodos Un meacutetodo es una funcioacuten o subrutina asociada a un objeto

Para redondear estas ideas imaginemos que tenemos estacionado en nuestra cochera un Ford Focus color azul que corre hasta 260 kmh Si pasamos ese objeto del mundo real al mundo del software tendremos un objeto Automoacutevil con sus caracteriacutesticas predeterminadas

Marca = FordModelo = FocusColor = AzulVelocidad Maacutexima = 260 kmh

Cuando a las caracteriacutesticas del objeto le ponemos valores decimos que el objeto tiene estados Las variables almacenan los estados de un objeto en un determinado momento

Definicioacuten teoacuterica Un objeto es una unidad de coacutedigo compuesto de variables y meacutetodos relacionados

2 Las Clases

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 44: 2983238 programacion-orientada-a-objetos

En el mundo real normalmente tenemos muchos objetos del mismo tipo Por ejemplo nuestro teleacutefono celular es soacutelo uno de los miles que hay en el mundo Si hablamos en teacuterminos de la programacioacuten orientada a objetos podemos decir que nuestro objeto celular es una instancia de una clase conocida como celular Los celulares tienen caracteriacutesticas (marca modelo sistema operativo pantalla teclado etc) y comportamientos (hacer y recibir llamadas enviar mensajes multimedia transmisioacuten de datos etc)

Cuando se fabrican los celulares los fabricantes aprovechan el hecho de que los celulares comparten esas caracteriacutesticas comunes y construyen modelos o plantillas comunes para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo A ese modelo o plantilla le llamamos CLASE y a los equipos que sacamos a partir de ella la llamamos OBJETOS

Esto mismo se aplica a los objetos de software se puede tener muchos objetos del mismo tipo y mismas caracteriacutesticas

Definicioacuten teoacuterica La clase es un modelo o prototipo que define las variables y meacutetodos comunes a todos los objetos de cierta clase Tambieacuten se puede decir que una clase es una plantilla geneacuterica para un conjunto de objetos de similares caracteriacutesticas

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 45: 2983238 programacion-orientada-a-objetos

Por otro lado una instancia de una clase es otra forma de llamar a un objeto En realidad no existe diferencia entre un objeto y una instancia Soacutelo que el objeto es un teacutermino maacutes general pero los objetos y las instancias son ambas representacioacuten de una clase

Definicioacuten Teoacuterica Una instancia es un objeto de una clase en particular

3 Herencia

La herencia es uno de los conceptos maacutes cruciales en la POO La herencia baacutesicamente consiste en que una clase puede heredar sus variables y meacutetodos a varias subclases (la clase que hereda es llamada superclase o clase padre) Esto significa que una subclase aparte de los atributos y meacutetodos propios tiene incorporados los atributos y meacutetodos heredados de la superclase De esta manera se crea una jerarquiacutea de herencia

Por ejemplo imaginemos que estamos haciendo el anaacutelisis de un Sistema para una tienda que vende y repara equipos celulares

En el graacutefico vemos 2 Clases maacutes que posiblemente necesitemos para crear nuestro Sistema Esas 2 Clases nuevas se construiraacuten a partir de la Clase Celular existente De esa forma utilizamos el comportamiento de la SuperClase

En general podemos tener una gran jerarquiacutea de Clases tal y como vemos en el siguiente graacutefico

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 46: 2983238 programacion-orientada-a-objetos

4 Enviacuteo de Mensajes

Un objeto es inuacutetil si estaacute aislado El medio empleado para que un objeto interactuacutee con otro son los mensajes Hablando en teacuterminos un poco maacutes teacutecnicos los mensajes son invocaciones a los meacutetodos de los objetos

Caracteriacutesticas asociadas al POO

Abstraccioacuten

La abstraccioacuten consiste en captar las caracteriacutesticas esenciales de un objeto asiacute como su comportamiento Por ejemplo volvamos al ejemplo de los automoacuteviles iquestQueacute caracteriacutesticas podemos abstraer de los automoacuteviles O lo que es lo mismo iquestQueacute caracteriacutesticas semejantes tienen todos los automoacuteviles Todos tendraacuten una marca un modelo nuacutemero de chasis peso llantas puertas ventanas etc Y en cuanto a su comportamiento todos los automoacuteviles podraacuten acelerar frenar retroceder etc

En los lenguajes de programacioacuten orientada a objetos el concepto de Clase es la representacioacuten y el mecanismo por el cual se gestionan las abstracciones

Por ejemplo en Java tenemos

public class Automovil variables meacutetodos

Encapsulamiento

El encapsulamiento consiste en unir en la Clase las caracteriacutesticas y comportamientos esto es las variables y meacutetodos Es tener todo esto es una sola entidad En los

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 47: 2983238 programacion-orientada-a-objetos

lenguajes estructurados esto era imposible Es evidente que el encapsulamiento se logra gracias a la abstraccioacuten y el ocultamiento que veremos a continuacioacuten

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad ya que tendremos a las Clases como cajas negras donde soacutelo se conoce el comportamiento pero no los detalles internos y esto es conveniente porque nos interesaraacute seraacute conocer queacute hace la Clase pero no seraacute necesario saber coacutemo lo hace

Ocultamiento

Es la capacidad de ocultar los detalles internos del comportamiento de una Clase y exponer soacutelo los detalles que sean necesarios para el resto del sistema

El ocultamiento permite 2 cosas restringir y controlar el uso de la Clase Restringir porque habraacute cierto comportamiento privado de la Clase que no podraacute ser accedido por otras Clases Y controlar porque daremos ciertos mecanismos para modificar el estado de nuestra Clase y es en estos mecanismos doacutende se validaraacuten que algunas condiciones se cumplan En Java el ocultamiento se logra usando las palabras reservadas public private y protected delante de las variables y meacutetodos

Lenguajes de Programacioacuten Orientado a Objetos

En 1985 E Stroustrup extendioacute el lenguaje de programacioacuten C a C++ es decir C con conceptos de clases y objetos tambieacuten por esas fechas se creo desde sus bases el lenguaje EIFFEL

En 1995 aparecioacute el maacutes reciente lenguaje OO Java desarrollado por SUN que hereda conceptos de C++

El lenguaje de desarrollo maacutes extendido para aplicaciones Web el PHP 5 trae todas las caracteriacutesticas necesarias para desarrollar software orientado a objetos

Ademaacutes de otros lenguajes que fueron evolucionando como el Pascal a Delphi

Finalmente tambieacuten otros lenguajes script como el ActionScript que si bien no es totalmente orientado a objetos pero siacute posee las caracteriacutesticas

Anaacutelisis y disentildeo Orientado a Objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 48: 2983238 programacion-orientada-a-objetos

Para el desarrollo de software orientado a objetos no basta usar un lenguaje orientado a objetos Tambieacuten se necesitaraacute realizar un anaacutelisis y disentildeo orientado a objetos

El modelamiento visual es la clave para realizar el anaacutelisis OO Desde los inicios del desarrollo de software OO han existido diferentes metodologiacuteas para hacer esto del modelamiento pero sin lugar a duda el Lenguaje de Modelamiento Unificado (UML) puso fin a la guerra de metodologiacuteas

Seguacuten los mismos disentildeadores del lenguaje UML eacuteste tiene como fin modelar cualquier tipo de sistemas (no solamente de software) usando los conceptos de la orientacioacuten a objetos Y ademaacutes este lenguaje debe ser entendible para los humanos y maacutequinas

Actualmente en la industria del desarrollo de software tenemos al UML como un estaacutendar para el modelamiento de sistemas OO Fue la empresa Racional que creoacute estas definiciones y especificaciones del estaacutendar UML y lo abrioacute al mercado La misma empresa creoacute uno de los programas maacutes conocidos hoy en diacutea para este fin el Racional Rose pero tambieacuten existen otros programas como el Poseidon que trae licencias del tipo community edition que permiten su uso libremente

El UML consta de todos los elementos y diagramas que permiten modelar los sistemas en base al paradigma orientado a objetos Los modelos orientados a objetos cuando se construyen en forma correcta son faacuteciles de comunicar cambiar expandir validar y verificar Este modelamiento en UML es flexible al cambio y permite crear componentes plenamente reutilizables

Resumen

bull iquestPor queacute seguimos buscando nuevas teacutecnicas de desarrollo Por el aumento de la complejidad de los sistemas

bull En un programa orientado a objetos tendremos a un conjunto de objetos colaborando entre ellos

bull La orientacioacuten a objetos es paradigma de que estaacute de moda para el desarrollo de software

bull Un objeto es una abstraccioacuten conceptual del mundo real que se puede traducir a un lenguaje de programacioacuten orientado a objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos
Page 49: 2983238 programacion-orientada-a-objetos

bull Un objeto del mundo real tiene caracteriacutesticas y comportamientos y de la misma manera un objeto del mundo del software tiene variables y meacutetodos

bull Una Clase es una plantilla que define las variables y meacutetodos a ser incluidas en un tipo de objeto especiacutefico

bull Los objetos tambieacuten son llamados instancias de la Clase Los objetos soacutelo almacenan su estado De dice que un objeto tiene estado cuando tiene valores en sus variables

bull Los objetos se comunican entre ellos usando los mensajes Un mensaje es la invocacioacuten de un meacutetodo del objeto

bull La orientacioacuten a objetos requiere de una metodologiacutea que integre el proceso de desarrollo y un lenguaje de modelamiento con herramientas y teacutecnicas adecuadas

  • Programacioacuten orientada a objetos
    • De Wikipedia la enciclopedia libre
    • Introduccioacuten [editar]
    • Origen [editar]
    • Conceptos fundamentales [editar]
    • Caracteriacutesticas de la POO [editar]
    • Lenguajes orientados a objetos [editar]
      • Programacioacuten Orientada a Objetos
      • Programacioacuten orientada a Objetos