Sunteți pe pagina 1din 26

Captulo 1.

- PROGRAMACIN ORIENTADA A OBJETOS

1 2

INTRODUCCIN AL ENFOQUE O.O ..............................................................................1 CONCEPTOS BSICOS DE ORIENTACIN A OBJETOS ............................................2


2.1 2.1.1 O

BJETOS.........................................................................................................................2

2.1.2 2.1.3
2.2

2.2.1 2.2.2 2.2.3

LASES...........................................................................................................................5

Identidad...................................................................................................................3 Encapsulacin y ocultacin de datos.........................................................................3 Mtodos y mensajes...................................................................................................4 Herencia ...................................................................................................................5 Organizacin y relaciones entre objetos....................................................................8 Polimorfismo y Ligadura Dinmica.........................................................................10

LENGUAJES ORIENTADOS A OBJETOS. ....................................................................11


3.1 3.2 3.3 3.4

3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.6 3.4.7 3.4.8 3.4.9

RGENES DE LOS LENGUAJES ORIENTADOS A OBJETOS .................................................... 11 LASIFICACIN ............................................................................................................. 12 VENTAJAS E INCONVENIENTES. ...................................................................................... 13 PRINCIPALES LENGUAJES ORIENTADOS A OBJETOS ........................................................... 14
O C

3.5

LECCIN DE UN LENGUAJE OO ..................................................................................... 24

Simula.....................................................................................................................14 Smalltalk .................................................................................................................14 Objective-C.............................................................................................................15 C++........................................................................................................................16 Ada .........................................................................................................................17 Object-Oriented Pascal. ..........................................................................................17 Turbo Pascal...........................................................................................................18 Eiffel .......................................................................................................................18 Java ........................................................................................................................19

II

Captulo 1: Programacin orientada a objetos

Captulo 1 PROGRAMACIN ORIENTADA A OBJETOS


1 Introduccin al enfoque O.O

Durante los ltimos aos, la Programacin Orientada a Objetos (OOP) ha tomado gran importancia. El trmino OOP indica ms una forma de diseo y una metodologa de desarrollo que un lenguaje de programacin, ya que en realidad se puede aplicar el Diseo Orientado a Objetos (OOD) a cualquier tipo de lenguaje de programacin. A menudo se confunde la Orientacin a Objetos con sistemas de ventanas, iconos y similares, Interfaces Grficas de Usuario. Esto es debido a que se usan tcnicas orientadas a objetos para construir estos entornos. Tambin se piensa que todo lo programado por lenguajes orientados a objetos es O.O.P. Esto no es cierto, ya que incluso es posible hacer O.O.P. en lenguajes procedimentales clsicos. Aspectos importantes que determinan el desarrollo de software son: PORTABILIDAD. El software desarrollado debe funcionar independientemente del hardware y del entorno de funcionamiento o Sistema Operativo sobre el cual se ejecute. PRODUCTIVIDAD. Uno de los principales objetivos es simplificar el proceso de desarrollo de Software, para lo cual es fundamental reutilizar componentes. MANTENIMIENTO. Constituye una de las etapas ms costosas en el desarrollo de software que, por tanto, habr de intentarse optimizar. Es fundamental estructurar bien el programa para prever futuros cambios o modificaciones. CALIDAD. A la hora de producir software, no hay que olvidar que se deben de desarrollar productos de calidad, dada a partir de una serie de aspectos como robustez, fiabilidad, eficiencia, flexibilidad,.. Cualquier metodologa de programacin debe intentar producir programas portables, reducir los tiempos de desarrollo y los costes de mantenimiento, as como mejorar la calidad del producto. Los principales problemas de las metodologas de programacin actuales son : Creciente complejidad de las aplicaciones: Los requisitos cada vez ms ambiciosos de las aplicaciones, reflejan una sofisticacin en la demanda de software. Limitaciones en la modelizacin de problemas no estructurados. Las actuales metodologas estructuradas dificultan la modelizacin y resolucin de problemas complejos no estructurados. Siguiendo una metodologa estructurada los sistemas se descomponen en una jerarqua de mdulos. Estos se disean para transformar entradas y salidas bien definidas. Este enfoque es el ms apropiado para su empleo en problemas estructurados en donde el comportamiento del software se conoce y se puede describir en base a algoritmos de transformacin de datos. El software se estructura en base a la solucin del problema en vez de enfocarlo al problema en s mismo. Esto puede conducir a una separacin conceptual entre el problema del mundo real y su representacin e implementacin informtica. Difcil reutilizacin del software. Es normal que se construyan y reconstruyan una y otra vez mdulos muy parecidos funcionalmente. Muchos de los intentos de crear libreras de componentes de software reutilizables no han tenido mucha implantacin debido sobre todo a los problemas inherentes a su reutilizacin. Cualquier simplificacin del proceso de desarrollo del software pasa por la reutilizacin de componentes ya implementados. Mantenimiento difcil y costoso. El mantenimiento de las aplicaciones supone el coste ms importante durante el ciclo de vida. Debido a la evolucin que sufren todas las aplicaciones, a menudo se introducen ampliaciones y se desarrollan nuevos entornos de operacin, lo cual argumenta que el mantenimiento sea una actividad esencial. Como durante el desarrollo de las aplicaciones no se han tenido en cuenta futuros cambios, es frecuente encontrar programas mal estructurados en los cuales es difcil la incorporacin de nuevos mdulos o estructuras de datos.
1-1

Captulo 1: Programacin orientada a objetos

El desarrollo de la OOP empieza a destacar durante la dcada de los 80, partiendo de la programacin estructurada, a la que engloba, y dotando al programador de nuevos elementos para el anlisis y desarrollo de software. As, las metodologas orientadas a objetos pueden facilitar la produccin de sistemas cada vez ms complejos, permiten modelar problemas no estructurados, incrementan la productividad gracias a la reutilizacin de objetos y facilitan el mantenimiento. La orientacin a objetos puede describirse cmo el conjunto de disciplinas que desarrollan y modelizan software que facilitan la construccin de sistemas complejos a partir de componentes. El atractivo de la orientacin a objetos es que proporciona conceptos y herramientas con las cuales se modela y representa el mundo real tan fielmente como sea posible. La OOP proporciona las siguientes VENTAJAS sobre otros lenguajes de programacin: Uniformidad pues la representacin de los objetos lleva implcita tanto el anlisis como el diseo y codificacin de los mismos. Compresin: tanto los datos que componen los objetos, como los procedimientos que los manipulan, estn agrupados en clases, que se corresponden con las estructuras de informacin 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 quedar reflejado automticamente en cualquier lugar donde estos datos aparezcan. Reusabilidad: La nocin de objeto permite que programas que traten las mismas estructuras de datos 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 combinacin de objetos ya definidos donde stos estn relacionados de una manera particular. La OOP no sustituye a ninguna metodologa ni lenguaje de programacin anterior, es un enfoque distinto. Todos los programas que se realizan segn OOD se pueden realizar igualmente mediante programacin estructurada. Su uso en la actualidad se justifica porque el desarrollo de todas las nuevas herramientas basadas en una interface de usuario grfico como Windows, X-Window, ... es mucho ms sencillo.
2 Conceptos bsicos de orientacin a objetos

2.1

Objetos

La POO se basa en disear programas mediante el uso de OBJETOS, identificando componentes o actores que mediante unas determinadas acciones, interaccionando entre ellos, resuelven el problema a resolver. Los objetos son por tanto abstracciones de elementos relacionados con el rea del problema, diseados para reflejar su comportamiento. Casi todo puede ser considerado un objeto: el dinero, el helicptero, una persona, una tabla, un ordenador, un avin, un diccionario, la ciudad o la capa de ozono. Los objetos representan cosas, simples o complejas. Principalmente, un objeto complejo es aquel que est compuesto por otros objetos, como por ejemplo un objeto texto que est compuesto por otros objetos prrafos ms pequeos. Una antena parablica es un objeto complejo y real, y puede ser representado por un objeto complejo en un sistema informtico. El objeto que representa a la antena estar formado por otros objetos que representan el receptor, el transmisor, el motor orientador de la antena ... etc. Smith y Tockey sugieren que un objeto representa un elemento, unidad o entidad individual e identificable, ya sea real o abstracta, con un papel bien definido en el dominio del problema. En algunos lenguajes, como por ejemplo SmallTalk, la Orientacin a Objetos es pura, y todos los posibles elementos del propio lenguaje son objetos. En otros lenguajes, los ms habituales, algunas cosas no son objetos, sino atributos, valores o caractersticas de objetos, representado por tipos de datos como entero, flotante .. etc. Algunas de ellas son simplemente atributos de los objetos como el color, el tamao y la velocidad. Los atributos reflejan el estado de un objeto (la velocidad del objeto avin o el tamao de un objeto edificio). Un OBJETO es la integracin de tres aspectos: Relaciones, permiten que el objeto se integre en la organizacin de la que forma
1-2

Captulo 1: Programacin orientada a objetos

Ejemplo: Una mquina expendedora de refrescos puede aceptar monedas. Esta es una propiedad esttica (es decir, fija), lo que significa que es una caracterstica esencial de la mquina. En cambio, la cantidad actual de monedas que ha aceptado en un momento dado representa el valor dinmico de esta propiedad (atributo). El mecanismo que acepta las monedas y devuelve un refresco a cambio es un conjunto de mtodos: su comportamiento.

parte junto con otros objetos. Las relaciones pueden ser de tipo jerrquico (herencia) o semntico, como en el caso de los objetos que componen la antena parablica. Propiedades (atributos), distinguen un objeto de los restantes (tamao, posicin, color, ...). Cada propiedad tendr un determinado valor. Las propiedades de un objeto pueden ser heredadas por sus descendientes. Mtodos (operaciones), conjunto de cosas que puede hacer un objeto (estudiar, caminar, trabajar, rotar, volar, etc.). Un mtodo es un procedimiento o funcin que altera el estado de un objeto o hace que el objeto enve un mensaje, es decir, que devuelva valores. Los mtodos pueden ser heredados por sus descendientes. Es decir, los objetos conocen cosas y hacen cosas. Las cosas que un objeto conoce son sus atributos; este conjunto de atributos tambin es conocido como su estado. Las cosas que puede hacer son sus mtodos. El conjunto de mtodos de un objeto es conocido como su comportamiento. El conjunto de mtodos y atributos se conoce muchas veces como miembros.

Todo objeto tiene un estado, exhibe algn comportamiento bien definido y tiene una identidad nica (como se ver en el siguiente apartado). El estado de un objeto abarca todas las propiedades (normalmente estticas) del mismo ms los valores actuales (normalmente dinmicos) de cada una de esas propiedades. El comportamiento se refiere a cmo acta y reacciona un objeto, en trminos de sus cambios de estado y paso de mensajes.
Identidad

2.1.1

Una casa, una persona, una tabla, una calculadora, una pieza del juego de ajedrez, son objetos de la vida cotidiana. A su vez, un prrafo en un documento o una ventana en Windows son objetos de uso comn en programacin. Cada objeto existe y tiene entidad por s mismo. La identidad expresa que aunque dos objetos sean exactamente iguales en sus atributos, son distintos entre s. De esta forma, incluso una serie de coches recin salidos de fbrica son distintos los unos de los otros. Esto tiene importancia cuando descendemos al nivel de programacin. Aqu, cada objeto tiene un controlador por el cual se identifica. ste puede ser una variable, una estructura de datos, una cadena de caracteres, etc. El controlador ser distinto para cada uno de los objetos, aunque las referencias a stos sean uniformes e independientes del contenido, permitiendo crear agrupaciones de objetos con el mismo tratamiento (clases).
Ejemplo: En Java, se utilizan las referencias para apuntar a los objetos.
class a {} class ppal { static public void main(String[] args) { a refa = new a; // refa es una referencia. }

En C++, se pueden utilizar punteros o variables.

class a{}; int main(void) { a *ptra = new a;// ptra es un puntero al objeto de la clase a a obja; // obja es una variable. // Representa a un objeto de la clase a. }
Encapsulacin y ocultacin de datos

2.1.2

La encapsulacin es el trmino de OO que describe la vinculacin de unas operaciones y estado a un objeto particular. Un objeto es la integracin de atributos y mtodos. Los datos de la programacin tradicional son ahora atributos de un objeto y las funciones los mtodos que se utilizan para procesar los atributos de ese
1-3

Captulo 1: Programacin orientada a objetos

objeto. Esto quiere decir que todos esos datos y funciones, en lugar de estar dispersos, como en programacin estructurada, se encapsulan en una nica unidad, el objeto. La organizacin interna del objeto es inaccesible desde el exterior (ocultamiento de la informacin). Las partes ocultas o encapsuladas de un objeto son su implementacin privada, o lo que es lo mismo se dice que son privados. Se dice que los atributos y los mtodos visibles son pblicos y forman la interface del objeto. Cada objeto mantiene sus propios datos internos y los usuarios de un objeto pueden acceder y manipular los datos internos solamente a travs de sus mtodos, de tal forma que la interface de un objeto es su conjunto de mtodos pblicos. As, detalles internos de la implementacin de un objeto como algoritmos o representaciones internas de datos, no son visibles. Esto refuerza el ocultamiento de la informacin y permite un alto nivel de abstraccin.
Ejemplo: De la misma forma que no tenemos acceso a las operaciones internas que realiza un medidor de combustible en un coche para indicarnos la cantidad de combustible disponible, no necesitamos saber, no tenemos por qu tener acceso, a las operaciones internas de un objeto que representa un altmetro de un avin en una aplicacin; slo es necesario conocer el mtodo del objeto del cul se obtiene esa altura, no cmo el objeto altmetro interacciona con el altmetro fsico. Ejemplo: Esto es similar a un mdulo de programacin estructurada, en el que ciertas funciones son visibles desde el exterior, pblicas, mientras que otras son privadas, no son accesibles desde el exterior porque slo se utilizan localmente en el mdulo, y los programas que utilicen ese mdulo no necesitan conocer esas funciones privadas.

Esto no quiere decir que sea imposible conocer informacin de un objeto, sino que las peticiones de informacin a un objeto deben cursarse a travs de mensajes al objeto con el fin de realizar determinada operacin. La respuesta a esa peticin ser la informacin solicitada siempre que el objeto compruebe que el solicitante tiene acceso a ella. El ocultamiento de informacin facilita que los usuarios de un objeto no estn expuestos al peligro cuando su realizacin cambia mientras no haya cambiado la interface. Entonces los programas que utilizaban el objeto pueden seguir funcionando sin alteracin alguna. La encapsulacin y el ocultamiento de informacin son extremadamente tiles al modificar cdigo (ya que se restringe la propagacin de cambios). Tambin se fomenta la reusabilidad, ya que el cdigo puede ser utilizado como una tecnologa de caja negra (igual que los circuitos integrados en la industria electrnica). Los mtodos son el mecanismo de acceso y manipulacin de los datos del objeto, constituyen la interface del objeto. Cada mtodo est constituido por un conjunto de instrucciones escritas en un lenguaje de programacin estructurado determinado, asociadas a un objeto determinado y cuya ejecucin slo puede desencadenarse a travs de un mensaje recibido por este o por sus descendientes. Los objetos se comunican a travs del paso de mensajes. En la prctica, esto supone la ejecucin de un mtodo en un objeto determinado. Un mensaje le dice a un objeto lo que tiene que hacer, identificando un mtodo y los operandos necesarios para su ejecucin. Los objetos reciben, interpretan y responden a mensajes procedentes de otros objetos. Un mensaje consiste en una direccin (a cul o cules objetos se enva) y una instruccin formada por un nombre de mtodo y 0 o ms parmetros:
Ejemplo: Si el objeto altmetro anterior cambia su forma de interaccionar con el altmetro real del avin, no es necesario cambiar el resto de objetos que utilizan ese objeto altmetro a menos que el mtodo del que se obtiene la altitud hay cambiado tambin. Los miembros pblicos se denotan normalmente como public, y los privados, como private.

2.1.3

Mtodos y mensajes

OBJETO.metodo [parmetros]
Ejemplo: Supongamos el conjunto de objetos de los EMPLEADOS de una empresa. Para un empleado concreto, queremos calcular su salario mensual, pero para ello se necesita conocer el nmero de horas trabajadas. Se enva un mensaje al objeto, EMPLEADO23, de activar CALCULAR_SALARIO con horas_trabajadas determinadas: EMPLEADO23.CALCULAR_SALARIO(horas_trabajadas) Ante este mensaje, el receptor (EMPLEADO23) ejecutar su mtodo CALCULAR_SALARIO (siempre que el
1-4

Captulo 1: Programacin orientada a objetos

emisor tenga permiso para solicitar dicha operacin), o, en caso de no poder procesar el mensaje, se devolver un mensaje de error.
2.2 Clases

Una clase permite describir objetos similares mediante la definicin de sus estructuras de datos y mtodos comunes. Las clases son plantillas para objetos, permitiendo la agrupacin de objetos que comparten las mismas propiedades y comportamiento. As, existen rectngulos de varios tamaos, pero todos ellos pertenecen a la clase rectngulo, que define los atributos comunes para todos ancho y alto, a la vez que el mtodo dibujar, tambin comn para todos.
Ejemplo: las clases funcionan como plantillas de la misma forma que es posible declarar en Pascal o en C un record o struct, respectivamente; sin embargo, este record o struct no es utilizable hasta que se declara una variable o un puntero del mismo. Segn esta anloga, el record sera la clase y las variables los objetos. De hecho, en C++ esto es exactamente as. Ejemplo: la clase empleado describe los grupos de datos y la propiedades comunes a todos los empleados de una empresa. Un objeto empleado describe a un empleado particular. La clase empleado contendr mtodos como modificar_direccin_empleado, calcular_salario_empleado, ... Ejemplo: Se puede hablar de la clase Mamfero, que representa las caractersticas comunes a todos los mamferos. Para identificar a un mamfero particular en esta clase, hay que hablar de este mamfero o aquel mamfero. Ejemplo: supongamos las cartas de una baraja. Cada objeto de esta clase es distinto, pero todos ellos renen una serie de atributos comunes. Todas estn identificadas por un nmero o una letra, pertenecen a un grupo, etc. A su vez, existen varias operaciones que tambin son comunes a todas ellas: pueden ser repartidas, descartadas, etc.

Una superclase es una clase de ms alto nivel que agrupa otras clases con propiedades y funciones comunes, por tanto, los objetos (tambin llamados instancias de una clase determinada) de esas otras clases son tambin objetos (instancias) de la superclase. Las clases que son agrupadas por una superclase son sus subclases. Las propiedades de una clase deben cumplir una serie de premisas: Deben ser significativas dentro del entorno de la aplicacin. Es decir, deben servir para identificar claramente y de manera nica a cada uno de los objetos.
Ejemplo: en una aplicacin de clasificacin de libros, los atributos asociados a cada uno sern, por ejemplo: editorial, autor, nmero de edicin, ISBN, etc. Estas aplicaciones identifican claramente cada volumen. Si la aplicacin va destinada a la encuadernacin, los atributos sern: ancho, alto, largo, tipo de encuadernacin, tipo de papel, volumen, etc.

Ejemplo: en el ejemplo anterior, se identifica el mismo objeto con atributos distintos. Sera deseable identificar un objeto con todos sus atributos? Slo en el caso de que los objetos que definamos vayan a ser utilizados en ms de una aplicacin, debemos extender sus atributos ms all de lo imprescindible, con el objetivo de dar soporte a las operaciones definidas en el resto de las aplicaciones. Ejemplo: A continuacin, se muestra un pequeo programa en Java que declara una clase e instancia varios objetos (r1 y r2) de esa clase.
class rectangulo { public int ancho, alto; }; public class ppal { public static void main(String[] args) { rectangulo r1= new rectangulo; rectangulo r2 = new rectangulo; r1.ancho = 5; r1.alto = 10; r2.ancho = 6; r2.alto = 7; } };
2.2.1 Herencia

El nmero de propiedades debe ser el mnimo para realizar todas las operaciones que requiere la aplicacin.

La herencia designa la facultad de los objetos de compartir propiedades y operaciones entre ellos. Como la herencia humana, existen unos determinados objetos hijo que heredan las propiedades y atributos
1-5

Captulo 1: Programacin orientada a objetos

de otros objetos padres. La herencia es la forma normal de estructurar los programas bajo OOP y se normalmente3 se expresa a partir de las clases. Se trata de crear nuevas clases de objetos a partir de otras ya existentes, es decir, de reutilizar el comportamiento de una clase en la definicin de otras nuevas. Cualquier clase hereda la declaracin de los atributos y los mtodos de su superclase, pudiendo estas subclases especializarse aadiendo una declaraciones de atributos adicionales y declaraciones de mtodos propios o incluso cambiando los atributos y mtodos heredados.
Ejemplo: una subclase director de la clase empleado heredar toda la estructura y los mtodos de la clase original y podr contener datos o mtodos adicionales. Ejemplo: un oso es un tipo de mamfero, una casa es un tipo de bien inmueble, y quicksort es un tipo particular de algoritmo de ordenacin.

Semnticamente, la herencia denota una relacin es un.

Una de las razones para emplear la herencia es que permite la reutilizacin del cdigo de proyectos anteriores, permitiendo la modificacin (o especializacin) de aquellos aspectos que no concuerden exactamente con las necesidades de nuestra aplicacin. En las jerarquas que establecen las relaciones de herencia, a medida que descendemos de nivel, cada nivel aporta un grado ms de especializacin sobre el nivel inmediatamente superior. Para ello, el objeto hijo aporta nuevas propiedades y operaciones a las del padre, llegando incluso a redefinir alguna de las operaciones heredadas de ste. En cambio, si partimos del nivel de clases inferiores hacia los niveles superiores, cada nivel supone una generalizacin del nivel inmediatamente inferior. Existen dos tipos fundamentales de herencia: simple y mltiple. La clase que se sita en el primer nivel superior se denomina clase raz, mientras las clases de los niveles inferiores se denominan clases hoja o terminales. El resto se denominan clases intermedias. Normalmente, los objetos se instancian de clases terminales o muy cercanas a ellas. Por tanto los objetos contienen tanto miembros (atributos y mtodos) propios (definidos en su clase) como heredados.

2.2.1.1
figura:

Se produce cuando la clase que recibe la herencia tiene un slo padre, como en el ejemplo de la
FIGURA

Herencia Simple

CIRCULO

RECTANGULO

TRIANGULO

CUADRADO

descendientes. Esto quiere decir que un objeto tiene propiedades de su clase y propiedades de las clases heredadas. Las caractersticas que definen la herencia de las propiedades son: Para reducir al mximo la redundancia, una propiedad debe definirse en la posicin ms elevada posible de la jerarqua. Las excepciones no presentan ningn problema, pues pueden resolverse definiendo de nuevo la misma propiedad en un nivel ms bajo. Si un objeto puede heredar valores diferentes de una propiedad de ms de uno de sus antepasados, la heredar de su antepasado ms prximo.
3
Excepto en ciertos lenguajes Orientados a Objetos. Ver el apartado eleccin de un lenguaje OO.

De atributos: Las propiedades de una clase son heredadas automticamente por todos sus

1-6

Captulo 1: Programacin orientada a objetos

Ejemplo: Un programa en Java en el que la clase estudiante hereda de la clase persona. La herencia se indica en Java con la palabra clave extends.
class persona { public String nombre; } class estudiante extends persona { public String titulacion; } public class ppal { public static void main(String[] args) { estudiante paula = new estudiante; paula.nombre = Paula Fernndez; paula.titulacin = Ingeniera Informtica; } }

De mtodos. La herencia de los mtodos permite aumentar la reutilizacin de software y simplifica, por tanto, el diseo. Adems, facilita la programacin, reduce redundancias y simplifica la correccin de los programas.

2.2.1.2

Se produce cuando el objeto que hereda tiene ms de un padre o alguno de sus antepasados tiene varios padres. Es decir, cuando un objeto puede heredar de varios y no slo de uno como ocurre en la herencia simple.
PERSONA PROFESOR INVESTIGADOR
PROFESOR UNIVERSITARIO

Herencia Mltiple

La herencia mltiple ofrece la posibilidad de definir clases hbridas que comparten las propiedades de dos o ms clases predefinidas. Es difcil de implementar ya que para determinar si un objeto hereda una propiedad o un mtodo puede que haya que seguir caminos por ms de un padre. Adems pueden darse conflictos debidos a que un objeto herede la misma propiedad o mtodo de dos objetos situados al mismo nivel o a distinto nivel. Este tipo de situaciones se da cuando una clase hereda 2 o ms versiones de un mtodo provenientes de los distintos ancestros, y es inevitable en el caso de la herencia repetida, que se produce cuando una clase hereda de otras que a su vez heredan de una clase comn. Esta herencia suele producir los conflictos conocidos como Conflicto de nombres. Sucede cuando el nombre de un mtodo o atributo existe en ms de una clase de nivel superior: Los lenguajes de programacin resuelven as el conflicto de nombres: Smalltalk lo considera ilegal y rechaza la compilacin Eiffel permite renombrar los elementos para que no haya ambigedad. Para nuestro ejemplo, se pondra nombre_profesor, nombre_investigador y nombre_profesor_universitario. C++ exige que todas las referencias de nombre califiquen la fuente de su declaracin (es decir, se indica delante del atributo la clase de la cual proviene). Otros lenguajes utilizan: una lista de precedencia de clases, o una lista de precedencia del usuario y, si no sucede as, se fija una estrategia de bsqueda en el grafo de herencia (primero en profundidad o en amplitud). Dentro de la herencia mltiple, se pueden distinguir otros dos tipos de herencia: Herencia selectiva (o parcial) que permite decidir qu mtodos se heredan y cules no. Esto complica sintcticamente la definicin de una clase, lo que hace que sean pocos los
1-7

Ejemplo: poniendo p.profesor::nombre, p.investigador::direccin, obtendramos de p el nombre declarado en profesor y la direccin de la clase investigador.

Captulo 1: Programacin orientada a objetos


lenguajes que la adoptan.

Ejemplo C tiene 2 superclases: A y D. Mediante herencia selectiva, C hereda selectivamente algunas atributos y mtodos de A y de D.
Herencia

no selectiva que fuerza a que todos los atributos y mtodos sean heredados.

G A B C D E

Por otro lado, en trminos del comportamiento con respecto a los mtodos que se heredan, se puede hacer la distincin entre herencia estricta y no estricta, refirindose a la imposibilidad o posibilidad de redefinir el significado (modificar el cuerpo de la funcin) de un mtodo determinado, respectivamente.
2.2.2 Organizacin y relaciones entre objetos

2.2.2.1

Las clases se organizan jerrquicamente si tenemos en cuenta la relacin de herencia. Esta organizacin es simple cuando se pueda representar por medio de un rbol y compleja cuando existe herencia mltiple. En cualquier caso se pueden distinguir tres niveles diferentes de clases: situado en el punto ms elevado de la organizacin jerrquica. CLASES INTERMEDIOS, descienden directamente o indirectamente de la raz y a su vez tienen descendientes. Representan clases de objetos y reciben nombres genricos que denotan al conjunto de objetos al que representan: personal, facturas, clientes,... En general reciben el nombre de clases si descienden directamente de la raz o subclases si descienden de una clase o otra subclase. Otra clasificacin de los objetos intermedios se basa en si sus descendientes son tambin intermedios o son terminales. A los primeros se les conoce entonces como clase abstracta y a los segundos clase de objetos terminales. CLASES TERMINALES, descienden de una clase o una subclase y no tienen descendientes. Los objetos normalmente se instanciarn de estas clases.

Organizacin jerrquica

RAZ (o SUPERCLASE): Es una clase, que suele ser nico y especial, caracterizado por estar

Ejemplo: Un programa en Java en el que la clase estudiante hereda de la clase persona. Las clases creadas en Java tienen siempre, aunque no se haga explcito, una clase padre llamada Object. Object es la clase padre de persona, y persona la de estudiante. En este ejemplo estudiante es la clase terminal, aunque creamos objetos de ella y de persona.
class persona { public String nombre; } class estudiante extends persona { public String titulacion; } public class ppal { public static void main(String[] args) { estudiante paula = new estudiante; paula.nombre = Paula Fernndez; paula.titulacin = Ingeniera Informtica; } }

2.2.2.2

Una clase es padre de otra cuando existe una relacin jerrquica directa entre ellas, segn la cual la
1-8

Relaciones jerrquicas entre clases

Captulo 1: Programacin orientada a objetos

primera se encuentra situado inmediatamente encima de la segunda en el rbol jerrquico. Si una clase es padre de otra, la segundo es hija de la primera. Una organizacin jerrquica es simple cuando una clase slo puede tener un padre, y compleja cuando puede tener varios padres. Si B es padre de C, puede suceder : 1. B es un objeto intermedio, B y C son conjuntos de objetos y C es un subconjunto de B, C B. Si adems B A, entonces C A. Es decir si C es hijo de B y B es hijo de A, entonces C es descendiente de A (o lo que es lo mismo, la herencia es transitiva). 2. C es una clase terminal, C B, y B A, entonces C A. Es decir si C es hijo de B y B es hijo de A, A es antepasado de C. O dicho de otra forma: A es antepasado de B, si A es padre de B o si A es padre de un antepasado de B. B es descendiente de A, si B es hija de A o si es hija de un descendiente de A. Shaw define abstraccin como una descripcin simplificada o especificacin de un sistema que enfatiza algunos de los detalles o propiedades del mismo mientras suprime otros. Una buena abstraccin es aquella que enfatiza detalles significativos al lector o usuario y suprime detalles que son, al menos por el momento, irrelevantes o causa de distraccin. Una abstraccin denota las caractersticas esenciales de un objeto que lo distinguen de todos los dems tipos de objeto y proporciona as fronteras conceptuales respecto a la perspectiva del observador. La abstraccin es una tcnica de programacin que permite definir nuevos tipos de datos por el usuario. La esencia de la abstraccin es similar al uso de un tipo de dato de un lenguaje de programacin, cuyo uso se realiza sin saber como est representado o implementado. Las abstracciones deben ser completas, es decir, los objetos deben abstraer y encapsular tanto los datos como sus procesos. Las cosas se perciben no slo a travs de sus propiedades, sino a travs de su comportamiento: se conocern por su estado. Una abstraccin se centra en la vista externa de un objeto, de modo que sirva para separar el comportamiento esencial de un objeto de su implementacin. Definir una abstraccin significa describir una entidad del mundo real, no importa lo compleja que pueda ser, y a continuacin utilizar esta descripcin en un programa. El uso de un objeto por va de su especificacin como tipo abstracto o clase abstracta significa que, si su aspecto interno experimenta modificaciones, otras partes del sistema no se vern afectadas. Un mtodo abstracto es un mtodo que declara una funcionalidad que debe ser implementada en todas las clases derivadas de la clase en que se vaya a utilizar. En otras palabras, a travs de un mtodo tal indicamos lo que deberan poder hacer los objetos de dichas subclases. No se implementa en la clase base, sino que cada subclase debe tener su propia implementacin.
Ejemplo: Una clase cerradura esconde a vista de todos la combinacin que la abre. Es por tanto un atributo privado. Para abrir la cerradura, tenemos un mtodo pblico al que hay que pasarle la combinacin real. Para darle a la cerradura su combinacin inicial, utilizamos un constructor, un mtodo especial de Java que se llama igual que la clase y que sirve precisamente para dar valores iniciales.
import java.io.*; class cerradura { private int combinacion; public bool abreCerradura(int c) { if (c==combinacion) return true; else return false; } cerradura(int c) { combinacin = c; } } public class ppal { public static void main(String[] args) { cerradura candado = new cerradura(123);

2.2.2.3

Abstraccin

System.out.println(candado.abreCerradura(456));//false System.out.println(candado.abreCerradura(123));//true } }

1-9

Captulo 1: Programacin orientada a objetos

Ejemplo: Un ejemplo se muestra a continuacin en Java, donde se declara la clase abstracta Figura. Las figuras concretas, como Crculo o Rectngulo se derivan de la clase Figura. La clase Figura puede contener atributos comunes a todas las clases; tambin se pueden declarar mtodos que se implementan genricamente en la clase abstracta Figura. Pero por ejemplo, el mtodo rea es imposible indicar cmo calcularla en la clase abstracta, es dependiente de las figuras concretas, por lo tanto se define como mtodo abstracto y su implementacin se define en las clases derivadas Crculo y Rectngulo. Como contrapartida, no es posible instanciar objetos de la clase figura.
import java.io.*; abstract class figura { abstract public float calculaArea(); } class rectangulo extends figura { private float ancho, alto; public float calculaArea() { return ancho * alto; } rectangulo(int a, int l) { ancho = a; largo = l; } } class circulo extends figura { private float radio; public float calculaArea() { return radio*radio*3.1415927; } circulo(int r) { radio = r;} } public class ppal { public static void main(String[] args) { rectangulo r = new rectngulo(6,10); circulo c = new circulo(5); System.out.println(r.calculaArea()); // 60 System.out.println(c.calculaArea()); // 78.53 } }

2.2.3 Polimorfismo y Ligadura Dinmica


2.2.3.1
En un sistema orientado a objetos los mismos nombres pueden ser utilizados para denominar diferentes cosas, en diferentes contextos. Esta propiedad es el polimorfismo, la cual dota a los sistemas de una gran flexibilidad. El polimorfismo indica la posibilidad de definir varias operaciones con el mismo nombre, diferencindolo nicamente en los parmetros de entrada. Dependiendo del objeto que se introduzca como parmetro de entrada, se elegir automticamente cul de las operaciones se va a realizar.
Ejemplo: director, secretaria, contable son subclases de empleado. El mtodo calcular_salario_empleado puede ser diferente para cada subclase, pero comn a todos ellos (es decir, a todos ellos se les puede calcular el sueldo de una u otra forma). Ejemplo: esto es lo que sucede cuando el signo + se emplea para denotar la adicin entera o real, de modo que el mensaje sumar 1 invoca procedimientos completamente diferentes, pero conviene utilizar la misma notacin + para ambos propsitos, porque contribuye a su comprensin y hace que el lenguaje sea ms fcil de aprender y recordar.

Polimorfismo

En algunos lenguajes OOP esta propiedad viene asociada a otra conocida como operator overloading (sobrecarga de operadores), que permite la redefinicin de operadores como +, -", ... Tambin permiten sobrecarga de mtodos, es decir, varios mtodos que tienen el mismo nombre (la misma signatura), pero el nmero de parmetros o los tipos de la lista de parmetros es distinto. Esta propiedad es una poderosa herramienta para simplificar el diseo de aplicaciones, pero hay que tratarla con precaucin. El error ms comn provocado por el uso del polimorfismo es que, en un afn de simplificar, si se utilizan siempre los mismos nombres en las operaciones, desvirtualizamos el nombre del operador. La gran ventaja del polimorfismo es permitir la realizacin de las clases que definen un programa de forma totalmente independiente al programa donde se utilizan. El polimorfismo facilita la reutilizacin de software, haciendo posible implementar software genrico que se pueda aplicar no slo a objetos existentes, sino tambin a objetos que sean aadidos en etapas futuras del desarrollo.
(..) public class ppal {

Ejemplo: Tomando las clases que se declaran en el ejemplo de la seccin Abstraccin, es decir, figura, rectngulo y crculo, podemos hacer el programa siguiente. El mtodo calcula_area puede recibir objetos de cualquier clase, siempre que stas desciendan de figura.

1-10

Captulo 1: Programacin orientada a objetos


public static float calcula_area(figura f) { return f.calculaArea(); } public static void main(String[] args) { rectangulo r = new rectangulo(5,6); circulo c = new circulo(7); System.out.println(calcula_area(c)); System.out.println(calcula_area(r)); }

Ejemplo: Supongamos un programa en Java como el de la seccin Polimorfismo. Ahora, en lugar de crear dos objetos, crearemos un objeto rectngulo o crculo segn el usuario introduzca una opcin del men. En tiempo de compilacin es imposible saber la clase del objeto al que apunta la referencia f de la clase figura. Por tanto, es imposible hasta el momento de la ejecucin que mtodo de calcularArea se va a activar sobre el mismo.
public class ppal { public static float calcula_area(figura f) { return f.calculaArea(); } public static void main(String[] args) { figura f; // referencia a figura int opcion; // // // if

Un mensaje es una peticin enviada por un objeto a otro objeto para que active un mtodo. El nombre del objeto que enva el mensaje no aparece en el mismo. Realmente no son los objetos los que envan mensajes a otros objetos, sino que los mensajes se originan en un mtodo, que es la parte activa del objeto. Al proceso de seleccionar el mtodo apropiado en base al tipo de objeto se llama ligadura. Si esta puede aplazarse hasta el tiempo de ejecucin, la seleccin se llama ligadura dinmica. Es decir, si todos los objetos son asociados estticamente a una clase, y no se tiene en cuenta los posibles cambios de referencia, el mtodo a aplicar puede determinarse en tiempo de compilacin, sin que el sistema sufra ningn tipo de sobrecarga. Sin embargo, en la mayora de los casos, es interesante que los cambios de referencia producidos en tiempo de ejecucin influyan en el cmputo. La ligadura esttica significa que se fijan los tipos de todas las variables y expresiones en tiempo de compilacin; la ligadura dinmica (tambin llamada ligadura tarda) significa que los tipos de las variables y expresiones no se conocen hasta el tiempo de ejecucin. La ligadura dinmica es la capacidad de retrasar hasta el instante de la recepcin del mensaje la decisin sobre la clase del objeto que lo recibe y el mtodo concreto que debe de ejecutarse.

2.2.3.2

Ligadura Dinmica

Presentar men Pedir una opcin al usuario Almacenar la opcin en opcion (opcion==1) f = new rectngulo(6,7); else f = new circulo(8); System.out.println(f.calculaArea()); } }
3 Lenguajes Orientados a Objetos.

3.1

Orgenes de los lenguajes orientados a objetos

Una de las opiniones ms difundidas hoy en da se basa en considerar la orientacin a objetos como una evolucin natural de distintos aspectos, como el ocultamiento de la informacin o la descomposicin modular. Algunos lenguajes de programacin han contribuido a la evolucin de los lenguajes orientados a objetos: LISP, en los aos 50, es un lenguaje de Inteligencia Artificial que introdujo el concepto de ligadura dinmica y la ventaja de un entorno de desarrollo interactivo. SIMULA-67, derivado de ALGOL-60, incorpor los conceptos de: Encapsulacin y objetos Verificacin esttica de tipos
1-11

Captulo 1: Programacin orientada a objetos

Clases (como patrones de objetos) Los mecanismos de herencia. El polimorfismo Posteriormente en lenguajes como Ada y Modula-2 se desarroll la abstraccin de datos. Pero sin duda alguna el lenguaje que ha contribuido enormemente al impulso del paradigma de la orientacin a objetos ha sido SMALLTALK (basado en SIMULA), proyectado inicialmente en el Centro de Investigacin Xerox de Palo Alto a principios de los 70, evolucionando a travs de varios lanzamientos realizados por PARC y culminando con el producto Smalltalk-80 en el 81. El empuje definitivo vino de la mano de extensiones orientadas a objetos para lenguajes tradicionalmente muy implantados como son PASCAL Y C.

3.2 Clasificacin

Existen varias clasificaciones de los lenguajes de OOP: 1 CLASIFICACIN: PUROS: Un lenguaje orientado a objetos es puro si no permite salirse de la orientacin a objetos para realizar programacin clsica. En l no existen datos que no formen parte de objetos y no hay otra forma de manejarlos mas que a travs de mensajes. Este grupo incluye CLOS, SMALLTALK, ACTOR, EIFFEL, SIMULA. Son lenguajes potentes y flexibles pero lentos HBRIDOS: Un lenguaje es hbrido si permite programacin clsica salindose del paradigma de la orientacin a objetos. En estos lenguajes se complementa la programacin clsica con la programacin orientada a objetos y esta es posible gracias a extensiones semnticas del lenguaje. Sus principales ejemplos son: C++, OBJETIVE-C, OBJECT ORIENTED COBOL, OBJECT PASCAL, TURBO PASCAL, VISUAL OBJECT, DELPHI, JAVA. En general los lenguajes puros resaltan la exploracin y el prototipado rpido y los hbridos ponen nfasis en la velocidad de ejecucin. Ambos tipos suelen basarse en potentes libreras de clases y herramientas de desarrollo. Aunque pierden algunas caractersticas propias de la orientacin a objetos, son ms rpidos. SIMILARES: Adems de los lenguajes orientados a objetos existen los lenguajes similares a objetos, como HYPERCAR de Apple Computer, que sirven para acercar a los programadores al paradigma orientado a objetos. 2 CLASIFICACIN: Segn su grado de orientacin a objetos se dividen en: BASADOS EN OBJETOS: su sintaxis y semntica soportan la creacin de objetos (ADA83, ACTOR, VISUAL BASIC 4.0). Soporta el encapsulamiento y la identidad de objetos; es decir, los mtodos y atributos se ocultan dentro y se hacen privados para los objetos, y estos objetos tienen identificadores nicos. BASADOS EN CLASES: incluyen el concepto de clases (abstraccin) de objetos, adems de soportar la funcionalidad de los objetos (CLU) ORIENTADOS A OBJETOS: soportan la funcionalidad de los objetos, su manipulacin mediante clases y el manejo de stas mediante herencia (SIMULA, C++, EIFFEL, SMALLTALK, TURBO PASCAL, DELPHI, OO COBOL, JAVA) Adems de las caractersticas de funcionalidad de los objetos, definicin de clases y herencia, los lenguajes orientados a objetos deben tener (algunas o todas) las siguientes caractersticas: ENCAPSULACIN COMPROBACIN DE TIPOS (CLASES): Un LOO puede tener comprobacin estricta de tipos, comprobacin dbil de tipos, o incluso no tener tipos. Comprobacin estricta quiere decir que la concordancia se impone de manera estricta: no puede llamarse a una operacin sobre un objeto a menos que en la clase o superclases del objeto est definida la plantilla de esa operacin. Los lenguajes con comprobacin dbil de tipos tienden hacia la comprobacin estricta, pero es posible ignorar o suprimir las reglas sobre tipos. En un lenguaje sin tipos se puede enviar cualquier mensaje a cualquier clase (aunque sta desconozca cmo responder al
1-12

Captulo 1: Programacin orientada a objetos

mensaje). COMPILACIN INCREMENTAL (por partes) GENERICIDAD (reusabilidad, posibilidad de definir mdulos parametrizados. Ej: una lista es un tipo genrico; puede ser una lista de nombres, de enteros o de algo especfico, como nombre de empleados) PASO DE MENSAJES ENTRE OBJETOS POLIMORFISMO RECOLECCIN DE BASURA: Cuando se utiliza asignacin esttica de memoria, la liberacin de sta se produce cuando se completa la ejecucin del programa. (Variables Globales). Cuando se utiliza asignacin dinmica de memoria la liberacin se produce cuando se completa la ejecucin de un bloque (Variables Locales). Con los mtodos de asignacin de memoria heap controlados explcitamente: hay dos posibilidades, que el programador indica exactamente cuando se libera. O que el sistema implemente un recolector de basura (garbage collection). MANEJO DE EXCEPCIONES CONCURRENCIA: En muchas ocasiones, un sistema automatizado puede tener que manejar muchos eventos diferentes simultneamente. En este caso, es habitual la utilizacin de procesadores capaces de realizar multitarea. Un solo proceso llamado hilo (thread) de control- es la raz a partir de la cual se producen acciones dinmicas independientes dentro del sistema. Todo programa tiene al menos un hilo de control, pero un sistema que admita concurrencia puede tener muchos de tales hilos (multithread): algunos son transitorios, y otros permanecen durante todo el ciclo de vida de la ejecucin del sistema. Los sistemas con mltiples CPUs permiten hilos de control verdaderamente concurrentes, mientras que los sistemas que se ejecutan en una sola CPU se limitan a conseguir hilos concurrentes de control mediante algn algoritmo de tiempo compartido. PERSISTENCIA: La persistencia es la propiedad de un objeto por la que su existencia trasciende el tiempo (es decir, el objeto contina existiendo despus de que su creador deja de existir) y/o el espacio (es decir, la posicin del objeto vara con respecto al espacio de direcciones en el que fue creado).
3.3

Las principales VENTAJAS de programar mediante orientacin a objetos son: Un lenguaje de programacin que soporta el paradigma OO proporciona al desarrollador de software una forma natural de modelar el mundo real, utilizando para ello clases de objetos. Los objetos bien diseados en los sistemas OO constituyen la base para otros sistemas que se ensamblan, en gran parte, a partir de mdulos reutilizables, lo que redunda en una mayor productividad. Esta es, quizs, la ventaja ms conocida de la tecnologa de objetos. La reutilizacin de clases existentes, que han sido probadas en proyectos anteriores, conduce a la elaboracin de sistemas de mayor calidad, que satisfacen mejor los requisitos de negocios y contienen menos errores. El trabajo de programacin es ms fcil en base al uso de bibliotecas de clases predefinidas. La POO, y la herencia en particular, hacen que sea posible utilizar y definir de forma clara mdulos funcionalmente incompletos y, luego, permiten su extensin sin trastornar la operacin de otros mdulos o de sus clientes. Esto hace que los sistemas sean ms flexibles, ms fcilmente extensibles y de mantenimiento menos costoso. La convencin de paso de mensajes para la comunicacin entre objetos lleva a que las descripciones de la interfaz entre mdulos y sistemas externos se haga ms fcil. Tambin facilita la descripcin y la construccin de Interfaces Grficas de Usuario. El ocultamiento de informacin contribuye a construir sistemas seguros. Los posibles INCONVENIENTES son: Un programa orientado a objetos se ejecuta ms despacio sobre todo debido a la ligadura
1-13

Ventajas e inconvenientes.

Captulo 1: Programacin orientada a objetos

dinmica y al polimorfismo. El desarrollador de software tiene que conocer las bibliotecas de clases para sacar rendimiento al lenguaje.

3.4 Principales lenguajes orientados a objetos 3.4.1 Simula


Simula, que anteriormente se denominaba Simula 67 fue, probablemente, el primer lenguaje que present las nociones de clase y herencia jerrquica. No se admite la herencia mltiple. El ocultamiento de informacin se lleva a cabo protegiendo una caracterstica, lo cual, a su vez, evita que sea heredada en lo sucesivo. Se admite el polimorfismo en forma de sobrecarga. La comprobacin de tipos se puede realizar, bien estticamente en el momento de la compilacin, para mayor eficiencia, o bien en el momento de la ejecucin si se define una caracterstica como virtual. El sistema necesita llevar a cabo la recoleccin de basura de vez en cuando, es decir, necesita reutilizar la memoria que fue ocupada por instancias asignadas anteriormente, pero que ya no se estn utilizando. Hace ms nfasis en los procesos que en los datos, pero Simula es responsable de muchas de las ideas que informaron a sus descendientes, sobre todo la idea de clases, instancias y herencia. Las idea de abstraccin est implcita, pero las nociones, como el paso de mensajes, tuvieron que esperar la llegada de Smalltalk. En resumen, las caractersticas de Simula son: Comprobacin de tipos /ligadura Polimorfismo Ocultamiento de la informacin Concurrencia Herencia Herencia mltiple Recoleccin de basura Persistencia Genericidad Bibliotecas de objetos Temprana o tarda S S S S No S No No Simulacin

3.4.2 Smalltalk

Es el lenguaje considerado como la representacin ms pura del ideal orientado a objetos. De hecho, Smalltalk no es solamente un lenguaje, sino todo un entorno completo de programacin, que incluye numerosas libreras de clases, contemplndose las abstracciones bsicas como colecciones o diccionarios, as como clases grficas para el manejo de ventanas, barras de desplazamiento, etc. Adems es un lenguaje casi imposible de separar de su entorno de desarrollo. Origin gran parte de las definiciones de los conceptos bsicos orientados a objetos de hoy en da: objeto, clase, mtodo, mensaje, herencia. Influenciados por Simula, sus diseadores tomaron la nocin de objeto llevndola hasta el extremo, y declararon que todo debera ser un objeto. As, no existe otra forma de manejar datos que a travs de objetos y mediante el envo de mensajes. Incluso las clases son consideradas como objetos. Para mantener la coherencia interna de la implementacin se introduce el concepto de metaclase. (a cada clase le corresponde un objeto virtual que es su metaclase, del que la clase es un caso particular). El nico concepto que no contempla es la herencia mltiple. Necesita recoleccin de basura, y utiliza en su mximo grado la ligadura dinmica, permitiendo al usuario enviar cualquier mensaje a cualquier objeto. Smalltalk es un lenguaje sin tipos, no existen declaraciones de tipo de variables y no se realiza ninguna comprobacin estricta de tipos. De este modo los errores, que surgen cuando un objeto recibe un
1-14

Captulo 1: Programacin orientada a objetos

mensaje que no pueda resolver, por ejemplo, se procesan en su totalidad en el momento de la ejecucin. Como aspecto algo especial, las propiedades en Smalltalk pueden ser de dos tipos: privadas, que slo conocen el propio objeto y sus mtodos pblicas, o de acceso permitido desde otros objetos. Las caractersticas de Smalltalk podran, entonces, resumirse as: Comprobacin de tipos /ligadura Polimorfismo Ocultamiento de la informacin Concurrencia Herencia Herencia mltiple Recoleccin de basura Persistencia Genericidad Bibliotecas de objetos Tarda S S Escasa S No S No No Grficas en su mayora

VENTAJAS Smalltalk es un lenguaje puro orientado a objetos Excelente entorno de ejecucin, que contiene depuradores, visores y un completo acceso a la jerarqua de clases. La ligadura dinmica soporta el polimorfismo y, por tanto, una gran flexibilidad. La implementacin a travs de un intrprete facilita la labor de desarrollo de programas. Las clases son aadidas, corregidas y depuradas de forma iterativa. Tiene una sintaxis simple, donde las variables y los atributos no necesitan tener un tipo asociado. Es muy uniforme pues todo est definido en principio como objeto, incluyendo las propias clases DESVENTAJAS Es un lenguaje interpretado, lo que reduce su rendimiento y dificulta su comercializacin Al proporcionar su propio entorno operativo, interacta mal con otro tipo de software o hardware. Los errores por paso de mensajes solo se pueden detectar en tiempo de ejecucin.

3.4.3 Objective-C

Es un lenguaje hbrido diseado para conjugar construcciones de objetos inspiradas en Smalltalk con la potencia del C. Soporta los mecanismos bsicos de la orientacin a objetos tales como objeto, clase, mtodo y mensaje, subclase y herencia. No se admite la herencia mltiple, pero sta puede ser construida por el programador. Las extensiones semnticas que incorpora al C son bsicamente la definicin de clase (class), un nuevo tipo de datos (el identificador de objetos), y una nueva operacin (el paso de mensajes). En este lenguaje cada definicin de clase consta de dos archivos, uno de interfaz y otro de implementacin. El primero define lo que est disponible para los usuarios de la clase: su nombre, el nombre de su clase padre, la declaracin de las variables modelo (propiedades propias de cada objeto) y de los mtodos para los objetos de la clase. El segundo contiene la implementacin real de los mtodos. Los mensajes se encierran entre corchetes con el objeto receptor en primer lugar y a continuacin el mtodo. Al igual que C++, soporta dos categoras de variables de instancia, privadas y pblicas, por defecto todas son privadas, es decir accesibles solo a travs de los mtodos de la clase.
1-15

Captulo 1: Programacin orientada a objetos

Objetive-C posee dos caractersticas importantes, su transportabilidad (a nivel de cdigo objeto) y su disponibilidad en una amplia gama de computadores, dado que el compilador acepta cdigo fuente en Objetive-C y genera una salida en cdigo fuente C (que cuenta con compiladores en casi todas las plataformas), que puede ser compilado para ejecutarlo en una mquina destino concreta. Sus caractersticas se pueden resumir as: Comprobacin de tipos /ligadura Polimorfismo Ocultamiento de la informacin Concurrencia Herencia Herencia mltiple Recoleccin de basura Persistencia Genericidad Bibliotecas de objetos Temprana o tarda S S Escasa S No S No No Unas pocas

Es un lenguaje desarrollado en los laboratorios Bell por Bjarne Stroustrup, basndose en el lenguaje C. Ms tarde, su control directo pas a manos de la agencia de estndares ANSI, en concordancia con la ISO. Se centra sobre todo en la eficiencia, disear cdigo eficaz y proporcionar, por tanto, caractersticas que permitan la manipulacin del hardware y de la memoria a bajo nivel. Fue diseado desde el principio para ser realizado como un compilador de cdigo fuente ms que como un interprete de cdigo intermedio. El cdigo generado por C++ es tan eficiente como el de C, salvo en el tema de las llamadas virtuales a funciones. C++ puede considerarse un lenguaje multiparadigma en el que el programador puede escoger el estilo de la programacin y establecer las caractersticas del lenguaje para satisfacer el problema. Soporta los conceptos bsicos de la orientacin a objetos: objeto, clase, mtodo, mensaje, subclase y herencia, incluso herencia mltiple. Cada uno de los componentes de una clase se denominan miembro (member). Los atributos se llaman miembros de datos (data-members) y los mtodos miembros funcionales (function-members). Se introduce el concepto de niveles de acceso. El acceso a cada uno de los miembros de una clase, atributos o mtodos, puede pertenecer a uno de los siguientes niveles: Pblico, se puede utilizar en cualquier lugar donde se tenga acceso a la clase. Privado, slo se puede utilizar en mtodos declarados dentro de la misma clase. Protegido, se puede utilizar en mtodos declarados dentro de la misma clase y en mtodos de clases descendientes de ella. Las clases en C++ suelen disponer de dos tipos de mtodos especiales, los llamados constructores y los destructores, para crear o destruir respectivamente objetos de la clase. Adems una clase puede contener constructores de sobrecarga de operador. C++ proporciona adems mecanismos para implementar la ligadura dinmica, basados en la definicin de mtodos virtuales dentro de una jerarqua de herencia. La forma de proceder consiste en especificar un mtodo como virtual en una clase padre. Redefiniendo despus en una o ms subclases, el compilador especificar que cualquier mensaje a este mtodo este dinmicamente ligado durante la compilacin, lo que garantiza que en la ejecucin se escoja por lo menos un mtodo de los definidos. El programador puede optar por escoger ligadura esttica o dinmica en determinadas partes del programa, a diferencia de Smalltalk donde cualquier mensaje se puede enviar a cualquier objeto sin la garanta de que est definido para l. C++ carece de recoleccin automtica de basura. Tal caracterstica debera ser construida por el programador, o debera proporcionarla un entorno con bibliotecas de cdigo adecuadas.
1-16

3.4.4 C++

Captulo 1: Programacin orientada a objetos

Adems, desde la aprobacin de su estndar en 1998, C++ incorpora unas bibliotecas de estructuras de datos como vectores, listas, pilas ... etc en su librera. Las caractersticas de C++ se resumen as: Comprobacin de tipos /ligadura Temprana o tarda Polimorfismo S Ocultamiento de la informacin S Concurrencia Escasa Herencia S Herencia mltiple S Recoleccin de basura No Persistencia No Genericidad S (plantillas) Bibliotecas de objetos Unas pocas

3.4.5 Ada
EEUU.

Es un lenguaje basado en objetos. Fue desarrollado a peticin del Departamento de Defensa de

No permite que los objetos sean pasados como parmetros, lo que significa que no admite por completo la abstraccin de datos. Sin embargo, s que admite la sobrecarga de operadores y proporciona la recoleccin de basura como opcin. Ada no ofrece apoyo directo para la herencia, pero es posible utilizar paquetes genricos para construirla de forma limitada. Aun cuando es posible definir subtipos y tipos derivados, no es capaz tampoco de extender los tipos existentes aadiendo nuevos mtodos y atributos. Esto da lugar a la necesidad de duplicar cdigo. No admite ligadura dinmica y hace una comprobacin estricta de tipos, a efectos de mayor eficiencia y seguridad. Sus caractersticas generales son, por tanto: Comprobacin de tipos /ligadura Temprana Polimorfismo S Ocultamiento de la informacin S Concurrencia Difcil Herencia No Herencia mltiple No Recoleccin de basura No Persistencia No Genericidad S Bibliotecas de objetos Unas pocas

3.4.6 Object-Oriented Pascal.

Al igual que C++, es un lenguaje hbrido, basado en extensiones semnticas de PASCAL. Los objetos son registros de Pascal que encapsulan procedimientos y funciones. Solo admite herencia simple y ofrece la recoleccin de basura como caracterstica incorporada. Sus caractersticas se resumen en el siguiente cuadro: Comprobacin de tipos /ligadura Tarda Polimorfismo S Ocultamiento de la informacin S Concurrencia No Herencia Basada en clases Herencia mltiple No Recoleccin de basura S
1-17

Captulo 1: Programacin orientada a objetos

Persistencia Genericidad Bibliotecas de objetos

No No Unas pocas

3.4.7 Turbo Pascal

Es una extensin de Pascal realizada por Borland Intl. (ahora Inprise) con la mayora de las caractersticas orientadas a objetos. Las diferentes versiones soportan los mecanismos fundamentales de la orientacin a objetos: objeto, clase, mtodos, mensajes y polimorfismo y herencia. Turbo Pascal incluye capacidades derivadas de C++ como los mtodos estticos o virtuales, y constructores y destructores. Sin embargo, ninguna versin soporta actualmente la herencia mltiple. Es muy popular debido a la enorme popularidad que tuvo este producto de Borland. Una posibilidad til que incorporan la mayora de las versiones es la de almacenar clases en archivos separados, llamados unidades (tomadas de Modula-2), con secciones a su vez pblicas y privadas, las cuales pueden ser compiladas por separado y constituir verdaderas libreras de clases. Comprobacin de tipos /ligadura Temprana o tarda Polimorfismo S Ocultamiento de la informacin S Concurrencia No Herencia S Herencia mltiple No Recoleccin de basura No Persistencia No Genericidad No Bibliotecas de objetos Unas pocas

3.4.8 Eiffel

Es un lenguaje orientado a objetos, escrito especficamente, y que intenta tratar a conciencia los temas de correccin, robustez, transportabilidad y eficiencia. A diferencia de Smalltalk y Objective-C, en Eiffel las clases no son objetos. Esto hace posible utilizar tipos estticos que ayuden a eliminar los errores en el momento de la ejecucin y, tambin, ayuda a mejorar la eficiencia. Las clases describen la realizacin de los tipos abstractos de datos. Se definen en el momento de la compilacin, y pueden crear instancias del tipo (objetos) en el momento de la ejecucin. Una de sus ventajas la constituye la robustez de sus herramientas de desarrollo, tipado completo y herencia mltiple. Esta ltima es soportada con funciones del lenguaje que resuelven conflictos de nombres. Cuando una clase hereda de dos padres que tienen variables de instancia con el mismo nombre, el programador puede cambiar el nombre de una de las variables de instancia, de forma que ambas variables puedan utilizarse sin conflicto en la subclase. Adems de resolver conflictos entre nombres, el cambio de nombre puede utilizarse para proporcionar un conjunto ms adecuado y consistente de nombres para los servicios que ofrece una clase. Eiffel tiene comprobacin de tipos durante la compilacin, garantizando que en la ejecucin ningn mensaje se enve a un objeto que no lo reconozca y si hay varios mtodos con el mismo nombre se escoja el adecuado. Para aumentar su utilidad incluye un mecanismo de tratamiento de excepciones. A una rutina pueden aadrsele afirmaciones que expresen condiciones previas (pre-condiciones) o condiciones posteriores (post-condiciones). Las afirmaciones se heredan de la misma forma que se heredan los mtodos y pueden ser activadas o desactivadas con opciones de compilacin. Cuando ocurre una excepcin durante la ejecucin de una rutina, como violar una pre-condicin o una post-condicin, se llama automticamente a la clusula de rescate de la rutina que ser la encargada de limpiar el entorno o terminar o de cambiar las condiciones y ejecutar de nuevo la rutina. Admite herencia. Se pueden especificar condiciones previas y posteriores para crear mdulos seguros. Se admite la herencia mltiple, pero los conflictos de herencia no se resuelven, porque los
1-18

Captulo 1: Programacin orientada a objetos

mtodos o los atributos heredados de los antecesores deben cambiar de nombre en el descendiente. Eiffel dispone de un mecanismo para la recoleccin automtica de basura, que libera el espacio ocupado por objetos no necesarios para la aplicacin. Su entorno de desarrollo incluye bibliotecas de clases, visor de clases, editor integrado y herramientas de gestin de la configuracin. Las caractersticas de Eiffel se pueden resumir as: Comprobacin de tipos /ligadura Temprana Polimorfismo S Ocultamiento de la informacin S Concurrencia No Herencia S Herencia mltiple S Recoleccin de basura S Persistencia Algo Genericidad S Bibliotecas de objetos Unas pocas VENTAJAS Es un lenguaje orientado a objetos puro Es un lenguaje orientado al diseo de grandes aplicaciones. Las propiedades vistas le hacen ideal para el diseo de aplicaciones en grupos de trabajo Su compatibilidad con C asegura su portabilidad hacia otros sistemas operativos. INCONVENIENTES El manejo de la memoria, un punto delicado en todos los lenguajes orientados a objetos, no es transparente como en el caso de Smalltalk. Las libreras de clases son reducidas. El rendimiento es mayor que el de Smalltalk, pero al tener que incluir un mdulo run-time dentro del ejecutable, su tamao crece y su rendimiento baja. Java es un lenguaje de programacin orientado a objetos desarrollado por la compaa Sun Microsystems. Basado en C++, el lenguaje Java se dise para ser pequeo, sencillo y portable a diferentes plataformas y sistemas operativos. El rpido crecimiento de Internet y el deseo de los programadores por hacer dinmicas las pginas HTML ha hecho que Java se haya convertido en un medio potente y popular de crear aplicaciones en Internet. Java permite crear pginas en Internet funcionales, dinmicas y en general ms interesantes que las creadas con la utilizacin del lenguaje HTML. Java tambin permite la creacin de aplicaciones totalmente funcionales, de la misma forma que otros programas como C / C++, Pascal, etc. Debajo de toda esa innovacin que supuso la aparicin de Java, se esconde una compleja tecnologa basada en una mquina virtual y sistema de seguridad.

3.4.9 Java

3.4.9.1

Java se cre con la intencin de desarrollar un lenguaje que fuera independiente del sistema o plataforma informtica en el que se utilizase. En un principio se pens como lenguaje de programacin para desarrollar software de aparatos electrnicos como tostadoras u hornos microondas y, fundamentalmente, televisin interactiva. El software de estos tipos de aparatos debera poder funcionar con nuevos procesadores que se fueran desarrollando. Otros requisitos importantes eran la fiabilidad del cdigo y la facilidad de desarrollo. Los lenguajes convencionales como C o C++ no sirven para esta funcin, pues son dependientes del sistema lo que provoca que cada programa tenga que compilarse para cada procesador diferente. Uno de los miembros del equipo de Sun que trabajaba en estos problemas, James Gosling, haba estado trabajando anteriormente en su tiempo libre en un lenguaje de programacin que l haba llamado
1-19

Un poco de historia

Captulo 1: Programacin orientada a objetos

Oak, segn parece el nombre se debe al roble que se vea por la ventana de su casa, que, partiendo de C++, intentaba mejorar su eficiencia. Oak era un lenguaje bastante sencillo, fiable e independiente de la arquitectura, por lo que Gosling decidi mejorar sus caractersticas y utilizarlo. En 1993, cuando se segua trabajando en este lenguaje, apareci el boom de Internet. El equipo que desarrollaba Oak pens que un lenguaje independiente de la arquitectura sera lo ideal para programar en Internet, ya que los programas podran funcionar en cualquier clase de ordenador que estuviese conectado a la red. Tras un cambio de nombre y algunos de diseo, el lenguaje Java fue presentado en sociedad en agosto de 1995. Las caractersticas del lenguaje Java como fiabilidad (desarrollo de aplicaciones robustas) y portabilidad (desarrollo de programas multiplataforma) son idneas para el desarrollo de aplicaciones basadas en la Web debido a la inherente heterogeneidad de las mquinas que estn conectadas a Internet, lo que permite la ejecucin fiable y segura de las aplicaciones desarrolladas sin tener en cuenta la plataforma en la que se va a ejecutar. Este conjunto de caractersticas ha llevado a convertir a Java en uno de los lenguajes ms utilizados para el desarrollo de aplicaciones Web.

3.4.9.2

Las caractersticas que posee Java respecto a otros lenguajes de programacin son: 3.4.9.2.1 Simple Java ofrece toda la funcionalidad de un lenguaje potente, pero sin las caractersticas menos usadas y ms confusas de stos. C++ es un lenguaje que adolece de falta de seguridad, pero C y C++ son lenguajes ms difundidos, por ello Java se dise para ser parecido a C++ y as facilitar un rpido y fcil aprendizaje. Java elimina muchas de las caractersticas de otros lenguajes como C++, para mantener reducidas las especificaciones del lenguaje y aadir caractersticas muy tiles como el garbage collector (recolector de basura). No es necesario preocuparse de liberar memoria, el recolector se encarga de ello y como es un thread de baja prioridad, cuando entra en accin, permite liberar bloques de memoria muy grandes, lo que reduce la fragmentacin de la memoria. Java reduce en un 50% los errores ms comunes de programacin con lenguajes como C y C++ al eliminar muchas de las caractersticas de stos, entre las que destacan: aritmtica de punteros no existen referencias registros (struct) definicin de tipos (typedef) macros (#define) necesidad de liberar memoria (free) Los arrays y strings son objetos. 3.4.9.2.2 Orientado a Objetos Desde su diseo, Java es concebido como un lenguaje de programacin orientado a objetos. Esto se debe a la facilidad conceptual y de mantenimiento que provee esta visin del sistema (no como la estructurada que, concibe la realidad desde otro punto de vista no tan natural como el de objetos, dificultando el mantenimiento), y a la buena integracin entre el paradigma orientado a objetos y los objetivos iniciales del lenguaje Java, como programacin distribuida y cliente/servidor. Al ser Java orientado a objetos, ste hereda todas o casi todas las ventajas (y desventajas) de este paradigma, principalmente en lo que respecta a la ingeniera del software. De esta manera, se facilita la tarea de anlisis y diseo del sistema, obteniendo al final de un modelo ms claro y manejable. Adems el desarrollo y mantenimiento es ms rpido y fcil, lo que permite abaratar costes de desarrollo, implementacin y mantenimiento final. Java trabaja con sus datos como objetos y con interfaces a esos objetos. Soporta las caractersticas

Caractersticas

1-20

Captulo 1: Programacin orientada a objetos

propias del paradigma orientado a objetos: encapsulacin1, polimorfismo2 y herencia4. Las plantillas de objetos son llamadas clases y sus copias, instancias de objetos. Estas instancias necesitan ser construidas y destruidas en espacios de memoria. Java incorpora funcionalidades como por ejemplo, la resolucin dinmica de mtodos. En C++ se suele trabajar con libreras dinmicas (DLLs) que obligan a recompilar la aplicacin cuando se retocan las funciones que se encuentran en su interior. Este inconveniente es resuelto por Java mediante una interfaz especfica llamada RTTI (RunTime Type Identification) que define la interaccin entre objetos excluyendo variables de instancias o implementacin de mtodos. Las clases en Java tienen una representacin en el runtime que permite a los programadores interrogar por el tipo de clase y enlazar dinmicamente la clase con el resultado de la bsqueda. 3.4.9.2.3 Distribuido Java se ha construido con extensas capacidades de interconexin TCP/IP. Existen libreras de rutinas para acceder e interactuar con protocolos como http y ftp. Esto permite a los programadores acceder a la informacin a travs de la red con tanta facilidad como a los ficheros locales. Java en s no es distribuido, sino que proporciona las libreras y herramientas para que los programas puedan ser distribuidos, es decir, que corran en varias mquinas, interactuando. Java fue diseado con especial nfasis en el desarrollo de aplicaciones de red. Por ejemplo, la clase URL permite que una aplicacin acceda a objetos remotos en la red. Con Java es tan fcil abrir un fichero remoto como uno real. Tambin soporta conexiones de red a travs de la clase Socket, que permite la creacin de servidores y clientes distribuidos. 3.4.9.2.4 Arquitectura Neutral y Portabilidad Los programas compilados con Java se pueden utilizar en cualquier plataforma o mquina que tenga implementado un intrprete de Java (portabilidad). Para ello, al compilar el cdigo fuente se genera byte-code independiente de cualquier plataforma fsica real, independiente de cualquier sistema operativo. El compilador es diferente dependiendo de la plataforma en la que se trabaje, pero el producto final de la compilacin es el mismo. El Bytecode se puede interpretar en cualquier plataforma, utilizando para ello un intrprete (runtime) diseado para la plataforma en cuestin, sin importar en modo alguno la mquina donde haya sido generado, capaz de transformar este cdigo en otro que entienda la mquina local. Esto se conoce como Mquina Virtual Java Java Virtual Machine ( ).
Figura 1

Encapsulacin: Integracin entre datos y mtodos en una sola unidad. Adems, propiedad que permite asegurar que estn ocultas aquellas partes que no sean esenciales del objeto. De esta manera, el objeto esconde sus datos de los dems objetos, y permite el acceso a los datos mediante sus propios mtodos.

Polimorfismo: Interfaz mltiple de mtodos. Adems, relativa a un solo mtodo, significa que se permite que se aplique sobre varios tipos de objetos. Herencia: Mecanismo que permite compartir caractersticas (atributos) y comportamiento (mtodos) entre clases, tomando como base una relacin jerrquica.
1-21

Captulo 1: Programacin orientada a objetos

Figura 1.- Mquina Virtual Java

3.4.9.2.5 Robusto Uno de los objetivos principales en el diseo de Java es la robustez y fiabilidad de las aplicaciones que se desarrollan utilizando este lenguaje de programacin. Java intenta que el cdigo sea fiable, y para ello hace nfasis en el chequeo del byte-code para detectar posibles problemas. Las verificaciones se realizan tanto en tiempo de compilacin como en tiempo de ejecucin. En tiempo de compilacin se realiza un severo y amplio chequeo de tipos, por lo que se considera a Java un lenguaje fuertemente tipado. Esto, junto con la obligacin de la declaracin explcita de mtodos, permite encontrar un gran nmero de errores en una etapa temprana de la implementacin. Java elimina toda posibilidad de acceder directamente a posiciones fsicas de memoria y de esta manera se elimina la posible sobreescritura o corrupcin de reas de memoria que podran estar reservadas a otros fines. Al hilo de esto, implementa los arrays autnticos, en vez de listas enlazadas de punteros, con comprobacin de lmites, evitando problemas que pueden ser muy graves. Estas caractersticas reducen drsticamente el tiempo de desarrollo de aplicaciones en Java. Java proporciona, pues: Comprobacin de punteros Comprobacin de lmites de arrays Excepciones Verificacin de byte-codes Tambin permite el manejo de excepciones, seales que indican que se ha producido una determinada condicin, como puede ser un error. 3.4.9.2.6 Interpretado Java para conseguir ser un lenguaje independiente del sistema operativo y del procesador que incorpore la mquina utilizada, es tanto interpretado como compilado. El cdigo fuente, escrito con cualquier editor de textos, se compila generando el byte-code. Este cdigo intermedio es de muy bajo nivel, pero sin alcanzar las instrucciones mquina propias de cada plataforma. El byte-code corresponde a alrededor del 80% de las instrucciones de la aplicacin. Ese mismo cdigo es el que se puede ejecutar sobre cualquier plataforma. Para ello hace falta el run-time, que s es completamente dependiente de la mquina y del sistema operativo, que interpreta dinmicamente el bytecode y aade el 20% de instrucciones que faltaban para su ejecucin. Con este sistema es fcil crear aplicaciones multiplataforma, pero para ejecutarlas es necesario que exista el run-time correspondiente al sistema operativo utilizado.

1-22

Captulo 1: Programacin orientada a objetos

3.4.9.2.7 Multithread Java da soporte a la multiprogramacin mediante la ejecucin de mltiples actividades (threads) simultneas en un programa. Los threads (a veces llamados, procesos ligeros), son bsicamente pequeos procesos o piezas independientes de un gran proceso. Java soporta multithreading a nivel de lenguaje mediante la incorporacin de la clase thread . Esta caracterstica del lenguaje permite desarrollar aplicaciones que puedan realizar varias operaciones de forma concurrente, como por ejemplo el navegador HotJava, desarrollado ntegramente en Java, puede estar bajando un fichero de la red sin dejar de navegar y estar escuchando sonido que incorpora alguna pgina HTML. Los threads que define Java son Pre-emptivos (se les asigna un quantum de tiempo de procesamiento) y dependen totalmente de la plataforma real sobre la que se est ejecutando la Mquina Virtual. De esta forma los threads pueden ser de tiempo compartido (time sliced), pero todo esto depende del sistema operativo subyacente. En caso de que el sistema no de soporte de tiempo compartido, una vez iniciado un thread la nica manera de que deje el control del procesador es si toma el control otro thread con mayor prioridad. 3.4.9.2.8 Dinmico Java utiliza ligadura dinmica. La ligadura dinmica consiste en cargar las clases en tiempo de ejecucin, es decir, cuando se hace necesaria su utilizacin. Cuando una instruccin byte-code hace referencia a un mtodo concreto, la Mquina Virtual Java, en tiempo de ejecucin, debe averiguar la versin correcta del mtodo que debe utilizar. Esto es debido a que ese mtodo podra estar definido en el propio programa o tambin puede haberse heredado de otra clase. Java, durante la compilacin no genera referencias numricas determinadas, sino que obtiene una referencia simblica que le pasa al Verificador del Byte-Code y al Intrprete. Este ltimo, invoca al Sistema de Resolucin de Nombres cuando las clases se comienzan a linkar. Una vez finalizada la resolucin de los nombres de los mtodos, se reescribe la referencia como un offset numrico, obteniendo en ese momento una referencia numrica directa. Si el sistema ejecuta una aplicacin Java sobre la red y encuentra una pieza de la aplicacin que no sabe manejar, Java es capaz de traer automticamente cualquiera de esas piezas que el sistema necesita para funcionar (Figura 2). Para evitar tener que traer por la red los mdulos de byte-codes o los objetos o nuevas clases cada vez que se necesiten, Java implementa las opciones de persistencia para que no se eliminen cuando se vace la cach de la mquina.

Figura 2.- Incorporacin dinmica de clases en Java

Herencia Java no soporta la herencia mltiple. La herencia mltiple es aquella en la que una clase se crea a partir (hereda caractersticas y comportamiento) de varias clases, es decir que tiene varios padres. Esta caracterstica aporta potencia al lenguaje pero tambin provee varios problemas tcnicos como la colisin de nombres y la herencia repetida. La primera surge cuando una subclase hereda de diferentes superclases
3.4.9.2.9
1-23

Captulo 1: Programacin orientada a objetos

caractersticas iguales, y la segunda ocurre cuando una clase es subclase de otra por varios caminos. Este tipo de herencia genera ambigedad que se debera solucionar, y Java lo elimina de raz ya que no la permite, de forma que no complica el lenguaje. Un motivo ms para desechar la herencia mltiple es que los beneficios que sta podra aportar son provistos por medio de las interfaces Java, evitando los inconvenientes que se derivan de su uso. Una interfaz, se utiliza para crear una clase base abstracta que contenga solamente las constantes y las declaraciones de los mtodos de la clase. No se permite que haya variables miembro ni definiciones de mtodos. Adems, en Java tambin se pueden crear clases abstractas. 3.4.9.2.10 Ligadura Java requiere que todas las variables de tipos primitivos sean instanciadas en tiempo de compilacin, y todos los objetos sean instanciados en memoria dinmica en tiempo de ejecucin (ligadura dinmica). 3.4.9.2.11 Constructores Java soporta constructores que pueden ser sobrecargados. Si no se proporciona un constructor explcitamente, el sistema proporciona un constructor por defecto. No hay destructores en Java. La memoria que no se utiliza es devuelta al sistema a travs del recolector de basura, que se ejecuta en un thread diferente al del programa principal. 3.4.9.2.12 Niveles de acceso En Java existen tres niveles de acceso: Pblico (public), puede ser accedido desde cualquier parte. Privado (private), slo se puede utilizar en mtodos declarados dentro de la misma clase, no se heredan por las subclases y no son accesibles desde ellas. Protegido (protected), se puede utilizar en mtodos declarados dentro de la misma clase, las subclases y las otras clases definidas dentro del mismo paquete (agrupacin de clases).
3.5

1) LIGADURA DINMICA FRENTE A ESTTICA

Eleccin de un lenguaje OO

La ligadura dinmica es un mecanismo necesario para soportar el paradigma de la orientacin a objetos. Sin embargo, con sta se disminuye el rendimiento, ya que se necesita una bsqueda en tiempo de ejecucin para hacer coincidir un mtodo a cada mensaje. Adems conduce a una gran cantidad de errores de programacin, errores que normalmente son detectados durante la compilacin en lenguajes tipeados estticamente, pero que no se detectan hasta la ejecucin en lenguajes con ligadura dinmica. Una mezcla entre tipos estticos y ligadura dinmica constituye una buena solucin, ya que ofrece un equilibrio entre flexibilidad de programacin y eficiencia en la ejecucin. Pero incluso con tipos estticos, algunas aplicaciones, como las de tiempo real, son tan crticas en tiempo de ejecucin que no pueden tolerar este tiempo adicional que conlleva la ligadura dinmica. Si se va a utilizar un lenguaje OO para resolver este tipo de problemas, debe permitir descomponer el paradigma orientado a objetos y programar en construcciones estticas que no den lugar a retardos de ejecucin, lo que conlleva utilizar lenguajes hbridos que permitan esta separacin de paradigmas. A la hora de desarrollar software habr que establecer un compromiso entre la limitacin de velocidad de los lenguajes OO frente a sus ventajas en tiempo de desarrollo, tamao menor de cdigo, fcil modificacin, etc.

2) CLASES COMO OBJETOS

En la orientacin a objetos se distingue claramente entre clases y objetos. Las clases son plantillas estticas que existen solamente en el cuerpo del cdigo fuente de un programa y los objetos son entidades dinmicas que existen en reas de memoria durante la ejecucin del programa. Pero existen dos corrientes: Los que consideran las clases como objetos, lo cual proporciona al paradigma una mayor consistencia y simplicidad conceptual. Los que consideran aspectos separados, insistiendo en que las clases son descripciones de cosas y los objetos son las cosas mismas.
1-24

Captulo 1: Programacin orientada a objetos

La eleccin de un lenguaje que contemple una opcin u otra depende de la aplicacin. Para un rpido prototipado y experimentacin, los programadores escogen la mayor potencia y flexibilidad de un lenguaje que considere las clases como objetos. Para el desarrollo de aplicaciones tradicionales se suele escoger un lenguaje donde existe separacin entre clases y objetos.

3) CONCURRENCIA

El paradigma de la orientacin a objetos parece til para modelar la mayor parte de los procesos del mundo real. Pero el paso de mensajes es sin duda alguna un proceso lineal, con lo que parece no muy adecuado para modelar procesos concurrentes, donde el modelo parece derrumbarse. En la resolucin de sistemas concurrentes, puede parecer que los mensajes deberan pasarse simultneamente. Pero esto no es as y lo que se hace es establecer un orden lineal de sucesos que puede, en el peor de los casos, desfigurar significativamente el proceso del mundo real que est siendo modelado. Una tcnica utilizada consiste en serializar dichos sucesos concurrentes utilizando semforos, pero esto solo se adaptara a las situaciones en las que se tengan pocos procesos activos ya que puede dar lugar a una gran carga de procesos en espera. Una solucin mejor para modelar sucesos concurrentes es no solo simular la concurrencia sino proporcionar realmente un medio en el que los objetos puedan verdaderamente ejecutarse simultneamente. Esto requiere un hardware con arquitecturas paralelas y lenguajes paralelos que soporten con garantas el modelo. Existen varios proyectos de investigacin al respecto como ABCL/R y PROCOL. Alternativamente se han desarrollado lenguajes distribuidos que soportan la concurrencia permitiendo que los objetos de diferentes maquinas se comuniquen concurrentemente a travs del envo y recepcin de mensajes. Es el caso de Smalltalk distribuido.

1-25

S-ar putea să vă placă și