Resumen Mod 01

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Resumen Mod 01 as PDF for free.

More details

  • Words: 4,164
  • Pages: 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

Related Documents

Resumen Mod 01
November 2019 9
Resumen Mod 02
November 2019 5
Resumen Mod 09
November 2019 4
Resumen Mod 05
November 2019 7
Resumen Mod 08
November 2019 3
Resumen Mod 07
November 2019 4