• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Paradigma orientado a objetos
 

Paradigma orientado a objetos

on

  • 519 views

Programación Orientada a Objetos

Programación Orientada a Objetos
Componentes de los Objetos

Statistics

Views

Total Views
519
Views on SlideShare
519
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Paradigma orientado a objetos Paradigma orientado a objetos Document Transcript

    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-1-Año 2011PARADIGMA ORIENTADO A OBJETOS Disponible en: http://www.desy.de/gna/html/cc/Tutorial/Spanish/node6.htmI) INTRODUCCIONActualmente una de las áreas más candentes en la industria y en el ámbito académico es laorientación a objetos. La orientación a objetos promete mejoras de amplio alcance en la formade diseño, desarrollo y mantenimiento del software ofreciendo una solución a largo plazo a losproblemas y preocupaciones que han existido desde el comienzo en el desarrollo de software: lafalta de portabilidad del código y reusabilidad, código que es difícil de modificar, ciclos dedesarrollo largos y técnicas de codificación no intuitivas.Un lenguaje orientado a objetos ataca estos problemas. Tiene tres característicasbásicas:a) debe estar basado en objetosb) basado en clases yc) capaz de tener herencia de clases.Muchos lenguajes cumplen uno o dos de estos puntos; muchos menos cumplen los tres.La barrera más difícil de sortear es usualmente la herencia.El concepto de programación orientada a objetos (OOP) no es nuevo, lenguajes clásicoscomo SmallTalk se basan en ella. Dado que la OOP. se basa en la idea natural de la existenciade un mundo lleno de objetos y que la resolución del problema se realiza en términos deobjetos, un lenguaje se dice que está basado en objetos si soporta objetos como unacaracterística fundamental del mismo.El elemento fundamental de la OOP es, como su nombre lo indica, el objeto. Podemosdefinir “un objeto como un conjunto complejo de datos y programas que poseen estructura yforman parte de una organización”.Esta definición especifica varias propiedades importantes de los objetos. En primerlugar, un objeto no es un dato simple, sino que contiene en su interior cierto número decomponentes bién estructurados. En segundo lugar, cada objeto no es un ente aislado, sino queforma parte de una organización jerárquica o de otro tipo.
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-2-Año 2011II) ESTRUCTURA DE UN OBJETOUn objeto puede considerarse como una especie de cápsula dividida en tres partes:1 - RELACIONES2 - PROPIEDADES3 - METODOSCada uno de estos componentes desempeña un papel totalmente independiente:II.1) RELACIONES: Las relaciones permiten que el objeto se inserte en la organización yestán formadas esencialmente por punteros a otros objetos.Las relaciones entre objetos son, precisamente, los enlaces que permiten a un objetorelacionarse con aquellos que forman parte de la misma organización.Las hay de dos tipos fundamentales:-Relaciones jerárquicas. Son esenciales para la existencia misma de la aplicación porque laconstruyen. Son bidireccionales, es decir, un objeto es padre de otro cuando el primer objeto seencuentra situado inmediatamente encima del segundo en la organización en la que ambosforman parte; asimismo, si un objeto es padre de otro, el segundo es hijo del primero (en la fig.2, B es padre de D,E y F, es decir, D,E y F son hijos de B; en la fig. 3, los objetos B y C sonpadres de F, que a su vez es hijo de ambos).FIG. 2 –ORG. JERARQUICA SIMPLE (Un hijo tiene sólo un padre)A B CD E FA B CD E FOBJETOPropiedadesMétodos
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-3-Año 2011FIG. 3 –ORG. JERARQUICA COMPLEJA (un hijo puede tener varios padres)Una organización jerárquica simple puede definirse como aquella en la que un objetopuede tener un solo padre, mientras que en una organización jerárquica compleja un hijo puedetener varios padres(F tiene a B y C como padres).-Relaciones semánticas. Se refieren a las relaciones que no tienen nada que ver con laorganización de la que forman parte los objetos que las establecen. Sus propiedades yconsecuencia solo dependen de los objetos en sí mismos (de su significado) y no de su posiciónen la organización.Se puede ver mejor con un ejemplo: supongamos que vamos a construir un diccionarioinformatizado que permita al usuario obtener la definición de una palabra cualquiera.Supongamos que, en dicho diccionario, las palabras son objetos y que la organización jerárquicaes la que proviene de forma natural de la estructura de nuestros conocimientos sobre el mundo.La raíz del diccionario podría llamarse TEMAS. De éste término genérico descenderántres grandes ramas de objetos llamadas VIDA, MUNDO y HOMBRE. El primero (vida)comprenderá las ciencias biológicas: Biología y Medicina. El segundo (mundo), las ciencias dela naturaleza inerte: las Matemáticas, la Física, la Química y la Geología. El tercero (hombre)comprenderá las ciencias humanas: la Geografía, la Historia, etc.Estableceremos la relación trabajó entre los objetos NEWTON y OPTICA y lainterpretaremos diciendo que significa que Newton trabajó en óptica (véase la fig. 4). Larelación es, evidentemente, semántica, pues no establece ninguna connotación jerárquica entreNEWTON y OPTICA y su interpretación depende exclusivamente del significado de ambosobjetos.FIG. 4 –TEMASLa existencia de esta relación nos permitirá responder a preguntas como:¿Quién trabajó en óptica?- ¿En qué trabajó Newton?- ¿Quien trabajó en Física?Las dos primeras se deducen inmediatamente de la existencia de la relación trabajó.Para la tercera observamos que si Newton trabajó en óptica automáticamente sabemosque trabajó en Física, por ser óptica una rama de la Física (en nuestro diccionario, el objetoOPTICA es hijo del objeto FISICA). Entonces gracias a la OOP podemos responder a la terceraTEMASVIDA MUNDOOHOMBREMAT FIS QUIMBIO MED GEOG HISTOpticaNewtonNo hay relación jerárquicaentre óptica y Newton
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-4-Año 2011pregunta sin necesidad de establecer una relación entre NEWTON y FISICA, apoyándonos sóloen la relación definida entre NEWTON y OPTICA y en que OPTICA es hijo de FISICA. Deeste modo se elimina toda redundancia innecesaria y la cantidad de información que tendremosque definir para todo el diccionario será mínima.II.1.2 – Clasificación de las relacionesII.1.2.a - Relación De-La-EspecieConsidérese que se ha escrito un programa para dibujar. Este programa debería permitirel dibujo de variados objetos tales como puntos, rectángulos, triángulos y muchos más. Por cadaobjeto, se provee una definición de clase.Por ejemplo, la clase Point define un punto por sus coordenadas:class Point {attributes:int x, ymethods:setX(int newX)getX()setY(int newY)getY()}Se continúa definiendo clases de programa de dibujo con una clase para describir círculos.Un círculo define un punto central y un radio:class Circle {attributes:int x, y,radiusmethods:setX(int newX)getX()setY(int newY)getY()setRadius(newRadius)getRadius()}Comparando ambas definiciones de clase, podemos observar lo siguiente : Ambas clases tienen dos elementos de datos x e y. En la clase Point estos elementosdescriben la posición del punto, en el caso de la clase Circle describen el centro del
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-5-Año 2011círculo. Así, x e y tienen el mismo significado en ambas clases: Describen la posición desu objeto asociado por medio de la definición de un punto. Ambas clases ofrecen el mismo conjunto de métodos para obtener y definir el valor delos dos elementos de datos x e y. La clase Circle "añade un nuevo elemento de datos radius y sus correspondientesmétodos de acceso.Conociendo las propiedades de la clase Point: podemos describir un círculo como unpunto más un radio más métodos para accederlo.Así, un círculo es "de-la-especie" Point. Sin embargo, un círculo es algo más"especializado". Ilustramos esto gráficamente en la Figura 5.1.Figura 5.1: Ilustración de la relación "de-la-especie".En ésta y en las siguientes figuras, las clases se dibujan usando rectángulos. Su nombresiempre empieza con una letra mayúscula. Las flechas indican la dirección de la relación, de ahíque se deba leer como "Circle es de-la-especie Point".II.1.2.b - Relación Es-Un(a)La relación anterior se usa al nivel de clase para describir las relaciones entre dos clasessimilares. Si creamos objetos de tales clases, nos referimos a su relación como una relación "es-un(a)".Desde el momento que la clase Circle es de la especie de la clase Point, una instancia deCircle, digamos acircle, es un point. Consecuentemente, cada círculo se comporta como unpunto. Por ejemplo, se puede mover puntos en la dirección x al alterar el valor de x.Similarmente, se mueven círculos en ésta dirección al alterar su valor de x.La Figura 5.2 ilustra esta relación. En ésta y en las siguientes figuras, los objetos se dibujanusando rectángulos con las esquinas redondeadas. Su nombre consiste solamente de letrasminúsculas.Figura 5.2: Ilustración de la relación "es-un(a)".II.1.2.c - Relación Parte-DeAlgunas veces se necesita poder construir objetos haciendo una combinación de otros.Esto se sabe por la programación procedimental, donde se tiene la estructura o registro parajuntar variados tipos de datos.
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-6-Año 2011Regresemos al programa de dibujo. Ya se han creado varias clases para las figurasdisponibles. Ahora se decide que se quiere tener una figura especial que representa un logotipopropio que consiste en un círculo y un triángulo. (Asumamos que ya se tiene definida un claseTriangle.) De este modo, el logo consiste en dos partes o, el círculo y el triángulo son parte-delogotipo:class Logo {attributes:Circle circleTriangle trianglemethods:set(Point where)}Ilustramos esto con la Figura 5.3.Figura 5.3: Ilustración de la relación "parte-de".II.1.2.d - Relación Tiene-Un(a)Esta relación es justamente la inversa de la relación parte-de. Por lo tanto, podemosfácilmente añadir esta relación a la ilustración parte-de añadiendo flechas en la otra dirección(Figura 5.4).Figura 5.4: Ilustración de la relación "tiene-un(a)".
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-7-Año 2011II.2) PROPIEDADESTodo objeto puede tener cierto número de propiedades, cada una de las cuales tendrá, asu vez, uno o varios valores. En OOP, las propiedades corresponden a las clásicas "variables" dela programación estructurada. Son, por lo tanto, datos encapsulados dentro del objeto, junto conlos métodos (programas) y las relaciones (punteros a otros objetos).Las propiedades de un objeto pueden tener un valor único o pueden contener unconjunto de valores más o menos estructurados (matrices, vectores, listas, etc.). Además, losvalores pueden ser de cualquier tipo (numérico, alfabético, etc.) si el sistema de programación lopermite.Pero existe una diferencia con las "variables", y es que las propiedades se puedenheredar de unos objetos a otros. En consecuencia, un objeto puede tener una propiedad demaneras diferentes:-Propiedades propias. Están formadas dentro de la cápsula del objeto.-Propiedades heredadas. Están definidas en un objeto diferente, antepasado de éste(padre,"abuelo", etc.). A veces estas propiedades se llaman propiedad miembro porque el objetolas posee por el mero hecho de ser miembro de una clase.Las propiedades distinguen un objeto determinado de los restantes que forman parte dela misma organización y tiene valores que dependen de la propiedad de que se trate. Laspropiedades de un objeto pueden ser heredadas a sus descendientes en la organización.II.3) METODOSLos métodos son las operaciones que pueden realizarse sobre el objeto, quenormalmente estarán incorporados en forma de programas (código) que el objeto es capaz deejecutar y que también pone a disposición de sus descendientes a través de la herencia.Los métodos son una operación que realiza acceso a los datos. Podemos definir métodocomo un programa procedimental o procedural escrito en cualquier lenguaje, que está asociadoa un objeto determinado y cuya ejecución sólo puede desencadenarse a través de un mensajerecibido por éste o por sus descendientes.Son sinónimos de método todos aquellos términos que se han aplicadotradicionalmente a los programas, como procedimiento, función, rutina, etc. Sin embargo, esconveniente utilizar el término método para que se distingan claramente las propiedadesespeciales que adquiere un programa en el entorno OOP, que afectan fundamentalmente a laObjeto 1 Objeto 2PropiedadesMétodosPropiedadesMétodosMensaje (invocación deun método)
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-8-Año 2011forma de invocarlo (únicamente a través de un mensaje) y a su campo de acción, limitado a unobjeto y a sus descendientes, aunque posiblemente no a todos.Si los métodos son programas, se deduce que podrían tener argumentos, o parámetros.Puesto que los métodos pueden heredarse de unos objetos a otros, un objeto puede disponer deun método de dos maneras diferentes:-Métodos propios. Están incluidos dentro de la cápsula del objeto.-Métodos heredados. Están definidos en un objeto diferente, antepasado de éste (padre,"abuelo",etc.). A veces estos métodos se llaman métodos miembro porque el objeto los posee por el merohecho de ser miembro de una clase.III - OBJETO (Resúmen)Los objetos soportan una serie de características específicas de los mismos: Se agrupan en grupos denominados clases Contienen datos internos que definen su estado actual. Soportan ocultamiento de datos. Pueden heredar propiedades de otros objetos. Pueden comunicarse con otros objetos enviando o pasando mensajes. Tienen métodos que definen su comportamientoUn objeto es una entidad lógica que contiene datos y un código especial que indicacomo manipular los datos.El uso de un objeto impone a veces castigos al momento de la ejecución que enocasiones pueden degradar seriamente el diseño de un programa.Los objetos son construcciones de programación que se obtienen a partir de entidadesllamadas clases. El programador tiene la responsabilidad absoluta de crear clasespropias, pero también puede tener acceso a las clases desarrolladas por otros.Ejemplo: diseño de un Objeto.class nomina {nomina empleado;char nombre[30];float salario;}; (nomina es una clase )(empleado es un objeto)Los objetos son ejemplos de clases.Nombre SalarioEmpleado 1Empleado 2. . . . . . . . . .Empleado nClass Nómina de PersonalObjetos
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-9-Año 2011IV - CONCEPTO DE CLASECada objeto es un ejemplar de una clase a la que pertenece. Todos losejemplares de la misma clase tienen el mismo comportamiento (es decir invocan almismo método) como respuesta a una solicitud similar.Una clase es un tipo especial de datos, y esta orientado a creación de objetos yque consta de unos miembros que pueden ser todas o funciones privadas o públicas.“Una clase es un tipo de dato que contiene uno o más elementos llamados datomiembro, y cero, una o más funciones que manipulan esos datos (llamados funciónmiembro). Una clase se puede definir con una estructura (struct), una unión(unión) o una clase (class).”La sintaxis de una clase es:class nombre_clase{miembro_1; //lista de datos miembrosmiembro_2miembro_3funcion_miembro_1( ); // funciones miembroconocidasfuncion_miembro_2 ( ); // funciones como métodosObjeto 1 Objeto 2 Objeto nClaseA
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-10-Año 2011IV.1 - Identificadores de diseño de una clasePara usar una clase, primero hay que declararla, como se hace en el caso de lasestructuras. La declaración de una clase puede aparecer sólo una vez en un programa, taly como las estructuras. Esta es una declaración de una clase simple:class counter {long count;  Variable miembro de la clasepublic:void SetCount(long);long GetValue( );};-La palabra clave class introduce una declaración de clase.-Después aparece el nombre de la clase.-Las clases contienen no sólo declaraciones de variables, sino también definiciones defunciones completas.-Las funciones contenidas en clases pueden ser tan largas y complejas como uno deseeque lo sean.-Se considera que las variables declaradas dentro de una clase pertenecen a esa clase. Enciertas circunstancias, las variables pueden compartirse entre las diferentes instancias deuna clase.-Existe garantía de que los identificadores de variables y funciones contenidos en unaclase no chocan con los identificadores que se usan en otras.Básicamente una clase es un mundo con identificadores propios únicos.IV.2- Cuerpo de una ClaseLa variable count se define dentro del cuerpo de la clase. Por lo tanto, count recibeel nombre de variable miembro de la clase.
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-11-Año 2011Cualquier variable definida en una clase tiene campo de acción. El campo de acción dela clase no está disponible, es decir, que este punto de declaración es una variable finalde la declaración de la clase.Es un error intentar el acceso a una variable miembro después de la declaraciónde la clase, como se puede apreciar en el código siguiente:class counter {long count;public:count = 3; //error: count no se encuentra definida aquí.IV.3- Uso de una ClasePara usar una clase se debe definir un objeto con ella. Las variables de una clase sedefinen tan solo como variables de tipo estructura o variables escalares. Para definir lavariable de la clase people de tipo counter, se utiliza esta notación:Counter people“Las variables instanciadas a partir de clases son los objetos”.En general, es imposible usar una clase directamente. Las contadas excepciones aesta regla se ilustran más adelante. Para el objeto people, esta es la forma en que lopodría utilizar un programa:Void main ( ){counter people;//inicializar el objeto people.SetValue(0);// verificar que se borrelong value = people.GetValue( );}“Una clase es un tipo especial de datos, y esta orientada a la creación de objetos yque consta de unos miembros que pueden ser datos o funciones privadas o publicas”.
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-12-Año 2011IV.4- Componentes de una ClasePara poder definir una clase se debe tomar en cuenta que consta de dos partes: unadeclaración y una implementación.. La declaración lista los miembros de la clase.. La implementación o cuerpo define las funciones de la clase.class nomina {nomina empleado;char nombre[30];float salario;}; (nomina es una clase )(empleado es un objeto)……………………………………………………..class contador{long cuenta;public:void leervalor(long);long obtenervalor( );};…………………………………………………..Implementación de una clasevoid contador::leerValor(long valor){cuenta = valor,}long contador::obtenerValor( ){return cuenta;}}Declaración de una claseFunciones miembro dela clase
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-13-Año 2011V- ENCAPSULAMIENTO Y OCULTACIÓNComo hemos visto, cada objeto es una estructura compleja en cuyo interior hay datos yprogramas, todos ellos relacionados entre sí, como si estuvieran encerrados conjuntamente enuna cápsula. Esta propiedad (encapsulamiento), es una de las características fundamentales enla OOP.Los objetos son inaccesibles, e impiden que otros objetos, los usuarios, o incluso losprogramadores conozcan cómo está distribuida la información o qué información haydisponible. Esta propiedad de los objetos se denomina ocultación de la información. Esto noquiere decir, sin embargo, que sea imposible conocer lo necesario respecto a un objeto y a loque contiene. Si así fuera no se podría hacer gran cosa con él. Lo que sucede es que laspeticiones de información a un objeto, deben realizarse a través de mensajes dirigidos a él, conla orden de realizar la operación pertinente. La respuesta a estas órdenes será la informaciónrequerida, siempre que el objeto considere que quien envía el mensaje está autorizado paraobtenerla.El hecho de que cada objeto sea una cápsula facilita enormemente que un objetodeterminado pueda ser transportado a otro punto de la organización, o incluso a otraorganización totalmente diferente que precise de él. Si el objeto ha sido bien construido, susmétodos seguirán funcionando en el nuevo entorno sin problemas. Esta cualidad hace que laOOP sea muy apta para la reutilización de programas.VI- ORGANIZACIÓN JERARQUICA DE LOS OBJETOSEn principio, los objetos forman siempre una organización jerárquica, en el sentido deque ciertos objetos son superiores a otros de cierto modo.Existen varios tipos de jerarquías: serán simples cuando su estructura pueda serrepresentada por medio de un "árbol". En otros casos puede ser más compleja.En cualquier caso, sea la estructura simple o compleja, podrán distinguirse en ella tres nivelesde objetos.-La raíz de la jerarquía. Se trata de un objeto único y especial. Este se caracteríza por estar en elnivel más alto de la estructura y suele recibir un nombre muy genérico, que indica su categoríaespecial, como por ejemplo objeto madre, Raíz o Entidad.-Los objetos intermedios. Son aquellos que descienden directamente de la raíz y que a su veztienen descendientes. Representan conjuntos o clases de objetos, que pueden ser muy generaleso muy especializados, según la aplicación. Normalmente reciben nombres genéricos quedenotan 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 osubclase.
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-14-Año 2011-Los objetos terminales. Son todos aquellos que descienden de una clase o subclase y no tienendescendientes. Suelen llamarse casos particulares, instancias o items porque representan loselementos del conjunto representado por la clase o subclase a la que pertenecen.VII- POLIMORFÍSMOUna de las características fundamentales de la OOP es el polimorfísmo, que noes otra cosa que la posibilidad de construir varios métodos con el mismo nombre, perocon relación 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 recibirían el mismo mensaje global pero responderían a él de formasdiferentes; por ejemplo, un mensaje "+" a un objeto ENTERO significaría suma,mientras que para un objeto STRING significaría concatenación ("pegar" strings unoseguido al otro)VII.1) DemoniosEs un tipo especial de métodos, relativamente poco frecuente en los sistemas deOOP, que se activa automáticamente cuando sucede algo especial. Es decir, es unprograma, como los métodos ordinarios, pero se diferencia de estos porque su ejecuciónno se activa con un mensaje, sino que se desencadena automáticamente cuandoocurre un suceso determinado: la asignación de un valor a una propiedad de unobjeto, la lectura de un valor determinado, etc.Los demonios, cuando existen, se diferencian de otros métodos por que no sonheredables y porque a veces están ligados a una de las propiedades de un objeto, masque al objeto entero.VIII - HERENCIACon la herencia podemos hacer uso de las relaciones de-la-especie y es-un(a).Como se describió anteriormente, las clases que son de-la-especie de otra clasecomparten propiedades de esta última. En nuestro ejemplo con el punto y el círculo,podemos definir un círculo, el cuál hereda de punto:class Circle inherits from Point {atrributes:int radiusmethods:setRadius(int newRadius)getRadius()}
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-15-Año 2011La clase Circle hereda todos los elementos de datos y métodos de la clase Point.No hay necesidad de definirlos dos veces: Solamente usamos los ya existentes (yfamiliares) datos y definiciones de métodos.Al nivel de objeto ahora podemos usar un círculo justamente como habríamosusado un punto, debido a que un círculo es-un(a) punto. Por ejemplo, podemos definirun objeto círculo (acircle) y establecer sus coordenadas del punto central:Circle acircleacircle.setX(1) /* Heredado de Point */acircle.setY(2)acircle.setRadius(3) /* Añadido por Circle */"Es-un(a)" también implica que podemos usar un círculo en cualquier circunstanciadonde se pueda usar un punto. Por ejemplo, se puede escribir una función o un método,digamos move(), el(la) cuál debe mover un punto en la dirección x:move(Point apoint, int deltax) {apoint.setX(apoint.getX() + deltax)}Debido a que círculo hereda de punto, se puede usar esta función con un argumentocírculo para mover su punto central y, a partir de ahí, todo el círculo :Circle acircle...move(acircle, 10) /* Mover el círculo al mover *//* su punto central */Tratemos de formalizar el término "herencia" :Definición (Herencia) “Herencia es el mecanismo que permite que un clase A heredepropiedades de una clase B. Decimos "A hereda de B". Objetos de la clase A tienen asíacceso a los atributos y métodos de la clase B sin necesidad de redefinirlos. Lasiguiente definición describe dos términos con los que podemos hacer referencia a lasclases involucradas cuando se usa la herencia.”Definición (Superclase/Subclase) Si la clase A hereda de la clase B, entonces B es lasuperclase de A. A es subclase de B. Los objetos de una subclase pueden ser usados enlas circunstancias donde son usados los objetos de la superclase correspondiente. Estose debe al hecho que los objetos de la subclase comparten el mismo comportamientoque los objetos de la superclase.En la literatura también se pueden encontrar otros términos para "superclase" ypara "subclase". Las superclases también son llamadas clases padres. Las subclasespueden ser llamadas también clases hijas o simplemente clases derivadas.
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-16-Año 2011Por supuesto, también se puede heredar de una subclase, haciendo que esta clase sea lasuperclase de la nueva subclase. Esto conduce a una jerarquía de relacionessuperclase/subclase. Si se dibuja esta jerarquía, se obtiene una gráfica de herencia.Un esquema común consiste en usar flechas para indicar la relación de herenciaentre clases u objetos. En nuestros ejemplos hemos usado "hereda-de".Consecuentemente, la flecha empieza desde la subclase hacia la superclase, como seilustra en la Figura 5.5.Figura 5.5: Una gráfica de herencia sencilla.En la literatura también se puede encontrar ilustraciones donde las flechas sedibujan del modo contrario. La dirección en la que se usan las flechas dependen decomo el autor correspondiente las haya decidido entender.De cualquier manera, en este apunte, las flechas siempre apuntan hacia lasuperclase. En las secciones siguientes, las flechas indican "hereda-de".VII .1 - Herencia MúltipleUn mecanismo importante de orientación a objetos es la herencia múltiple. Laherencia múltiple no significa que múltiples subclases compartan la misma superclase.Tampoco significa que una subclase herede de una clase que es a su vez subclase deotra clase.“La herencia múltiple significa que una subclase puede tener más de unasuperclase. Esto permite que la subclase herede propiedades de más de unasuperclase y –mezclar- sus propiedades”.Considérese por ejemplo nuevamente nuestro programa de dibujo. Suponiendoque ya tenemos una clase String que nos permite el manejo adecuado de texto. Podríatener, por ejemplo, un método append para añadir otro texto.En este programa, nos gustaría usar esta clase para añadir texto a los objetosque se pudieran dibujar. También sería bueno usar rutinas ya existentes tales comomove() para mover el texto a donde fuera necesario.
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-17-Año 2011En consecuencia, es razonable permitir que un texto para dibujarse tenga unpunto que defina su localización dentro del área de dibujo. Por lo tanto derivamos unanueva clase DrawableString que hereda propiedades de Point y de String como seilustra en la Figura 5.6.Figura 5.6: Derivar un string desplegable que herede propiedades de Point y deString.En nuestro pseudo lenguaje, escribimos esto, simplemente separando lasdiferentes superclases con comas :class DrawableString inherits from Point, String {attributes:/* Todos heredados de superclases */methods:/* Todos heredados de superclases */}Podemos usar objetos de la clase DrawableString como ambos: puntos y strings. Debido a que drawablestring es-un(a) point podemos mover dichos objetos:DrawableString dstring...move(dstring, 10)...Desde el momento que son string, podemos añadirles otro texto:dstring.append("La flores color azul ...")Podemos definir la herencia múltiple :Definición (Herencia Múltiple) Si la clase A hereda de más de una clase, p.ej. Ahereda de B1, B2, ..., Bn, hablamos de herencia múltiple. Esto puede presentarconflictos de nomenclatura en A si al menos dos de sus superclases definenpropiedades con el mismo nombre.La definición de arriba presenta conflictos de nomenclatura los cuáles ocurren simás de una superclase de una subclase usan el mismo nombre para ambos, atributos ométodos. Por ejemplo, supongamos que la clase String define un método setX() que
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-18-Año 2011pone el string en una secuencia de "X" caracteres. Se produce la pregunta ¿Que deberíaser heredado por DrawableString? ¿La versión de Point, de String o ninguna de las dos?Estos conflictos pueden ser resueltos de al menos dos maneras : El orden en el cuál las superclases son provistas, definen que propiedad seráaccesible por el nombre causante del conflicto. Los otros quedarán "escondidos". Las subclases deben resolver el conflicto proveyendo una propiedad con elnombre y definiendo como usar los de sus superclases.La primera solución no es muy conveniente ya que presentan consecuenciasimplícitas dependiendo del orden en el cuál las clases heredan unas de otras. Para elsegundo caso, las subclases deben redefinir explícitamente las propiedades que estáninvolucradas en conflictos de nomenclatura.Un tipo especial de conflicto de nomenclatura se presenta si una clase D hereda enforma múltiple de las superclases B y C que a su vez son derivadas de una superclase A.Esto conduce a una gráfica de herencia como se muestra en la Figura 5.7.Figura 5.7: Un conflicto de nomenclatura presentado por una superclase compartidapor superclases usadas en herencia múltiple.Cabe la pregunta acerca de que propiedades hereda realmente la clase D de sussuperclases B y C. Algunos lenguajes de programación existentes resuelven esta gráficade herencia especial derivando D con las propiedades de A más las propiedades de B y C sin las propiedades que han heredado de A.Consecuentemente, D no puede presentar conflictos de nomenclatura con losnombres en la clase A. Sin embargo, si B y C añaden propiedades con el mismonombre, D entra en un conflicto de nomenclatura.
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-19-Año 2011Otra posible solución es que D herede de ambas trayectorias de herencia. En estasolución, D tiene dos copias de las propiedades de A: una heredada de B y otra de C.Aunque la herencia múltiple es un poderoso mecanismo en orientación a objetos,los problemas que se presentan con los conflictos de nomenclatura ha llevado a variosautores a "condenarla". Debido a que los resultados de la herencia múltiple siemprepuede ser lograda usando herencia simple, algunos lenguajes orientados a objetos nopermiten siquiera su uso. Sin embargo, usada con cuidado, bajo algunas condicionesla herencia múltiple provee una manera eficiente y elegante de formular cosas.VIII - BENEFICIOS Y PROBLEMAS QUE SE OBTIENEN DEL DESARROLLOCON OOPVIII.1- REUTILIZACION DE CODIGODía a día los costos del Hardware decrecen. Así surgen nuevas áreas deaplicación cotidianamente: procesamiento de imágenes y sonido, bases de datosmultimediales, automatización de oficinas, ambientes de ingeniería de software, etc.Aún en las aplicaciones tradicionales encontramos que definir interfases hombre-máquina "a-la-Windows" suele ser bastante conveniente.Lamentablemente, los costos de producción de software siguen aumentando; elmantenimiento y la modificación de sistemas complejos suele ser una tarea trabajosa;cada aplicación, (aunque tenga aspectos similares a otra) suele encararse como unproyecto nuevo, etc.Todos estos problemas aún no han sido solucionados en forma completa. Perocomo los objetos son portables (teóricamente) mientras que la herencia permite lareusabilidad del código orientado a objetos, es más sencillo modificar código existenteporque los objetos no interaactúan excepto a través de mensajes; en consecuencia uncambio en la codificación de un objeto no afectará la operación con otro objeto siempreque los métodos respectivos permanezcan intactos. “La introducción de tecnología deobjetos como una herramienta conceptual para analizar, diseñar e implementaraplicaciones permite obtener aplicaciones más modificables, fácilmente extendibles ya partir de componentes reusables”. Esta reusabilidad del código disminuye el tiempoque se utiliza en el desarrollo y hace que el desarrollo del software sea más intuitivoporque la gente piensa naturalmente en términos de objetos más que en términos dealgoritmos de software.VIII.2 - Problemas derivados de la utilización de OOP en la actualidadUn sistema orientado a objetos, por lo visto, puede parecer un paraíso virtual. Elproblema sin embargo surge en la implementación de tal sistema. Muchas compañíasoyen acerca de los beneficios de un sistema orientado a objetos e invierten gran cantidadde recursos luego comienzan a darse cuenta que han impuesto una nueva cultura que es
    • MODELOS DE DESARROLLO DE PROGRAMAS Y PROGRAMACON CONCURRENTE-20-Año 2011ajena a los programadores actuales. Específicamente los siguientes temas suelenaparecer repetidamente:a) Curvas de aprendizaje largas. Un sistema orientado a objetos ve al mundo en unaforma única. Involucra la conceptualización de todos los elementos de un programa,desde subsistemas a los datos, en la forma de objetos. Toda la comunicación entre losobjetos debe realizarse en la forma de mensajes. Esta no es la forma en que estánescritos los programas orientados a objetos actualmente; al hacer la transición a unsistema orientado a objetos la mayoría de los programadores deben capacitarsenuevamente antes de poder usarlo.b) Dependencia del lenguaje. A pesar de la portabilidad conceptual de los objetos en unsistema orientado a objetos, en la práctica existen muchas dependencias. Muchoslenguajes orientados a objetos están compitiendo actualmente para dominar el mercado.Cambiar el lenguaje de implementación de un sistema orientado a objetos no es unatarea sencilla; por ejemplo C++ soporta el concepto de herencia múltiple mientras queSmallTalk no lo soporta; en consecuencia la elección de un lenguaje tieneramificaciones de diseño muy importantes.c) Determinación de las clases. Una clase es un molde que se utiliza para crear nuevosobjetos. En consecuencia es importante crear el conjunto de clases adecuado para unproyecto. Desafortunadamente la definición de las clases es más un arte que una ciencia.Si bien hay muchas jerarquías de clase predefinidas usualmente se deben crear clasesespecíficas para la aplicación que se este desarrollando. Luego, en 6 meses ó 1 año se dacuenta que las clases que se establecieron no son posibles; en ese caso será necesarioreestructurar la jerarquía de clases devastando totalmente la planificación original.d) Performance. En un sistema donde todo es un objeto y toda interacción es a través demensajes, el tráfico de mensajes afecta la performance. A medida que la tecnologíaavanza y la velocidad de microprocesamiento, potencia y tamaño de la memoriaaumentan, la situación mejorará; pero en la situación actual, un diseño de una aplicaciónorientada a objetos que no tiene en cuenta la performance no será viablecomercialmente.Idealmente, habría una forma de atacar estos problemas eficientemente al mismotiempo que se obtienen los beneficios del desarrollo de una estrategia orientada aobjetos. Debería existir una metodología fácil de aprender e independiente del lenguaje,y fácil de reestructurar que no drene la performance del sistema.