G.Bordel >Docencia >TAP Técnicas Actuales de Programación (curso 2010-2011)
desprotegido Intro. desprotegido Temario desprotegido Calendario desprotegido RPF desprotegido Recursos protegido Práctica protegido Gest. Alum.
tema_anterior Tema 4: Elementos relacionados con la orientación a objeto tema_siguiente
  1. Objetos y clases.
  2. Estructura de la definición de una clase.
  3. Herencia.
  4. Encapsulamiento (ámbitos de accesibilidad).
  5. El bloque static y los atributos static y final.
  6. Instanciación, inicialización y eliminación de objetos.[ejercicios]
  7. Clases y métodos abstractos.[ejercicios]
  8. Interfaces.[ejercicios]
  9. Polimorfismo.
  10. Arrays*.[ejercicios]
  11. Enumeraciones.

4.1- Objetos y clases

Como ya se ha indicado con anterioridad, la orientación a objeto supuso un cambio esencial en las técnicas de desarrollo de software. Visto de un modo conceptual, la orientación a objeto permite una resolución de problemas con un nivel de abstracción nunca conseguido hasta entonces ya que desliga completamente esta solución de la estructura funcional de la máquina. Es decir, en lugar de plantear la solución como un proceso que altera unos datos de entrada para generar otros datos de salida, puede centrarse el planteamiento en la estructura y el comportamiento de los objetos que participan en el problema. Alan Kay, padre del primer lenguaje exitoso orientado a objetos, el SmallTalk, resumía esta técnica de programación mediante los siguientes 5 puntos:

  • Todo es un objeto.
  • Un programa es un grupo de objetos diciendose unos a otros qué deben hacer mandándose mensajes.
  • Cada objeto tiene su propia memoria construida en base a otros objetos.
  • Todo objeto tiene un tipo.
  • Todos los objetos de un tipo particular pueden recibir los mismos mensajes.

Sin embargo, esto que puede resultar un tanto abstracto, puede ser visto de un modo puramente mecánico. La orientación a objeto básicamente aporta un avance en la modularización de las soluciones, es decir, provee de mecanismos que permiten una modularización elaborada y eficaz, consiguiendo avanzar en el concepto conocido como "encapsulamiento". A esto contribuyen un buen número de características que se irán viendo en adelante, pero todo se centra inicialmente en la idea "objeto" que vamos a concretar "fisicamente" de modo que pierda su "aura" de concepto platónico.

Visto a bajo nivel, un objeto no es otra cosa que una estructura en memoria dentro de la cual se almacenan los valores de determinadas variables y un conjunto de funciones que se encuentran directamente asociadas a él. La definición de la composición de dicha estructura así como de las funciones asociadas además de determinados detalles sobre las posibilidades de acceso a ellas es lo que se conoce como "clase". Esto establece un paralelismo directo con el concepto de tipo en programación clásica: una variable pertenece a un tipo, y ello determina su estructura y posibilidades; cada variable es una realización concreta del tipo; ahora cada objeto es una realización concreta de la clase (una "instancia"). En la figura pueden verse los objetos "diaDeHoy" y "cumpleaños" que serán instancias de la clase "fecha". Como puede verse, el conjunto de funciones no se replica con cada objeto ya que pueden ser compartidas. Nuestros programas haran referencia en todo momento a objetos entendidos como variables más funciones, de modo que en caso de ejecutarse una función que actúa sobre una determinada variable, lo hará sobre la correspondiente al objeto al que se hace la referencia.


(a)

(b)
Un objeto es un espacio de memoria capaz de almacenar ciertos datos y un conjunto de funciones que pueden actuar sobre ellos. En (a) se representa un objeto que podemos denominar p.ej. diaDeHoy. En la memoria puede haber varios objetos similares a este (son fechas) a los que se accede a traves de unas variables de referencia y que comparten las funciones (b). Los objetos tienen una referencia interna para tener localizadas estas funciones, así como otros elementos que les permiten funcionalidades que aún no se han visto en este curso.

Por tanto, nuestros programas se formaran mediante la definición de clases, es decir la definición de la estructura de variables y las funciones que conformarán los objetos que "colaborarán" en la ejecución del programa. En esta definición, la estructura de variables puede estar compuesta de variables de tipos primitivos, objetos de otras clases (o de la misma) y arrays tanto de objetos como de tipos primitivos. Evidentemente puede incluir estructuras de datos tan elaboradas como sea preciso (colas, pilas, heaps, tablas hash, etc.) pero todas ellas serán siempre objetos.

Para completar la imagen "interna" de los objetos diremos que no sólo las funciones son elementos que pueden compartirse entre objetos, sino que hay determinadas variables, tanto definidas por el programador como ocultas, que pueden compartirse. De este modo, en memoria se dispone una estructura con todos elementos comunes que se asocia a la clase (a la definición común a todos los objetos).

Un ejemplo de estructura en memoria relacionada con un objeto declarado en un programa. Al declarar el objeto se dispone de una referencia al mismo. Este objeto es de clase "clase 1" y tiene entre sus variables internas otro objeto de clase "clase 2", el objeto "objeto 2". Este a su vez tiene su referencia a la clase a la que pertenece y dentro de ella hay una nueva referencia a otro objeto de clase "clase 1".

Al indicar la composición de las clases, haciamos referencia a variables, funciones y mencionabamos también la especificación de posibilidades de acceso. Esto último es lo que permite el encapsulamiento. Cada clase puede definir unas limitaciones de acceso a sus componentes de modo que los objetos de la misma sólo presenten al exterior una parte controlada de sí mismos. Como ejemplo, en muchos casos suele determinarse que las variables no sean visibles y cualquier acceso a las mismas sólo sea posible a traves de la llamada a una función del objeto posibilitando por tanto un acceso controlado (el método puede intervenir en el acceso permitiendolo, denegándolo o alterándolo de algún modo).

Siguiente punto: 4.2- Estructura de la definición de una clase


Plataforma de soporte a curso y contenidos (c) German Bordel 2005.