Sie sind auf Seite 1von 10

Módulo 1

Fundamentos de programación orientada a objetos


Introducción a AJAX

Introducción a la Programación Orientada a Objetos (POO)


Los principios del modelo OO son: abstracción, encapsulación, modularidad y
jerarquía, fundamentalmente, y en menor grado tipificación (typing),
concurrencia, persistencia. [Booch 1986] dice que si un modelo que se dice OO
no contiene alguno de los primeros cuatro elementos, entonces no es OO.
Abstracción: Es una descripción simplificada o especificación de un sistema
que enfatiza algunos de los detalles o propiedades del sistema, mientras
suprime otros.
Encapsulación: Es el proceso de ocultar todos los detalles de un objeto que
no contribuyen a sus características esenciales.
Modularidad: Es la propiedad de un sistema que ha sido descompuesto en un
conjunto de módulos coherentes e independientes.
Jerarquía o herencia: Es el orden de las abstracciones organizado por niveles.
Tipificación: Es la definición precisa de un objeto de tal forma que objetos de
diferentes tipos no puedan ser intercambiados o, cuando mucho, puedan
intercambiarse de manera muy restringida.
Concurrencia: Es la propiedad que distingue un objeto que está activo de uno
que no lo está.
Persistencia: Es la propiedad de un objeto a través de la cual su existencia
trasciende el tiempo (es decir, el objeto continua existiendo después de
que su creador ha dejado de existir) y/o el espacio (es decir, la
localización del objeto se mueve del espacio de dirección en que fue
creado).
Según [Booch 1986], los beneficios del enfoque OO son:
1. El uso del modelo OO nos ayuda a explotar el poder expresivo de todos
los lenguajes de programación basados en objetos y los orientados a
objetos.
2. Alienta la reutilización no solo del software, sino de diseños completos.
Los objetos son componentes reutilizables porque son encapsulaciones
independientes del estado y de las operaciones. Basándonos en esta
reutilización, los diseños se pueden desarrollar utilizando objetos que
han sido creados en diseños anteriores. Esto reduce los costes del
diseño, de la programación y de la validación, además de reducir el
riesgo que conlleva el desarrollo software.
3. Produce sistemas que están construidos en formas intermedias estables
y por ello son más resistentes al cambio en especificaciones y
tecnología. Es ampliamente aceptado que los diseños y desarrollos
orientados a objetos son más fáciles de mantener ya que los objetos se
pueden entender y modificar como entidades autónomas. Así, el cambiar
la implementación de un objeto añadiendo servicios no debería afectar a
otros objetos del sistema. Además, con frecuencia existe una
correspondencia clara entre las entidades del mundo real y los objetos
que las controlan en el sistema, lo que mejora el entendimiento y por
tanto el mantenimiento del diseño.

2
Introducción a AJAX

Clases y Objetos
El paradigma OO se basa en el concepto de objeto. Un objeto es aquello que
tiene estado (propiedades más valores), comportamiento (acciones y
reacciones a mensajes) e identidad (propiedad que lo distingue de los demás
objetos). La estructura y comportamiento de objetos similares están definidos
en su clase común; los términos instancia y objeto son intercambiables. Una
clase es un conjunto de objetos que comparten una estructura y
comportamiento común.
La diferencia entre un objeto y una clase es que un objeto es una entidad
concreta que existe en tiempo y espacio, mientras que una clase representa
una abstracción, la "esencia" de un objeto, tal como son. De aquí que un objeto
no es una clase, sin embargo, una clase puede ser un objeto.
En el mundo real existen objetos que se encuentran en el vocabulario del
dominio del problema. Cada objeto, elemento del mundo real:
• Tiene unas características o propiedades: color, forma, tamaño,
temperatura, etc.
• Se utiliza para una cosa, esto es, tiene un comportamiento claro.
• Interacciona con otros objetos. Y como resultado de esa interacción los
objetos pueden cambiar de estado.

Objeto
Concepto, abstracción o cosa con límites bien definidos y con significado a
efectos del problema que se tenga entre manos.(Rumbaugh)
Unidad básica para la construcción del software.
Es un elemento autónomo de información que proporciona una serie de
servicios sobre la estructura interna que implementa
Un objeto tiene estado, comportamiento e identidad. (Booch)

Clase
Es la definición de un conjunto de objetos que comparten una estructura
común y un comportamiento común.
Conceptos que permiten agrupar objetos semejantes.
Todos los objetos son ejemplares o instancias de una clase.
Al proceso de crear objetos concretos a partir de una clase se denomina
instanciación

Componentes de una Clase


La estructura interna de una clase está compuesta por dos elementos
fundamentales:
Atributos: Son las características observables de un objeto. Los atributos o
propiedades se reconocen porque describen un aspecto del objeto que
podemos medir con una escala establecida previamente. A cada
propiedad se le debe asignar un valor el cual permite identificar de
manera única al objeto (identidad). Nos podemos hacer a la idea de que
las propiedades son algo así como variables donde almacenamos datos
relacionados con los objetos.
Métodos: Se define como un conjunto de acciones que un objeto puede
realizar para conseguir un propósito. Los métodos representan la parte

3
Introducción a AJAX

viva e interesante de un objeto y se emplean


habitualmente para modificar las propiedades del objeto. Al modificar
cualquiera de las propiedades del objeto se altera su apariencia y se
genera un cambio que el usuario de la aplicación puede percibir.
Cuando tenemos un objeto (o instancia), sus propiedades toman valores
concretos, es lo que se denomina estado del objeto.
Un mensaje a un objeto es la acción de efectuar una llamada o invocación de
uno de sus métodos pasándole valores concretos en sus parámetros.

Abstracción
La definición, según la Real Academia de la Lengua (RAE), es:
Abstraer. Separar por medio de una operación intelectual las cualidades
de un objeto para considerarlas aisladamente o para considerar el
mismo objeto en su pura esencia o noción.
Una abstracción denota las características esenciales de un objeto que lo
distinguen de todos los demás tipos de objeto y proporciona así fronteras
conceptuales nítidamente definidas respecto a la perspectiva del observador.
[Booch 1986]
El proceso de abstracción consiste en definir los objetos (comportamiento
visible) sin preocuparse de los detalles concretos de la parte interna del objeto
(estado interno): como son las estructuras y tipos de datos que utiliza y cómo
se implementa la funcionalidad. El objeto se ve como un elemento (caja negra)
que hace lo que tiene que hacer sin preocuparnos cómo lo hace. En su
momento ya nos preocuparemos de ello o se ocuparán otros.
En una Persona tenemos, por ejemplo, la función de hablar, que es una
abstracción de una serie de procesos eléctricos cerebrales, movimientos
musculares y modulación del aire; entonces, si creara un objeto Persona y
quisiera hacerla hablar, abstraería todas las cosas que hacen que una persona
hable en un solo método y llamaría a dicho método cuando lo necesite,
pasándole como parámetro lo que quiero que diga. También podría hacer que
esa persona dijera su nombre si asigno al objeto Persona la propiedad Nombre
y solicito su valor al pedirle que hable, sin preocuparme de cómo va a
almacenar dicha información: mediante interconexión de neuronas,
tatuándoselo en el brazo, con un post-it, ….
En conclusión; abstracción es aislar todos los complejos métodos y
propiedades de un objeto; tratando de hacerlos más simples y modulares cada
vez.

Características de la Encapsulación
El encapsulamiento es el proceso de almacenar en un mismo compartimento
los elementos de una abstracción que constituyen su estructura y su
comportamiento; sirve para separar el interfaz contractual de una abstracción y
su implantación. [Booch 1986]
Su objetivo es garantizar que todas las interacciones del objeto tengan lugar a
través de un sistema de mensajería predefinido con el que sea capaz de
entenderse. No existe ninguna otra manera con la que un objeto externo pueda
acceder a los atributos y métodos escondidos dentro de la interfaz de mensajes
de otro objeto.
Hay muchos datos que no tiene porqué conocer a aquel que esté usando la
clase Persona; ya que son inherentes al objeto y solo controlan su

4
Introducción a AJAX

funcionamiento interno; por ejemplo, cuando alguien te ve,


puede saber inmediatamente si eres hombre o mujer (propiedad) o puede
hablarte y obtener una respuesta procesada (método); también puede conocer
el color de tu cabello y ojos. En cambio, jamás sabrá que cantidad de energía
exacta tienes o cuantas neuronas te quedan, ni siquiera preguntándote ya que
ninguna de tus propiedades externas visibles o funciones de comunicación al
publico te permiten saber esos datos.
Esto es la encapsulación y ocultación; hacer privadas (invisibles) las partes del
objeto que son innecesarias para utilizar el objeto pero necesarias para su
funcionamiento. Las partes necesarias para utilizar el objeto se expondrán
públicamente para su uso por parte de los que emplean el objeto.
La encapsulación es muy conveniente dado que nos permite aumentar la
cohesión y disminuir el acoplamiento. Todos los atributos deberían ser
privados, inaccesibles desde el exterior, para hacer que sus valores sean
predecibles, evitando las validaciones continuas. Así mismo, los métodos
internos (como por ejemplo, palpitar) que nos han permitido la factorización del
código también deberían ser privados.

Clases e Instancias
Una clase es la definición de un conjunto de objetos que comparten una
estructura común y un comportamiento común.
Una Instancia es un objeto concreto de una clase. Se le llama instancia a cada
variable que tenga dentro de si un objeto de una clase específica; solo son
consideradas instancias después de que se les asigna memoria.
Habitualmente se toman como sinónimos los conceptos de objeto e instancia,
aunque estrictamente esto no es correcto dado que las clases son objetos en si
mismas.
Podemos asemejar una clase con el plano utilizado para construir los objetos.
El plano en si, es a vez un objeto, podemos anotar cosas encima de el, tiene
comportamiento (se puede borrar o quemar).
Redefiniendo el término de objeto, cuando en tiempo de diseño hablamos de
objetos normalmente estamos hablando de clases (diseñamos clases), si es en
tiempo de ejecución, los objetos de los que estamos hablando normalmente
son instancias (usamos instancias creadas a partir de la clase).
Por ejemplo, tenemos el plano para construir coches, seria la clase. Dicho
plano lo utilizamos para construir coches, las instancias serán cada uno de los
coches con su correspondiente color, que circula en diferentes direcciones, etc.

Variables, Objetos y Referencias


Una variable de un determinado tipo simple proporciona
• Capacidad para almacenar un valor simple
• Se almacena directamente en la memoria
• Un conjunto predefinido de operadores
Un objeto de una determinada clase proporciona
• Capacidad para almacenar diversos valores (atributos)
• Se almacena indirectamente en la memoria
• Define su propio conjunto de métodos para operar sobre las instancias o
ejemplares de esa clase

5
Introducción a AJAX

Cuando se declara un objeto de una clase se crea una


referencia a una instancia de dicha clase. Inicialmente toma el valor vacío
porque no existe objeto al que referirse. Cuando se instancia el objeto, se crea
el objeto en memoria y se le asigna su dirección a la referencia.

Atributos y su Inicialización
Como ya hemos visto, los atributos son las características observables de un
objeto. Los atributos se reconocen porque describen un aspecto del objeto que
podemos medir con una escala establecida previamente.
Nos podemos hacer a la idea de que las propiedades son algo así como
variables donde almacenamos datos relacionados con los objetos.
Los atributos del objeto guardan los valores del objeto, su estado. Todo objeto
debe contar con un estado inicial, sus atributos deben estar inicializados a un
valor de tal forma que una vez creado el objeto se encuentre listo para
funcionar correctamente. El estado inicial del objeto se consigue mediante unos
métodos especiales denominados constructores que reciben una serie de
parámetros con los valores iniciales de los atributos.
Es responsabilidad del desarrollador de la clase el que ésta funcione siempre.
Para ello debe tener control sobre los valores de sus atributos y que dichos
valores sean predecibles. Así mismo, en determinadas ocasiones se deseará
cambiar la estructuras de datos por una más adecuada sin que afecte a los que
utilizan a la clase. Para poder conseguirlo es necesario que los atributos
siempre sean privados a la clase, no sean accesibles directamente desde
fuera de ella. Se suministrará un conjunto de métodos que habiliten la entrada y
salida de la información, con las correspondientes validaciones y conversiones
que sean necesarias.
Aunque muchas veces se utilizan los términos atributos y propiedades como
sinónimos, en realidad son cosas distintas aunque no todos los lenguajes OO
lo soportan.
Como vimos anteriormente, los atributos deberían ser siempre privados, por lo
tanto si queremos consultar o modificar la información contenida en los
atributos, necesitamos un par de métodos:
• La función DameAtributo, que devuelve el valor del atributo.
• El procedimiento PonAtributo que recibe como parámetro el valor a
introducir en el atributo.
Las propiedades son miembros que ofrecen un mecanismo flexible para leer,
escribir o calcular los valores de atributos privados. Se pueden utilizar las
propiedades como si fuesen atributos públicos, aunque en realidad son
métodos especiales denominados descriptores de acceso. De este modo, se
puede tener acceso a los datos con facilidad, a la vez que proporciona la
seguridad y flexibilidad de los métodos.
Las propiedades combinan aspectos de los atributos y de los métodos. Para el
usuario de un objeto, una propiedad es similar a un atributo, el acceso a la
propiedad requiere exactamente la misma sintaxis. En realidad, una propiedad
son dos bloques de código que representan un descriptor de acceso
DameAtributo (get) y PonAtributo (set). El bloque get se ejecuta cuando se lee
la propiedad; el bloque set se ejecuta cuando se asigna un nuevo valor a la
propiedad.

6
Introducción a AJAX

Métodos
Anteriormente definimos los métodos como un conjunto de acciones que un
objeto puede realizar para conseguir un propósito.
Los métodos representan la parte funcional de un objeto, se emplean
habitualmente para modificar las propiedades del objeto y realizan las
actividades asignadas al objeto. Al modificar cualquiera de las propiedades del
objeto se altera su apariencia y se genera un cambio que el usuario de la
aplicación puede percibir.
Los lenguajes OO, normalmente, son fuertemente tipados, es decir, realizan
una comprobación estricta de tipos. Esto permite la sobrecarga en los métodos,
podemos tener varias versiones del mismo método (varios métodos que se
llamen igual en el mismo objeto) pero cada versión tiene que tener una firma
única (lista de parámetros diferente).
Cuando se manda el mensaje al objeto (invocación del método), el sistema
resuelve cual de las diferentes versiones se quiere ejecutar consultando el
número y tipo de parámetros pasados y cotejándolo con las firmas disponibles.
Hay que pensar en términos de reutilización y tener en cuenta que la clase se
implementa una vez pero se utiliza muchas veces, a la larga, invertir algo más
de esfuerzo en la clase ahorra mucho tiempo.
Disponemos de dos tipos de métodos especiales que dirigen la inicialización y
finalización de los objetos: Constructores y Destructores

Constructores
Los constructores son métodos o funciones que existen dentro de todos los
objetos, y que se activan solamente en el momento de la creación del objeto.
Los constructores sirven para definir los valores iniciales de las propiedades del
objeto. También se dice que un constructor es una operación que crea un
objeto e inicializa su estado.
Los constructores solo se pueden invocar cuando se realiza la instanciación del
objeto, pueden recibir parámetros por lo que acepta la sobrecarga.

Destructor
El destructor es un método que se activa cuando el objeto desaparece. El
destructor es único y sirve para que un objeto ejecute una acción o conjunto de
acciones antes de terminar su ciclo vital. Normalmente los objetos dejan de
existir cuando salen de su ámbito (entorno) en donde fueron creados. Los
destructores son importantes porque se activan automáticamente, y se delega
en ellos la tarea de liberar los recursos utilizados por el objeto, ya que
normalmente esta es la tarea ejecutada por el destructor.

Atributos y Métodos Estáticos


Como vimos en su momento, las clases son objetos. Como objetos pueden
tener sus propios atributos y métodos. Por lo tanto, podemos clasificar los
atributos o métodos como:
• Miembros de clase (estático o compartido): están asociados a la propia
clase, existen porque existe la clase y son accesibles a través del
nombre de la clase.

7
Introducción a AJAX

• Miembros de instancia: están asociados a cada una


de las instancias, son independientes para cada una de ellas, solo
existen si existe la instancia.
En un ejemplo anterior, asemejábamos la clase con un plano utilizado para
construir los objetos. El plano en si, es un objeto; podemos anotar cosas
encima de él (atributos de clase) como cuántas veces se ha utilizado; y tiene
comportamiento (métodos de clase), se puede borrar o quemar.
Los atributos de clase almacenan la información común compartida para todas
las instancias de la clase.
Los métodos de clase contienen el comportamiento que es independiente de
las instancias de la clase.
El ejemplo típico de miembros de clase es el contador de instancias, que nos
sirve para saber cuántas instancias del objeto existen en todo momento,
incluso limitar el número máximo de las mismas. Los métodos para consultar y
manipular dicho contador serían métodos de clase.
Los métodos de instancia tienen acceso al resto de los miembros de instancia y
a los miembros de clase.
Los métodos de clase solo tienen acceso al resto de los miembros de clase,
pero no tienen acceso a los miembros de instancia dado que puede que no
exista ninguna instancia.

Herencia de Clases
El objeto Persona es un objeto muy genérico, sus funciones básicas son las
mismas en todos los seres humanos, con diferencias puntuales, así que
podemos crear dos objetos Hombre y Mujer, que hereden todas sus
características genéricas como respirar, hablar, nombre, etc., del objeto
Persona, y será en la implementación de cada objeto donde empiecen las
diferencias.
Si lo hago así, sabré que tanto mis instancias del objeto Hombre como las del
objeto Mujer tendrán el método respirar, hablar, etc; y la propiedad nombre,
color de piel, color de cabello; etc. Pero, por ejemplo, solo el objeto Mujer
tendrá el método "dar a luz" si yo se lo programo y solo el objeto Hombre
tendrá el método "Fecundar".
Todo esto es posible gracias a que el objeto Hombre y el objeto Mujer
heredaron del objeto Persona todas sus propiedades y métodos.
La Herencia es una relación entre clases, en la que una clase comparte la
estructura y/o el comportamiento definido en una (herencia simple) o más
clases (herencia múltiple).
La clase de la que otras heredan se denomina: superclase, clase base o clase
padre.
La clase que hereda de otra clase se denomina: subclase, clase derivada o
clase hija.
Existen dos tipos de herencia:
• Simple: En esta jerarquía cada clase tiene como máximo una sola
superclase. La herencia simple permite que una clase herede las
propiedades y métodos de su superclase en una cadena jerárquica.
• Múltiple: Una malla o retícula consta de clases, cada una de las cuales
pueden tener una o más superclases inmediatas. Una herencia múltiple
es aquella en la que cada clase puede heredar las propiedades y
métodos de cualquier número de clases.

8
Introducción a AJAX

La herencia da un paso más en el concepto de


reutilización, hasta ahora hemos visto que la clase la definimos una vez y la
reutilizamos múltiples veces a través de la instanciación. Tenemos una clase
que ya hace la mayoría de las cosas que necesitamos pero le faltan cosas y
algunas no sirven tal y como están. Podemos reutilizar la definición de la clase
añadiendo lo que le falta y sobre-escribiendo las diferencias. Este es
precisamente el concepto de herencia, el siguiente paso en la reutilización:
reutilizar la propia definición de la clase (en este caso por especialización).
Por otro lado, podemos tener varias clases que comparten un comportamiento
común, en cuyo caso podemos sintetizar dicho comportamiento en una nueva
clase de la que hereden las clases anteriores y personalicen sus diferencias
(en este caso por generalización).

Jerarquía de clases y clases finales


En principio, los objetos forman siempre una organización jerárquica, en el
sentido de que ciertos objetos son superiores a otros de cierto modo. Existen
varios tipos de jerarquías: simples cuando pueda ser representada por medio
de un "árbol“ (herencia simple) o complejas (herencia múltiple) con estructuras
romboidales o tramas.
En cualquier caso, sea la estructura simple o compleja, podrán distinguirse en
ella tres niveles de objetos.
• La raíz de la jerarquía. Se trata de un objeto único y especial. Este se
caracteriza por estar en el nivel más alto de la estructura y suele recibir
un nombre muy genérico, que indica su categoría especial, como por
ejemplo meta-clase.
• Los objetos intermedios. Son aquellos que descienden directamente de
la raíz y que a su vez tienen descendientes. Representan conjuntos o
clases de objetos, que pueden ser muy generales o muy especializados,
según la aplicación. Normalmente reciben nombres genéricos que
denotan al conjunto de objetos que representan.
• Los objetos terminales. Son todos aquellos que descienden de una clase
o subclase y no tienen descendientes. Suelen llamarse casos
particulares, normalmente con dependencias de elementos físicos donde
interesa truncar el árbol de herencia.

Clases Abstractas
Anteriormente veíamos el objeto Persona, es un objeto muy genérico y limitado
en si, así que se puede considerar como un objeto abstracto ya que por sí
mismo no puede crear una persona completa, sin embargo, sus funciones
básicas son las mismas en todos los seres humanos. Así posteriormente
podemos crear los objetos Hombre y Mujer, que hereden todas sus
características genéricas.
Así llegamos a otro concepto: las clases Abstractas. Una clase abstracta es
una clase de la que no se pueden instanciar objetos (no queremos), solamente
se puede heredar de ellas.
El propósito de una clase abstracta es proporcionar una definición común de
una clase base que múltiples clases derivadas pueden compartir. Existen como
parte del árbol de herencia.
En determinados casos, como el visto en el ejemplo de Personas, la clase es
muy genérica, representan conceptos en el proceso de modelización por lo que

9
Introducción a AJAX

no nos interesa que se creen instancias de las mismas. En


otros casos, sobre todo cuando por generalización, cuando se sintetiza un
comportamiento común para que varias clases lo compartan, no tiene sentido
que existan instancias de las clases síntesis, dado que han surgido para
factorizar código.
Una clase final no se puede utilizar como clase base, no acepta herederos. Por
esta razón, tampoco puede ser una clase abstracta.
Dado que no se pueden instanciar, las clases abstractas no tienen porqué estar
completamente implementadas, es decir, pueden tener métodos definidos pero
no implementados. Estos métodos se denominan métodos abstractos o
virtuales. Esto permite fijar que todos sus herederos cuentan dicho método
aunque no se pueda fijar un comportamiento por defecto para el mismo.
La clase abstracta solo define el nombre y la firma del método (conjunto de
parámetros), sin código asociado, delega en sus herederos la implementación
de dichos métodos. Los herederos están obligados a implementar todos los
métodos abstractos, salvo que a su vez sean abstractos. Una clase solo es
instanciable si está completamente implementada.
Los métodos y propiedades abstractas permiten hacer planes para una
expansión futura. El hecho de llamar a un miembro abstracto sin importar cuál
es el tipo que el llamador utiliza proporciona a las clases derivadas la opción de
cambiar completamente el comportamiento aparente de la clase base.
Las clases abstractas NO están obligadas a tener métodos abstractos, pero si
una clase tiene un método abstracto, obligatoriamente la clase debe ser
abstracta.
Polimorfismo
Supongamos que tenemos la clase Dibujo, que contiene una imagen
compuesta de figuras geométricas con diferentes formas (rectángulo, triángulo
y círculo) y dispone de una tabla para almacenar las diferentes figuras. Si se
requiere un método que calcule el área total de las figuras del dibujo la solución
mediante polimorfismo es muy simple:
ÁreaTotal = 0
Para i = 1 hasta NúmeroDeFiguras
ÁreaTotal = ÁreaTotal + tabla(i).dameTuArea()
¿Necesitamos saber el tipo de figura que hay en posición de la tabla para saber
cómo calcular su área? No, en la posición solo hay una instancia de uno de los
herederos de figura, y una figura solo tiene una forma de calcular su área: la
implementada en su método dameTuArea.
En caso de que deseemos mejorar el dibujo y que pueda contener rombos y
cuadrados, ¿Sería necesario cambiar el algoritmo que calcula el área total de
las figuras del dibujo? No, al ser figuras tendrán su correspondiente método
dameTuArea y el algoritmo es independiente de las figuras concretas
utilizadas.
El polimorfismo permite la programación dinámica, obteniendo soluciones más
flexibles y por lo tanto más reutilizables en diferentes escenarios.
Cuidado con no confundir el polimorfismo con la sobrecarga, esta última implica
varios métodos que se llaman igual pero con diferente firma dentro de la misma
clase.

10

Das könnte Ihnen auch gefallen