Вы находитесь на странице: 1из 197

Programacin .

NET (Bsico ) Manual de introduccin al desarrollo de aplicaciones con C#


Primera Parte

PABLO PASCUAL FERNNDEZ HINOJOSA

PROGRAMACIN .NET (BSICO ) MANUAL


DE INTRODUCCIN AL DESARROLLO DE APLICACIONES CON

C# -

PARTE I

Buffa Sistemas S.R.L 2010 Buenos Aires

-2-

Programacin .NET (Bsico) Manual de introduccin al desarrollo de aplicaciones con C# - Parte I Pablo Pascual Fernndez Hinojosa 1a Edicin Buffa Sistemas SRL Alsina 655 4 Piso Buenos Aires ISBN N 978-987-25214-4-8

Fernndez Hinojosa, Pablo Pascual Manual de introduccin al desarrollo de aplicaciones con C # I. 1a ed. - Buenos Aires : Buffa Sistemas, 2010. 300 p. ; 21x15 cm. ISBN 978-987-25214-4-8 1. Capacitacin Informtica. I. Ttulo CDD 004.1

Fecha de catalogacin: 06/08/2010 (c), 2010 Buffa Sistemas SRL Queda hecho el depsito que establece la Ley 11.723. Libro de edicin Argentina No se permite la reproduccin parcial o total, el almacenamiento, el alquiler, la transmisin o la transformacin de este libro, en cualquier forma o por cualquier medio, sea electrnico o mecnico, mediante fotocopias, digitalizacin u otros mtodos, sin el permiso previo y escrito del editor.Su infraccin est penada por las leyes 11723 y 25446.-

-3-

NOTA: El material incluido en el presente puede contener datos y ejemplos extrados de sitios web pblicos sin restriccin de acceso. Los mismos son utilizados solamente a fines didcticos.

-4-

Audiencia
Este curso est orientado a aquellas profesionales o estudiantes que quieran adquirir los conocimientos necesarios de programacin web basado en la plataforma MS .NET, desarrollo de aplicaciones en C# sobre la plataforma Microsoft Visual Studio. Y para todas aquellas personas que deseen desarrollar e implementar o convertir sus habilidades a esta tecnologa.

Pre-Requisitos
Tener conocimientos sobre la utilizacin de aplicaciones de Internet. Por ejemplo navegacin de pginas Web, realizar transacciones (home banking) etc. Tener conocimientos bsicos de base de datos relacionales. Por ejemplo teora de bases de datos, diferencias entre base de datos y planilla de clculos. Nota: Si usted no est seguro de sus conocimientos lo invitamos a tomar los cursos gratuitos dentro de Microsoft Virtual Academy (MVA).

Al finalizar el curso
Despus de completar este curso los alumnos sern capaces de: Utilizar los conceptos de POO Explicar las capacidades de Microsoft .NET Framework Crear aplicaciones MS .Net (con foco en WEB) Conocimiento bsico del Lenguaje de Programacin C#

-5-

ndice
MDULO I INTRODUCCIN A .NET .........................................................- 7 MDULO II - INTRODUCCIN AL LENGUAJE C#.................................... - 37 MDULO III - FUNDAMENTOS DE LA POO ............................................. - 80 BIBLIOGRAFA ................................................................................... - 197 -

-6-

Mdulo I Introduccin a .Net

-7-

Que es .NET ? Microsoft .Net es un conjunto de Tecnologas de software para conectar informacin, personas, sistemas y dispositivos. Permitiendo un alto nivel de integracin del software mediante el uso de XML Web Services. Esta Tecnologa se apoya en el .net Framework y en la IDE multi-lenguaje Visual Studio.net

-8-

Informacin general acerca de .NET Framework .NET Framework es un componente integral de Windows que admite la creacin y la ejecucin de la siguiente generacin de aplicaciones y servicios Web XML. El diseo de .NET Framework est enfocado a cumplir los objetivos siguientes: Proporcionar un entorno coherente de programacin orientada a objetos. Proporcionar un entorno de ejecucin de cdigo que reduzca lo mximo posible la implementacin de software y los conflictos de versiones. Ofrecer un entorno de ejecucin de cdigo seguro

-9-

Informacin general acerca de .NET Framework (cont.) Proporcionar un entorno de ejecucin de cdigo que elimine los problemas de rendimiento de los entornos en los que se utilizan secuencias de comandos o intrpretes de comandos Ofrecer al programador una experiencia coherente entre tipos de aplicaciones Windows y Web. Basar toda la comunicacin en estndares del sector para asegurar que el cdigo de .NET Framework se puede integrar con otros tipos de cdigo

- 10 -

.NET Framework es un componente Windows que soporta el desarrollo y ejecucin de aplicaciones Windows y Web Services. El propsito de este componente es proveer al usuario con un entorno de programacin orientada a objetos consistente, donde el cdigo pueda estar almacenado localmente o de manera remota. Intenta minimizar los conflictos con el deploy y versionado de software y promueve la ejecucin de cdigo en forma segura. El esfuerzo es hacer que la experiencia del desarrollador sea consistente entre una gran variedad de aplicaciones y plataformas y crear una comunicacin estndar que ayude a las aplicaciones .NET Framework a integrarse con otras aplicaciones web-based. El .NET Framework tiene dos componentes principales. La Common Runtime (CLR) y la Class Library

- 11 -

.NET Framework contiene dos componentes principales: Common Language Runtime Biblioteca de clases de .NET Framework. Common Language Runtime es el fundamento de la tecnologa. El motor de tiempo de ejecucin se puede considerar como un agente que administra el cdigo en tiempo de ejecucin y proporciona servicios centrales, como la administracin de memoria, la administracin de subprocesos y la interaccin remota, al tiempo que aplica una seguridad estricta a los tipos y otras formas de especificacin del cdigo que fomentan su seguridad y solidez. De hecho, el concepto de administracin de cdigo es un principio bsico del motor de tiempo de ejecucin. El cdigo destinado al motor de tiempo de ejecucin se denomina cdigo administrado, a diferencia del resto de cdigo, que se conoce como cdigo no administrado. La biblioteca de clases, el otro componente principal de .NET Framework, es una completa coleccin orientada a objetos de tipos reutilizables que se pueden emplear para desarrollar aplicaciones que abarcan desde las tradicionales herramientas de interfaz grfica de usuario (GUI) o de lnea de comandos hasta las aplicaciones basadas en las innovaciones ms recientes proporcionadas por ASP.NET, como los formularios Web Forms y los servicios Web XML. .NET Framework puede alojarse en componentes no administrados que cargan Common Language Runtime en sus procesos e inician la ejecucin de cdigo administrado, con lo que se crea un entorno de software en el que se pueden utilizar caractersticas administradas y no administradas. En .NET Framework no slo se ofrecen varios hosts de motor de tiempo de ejecucin, sino que tambin se admite el desarrollo de estos hosts por parte de terceros.

- 12 -

Por ejemplo, ASP.NET aloja el motor de tiempo de ejecucin para proporcionar un entorno de servidor escalable para el cdigo administrado. ASP.NET trabaja directamente con el motor de tiempo de ejecucin para habilitar aplicaciones de ASP.NET y servicios Web XML, que se tratan ms adelante en este tema. Internet Explorer es un ejemplo de aplicacin no administrada que aloja el motor de tiempo de ejecucin (en forma de una extensin de tipo MIME). Al usar Internet Explorer para alojar el motor de tiempo de ejecucin, puede incrustar componentes administrados o controles de Windows Forms en documentos HTML. Al alojar el motor de tiempo de ejecucin de esta manera se hace posible el uso de cdigo mvil administrado (similar a los controles de Microsoft ActiveX), pero con mejoras significativas que slo el cdigo administrado puede ofrecer, como la ejecucin con confianza parcial y el almacenamiento aislado de archivos. En la ilustracin siguiente se muestra la relacin de Common Language Runtime y la biblioteca de clases con las aplicaciones y el sistema en su conjunto. En la ilustracin se representa igualmente cmo funciona el cdigo administrado dentro de una arquitectura mayor.

Common Language Runtime es el fundamento de la tecnologa. El motor de tiempo de ejecucin se puede considerar como un agente que administra el cdigo en tiempo de ejecucin y proporciona servicios centrales, como la administracin de memoria, la administracin de subprocesos y la interaccin remota, al tiempo que aplica una seguridad estricta a los tipos y otras formas de especificacin del cdigo que fomentan su seguridad y solidez. De hecho, el concepto de administracin de cdigo es un principio bsico del motor de tiempo de ejecucin. El cdigo destinado

- 13 -

al motor de tiempo de ejecucin se denomina cdigo administrado, a diferencia del resto de cdigo, que se conoce como cdigo no administrado. La Common Language Runtime es el corazn del .NET Framework. Los compiladores y herramientas exponen funcionalidad en tiempo de ejecucin y permiten escribir cdigo con el beneficio de un entorno de ejecucin administrado. El cdigo que se desarrolla con un compilador de lenguaje que trabaja con el runtime se llama cdigo administrado (managed code). Esto permite beneficios como integracin y manejo de excepciones entre distintos lenguajes, seguridad mejorada, versionamiento y soporte para despliegue. Adems de un modelo simplificado para interaccin de componentes y servicios de debugging y profiling. Para permitir al runtime proveer servicios al cdigo administrado, los compiladores deben emitir metadata (informacin adicional) que describe tipos, miembros y referencias en el cdigo. La metadata se almacena con el cdigo. Cada archivo que la CLR puede cargar contiene metadata. El runtime la utiliza para localizar y cargar las clases, mantener las instancias en memoria, resolver el llamado de mtodos, generar cdigo nativo, mejorar la seguridad y definir las fronteras del contexto de ejecucin.

La common language runtime simplifica el desarrollo de aplicaciones, brindando un entorno de ejecucin seguro y robusto, con soporte para mltiples lenguajes, tal como se detall en diapositivas anteriores. Este entorno se conoce generalmente como entorno administrado o managed environment, en el cual son provistos automticamente los servicios comunes, como garbage collection y securuty.

- 14 -

Biblioteca de clases de .NET Framework La biblioteca de clases de .NET Framework es una coleccin de tipos reutilizables que se integran estrechamente con Common Language Runtime. La biblioteca de clases est orientada a objetos, lo que proporciona tipos de los que su propio cdigo administrado puede derivar funciones. Esto ocasiona que los tipos de .NET Framework sean sencillos de utilizar y reduce el tiempo asociado con el aprendizaje de las nuevas caractersticas de .NET Framework. Adems, los componentes de terceros se pueden integrar sin dificultades con las clases de .NET Framework. Por ejemplo, las clases de coleccin de .NET Framework implementan un conjunto de interfaces que puede usar para desarrollar sus propias clases de coleccin. stas se combinarn fcilmente con las clases de .NET Framework. Como en cualquier biblioteca de clases orientada a objetos, los tipos de .NET Framework permiten realizar diversas tareas de programacin comunes, como son la administracin de cadenas, recopilacin de datos, conectividad de bases de datos y acceso a archivos. Adems de estas tareas habituales, la biblioteca de clases incluye tipos adecuados para diversos escenarios de desarrollo especializados. Por ejemplo, puede utilizar .NET Framework para desarrollar los siguientes tipos de aplicaciones y servicios: Aplicaciones de consola Aplicaciones GUI de Windows (Windows Forms) Aplicaciones de ASP.NET Servicios Web XML Servicios de Windows

- 15 -

Por ejemplo, las clases de Windows Forms son un conjunto completo de tipos reutilizables que simplifican enormemente el desarrollo de interfaces GUI para Windows. Si escribe una aplicacin Web Form de ASP.NET, puede utilizar las clases de Web Forms.

Cuando se compila cdigo soportado en .NET Framework, el compilador convierte el cdigo fuente en Lenguaje intermedio de Microsoft (MSIL), que es un conjunto de instrucciones independiente de la CPU que se pueden convertir de forma eficaz en cdigo nativo. MSIL incluye instrucciones para cargar, almacenar, inicializar y llamar a mtodos en los objetos, as como instrucciones para operaciones lgicas y aritmticas, flujo de control, acceso directo a la memoria, control de excepciones y otras operaciones. Antes de poder ejecutar cdigo, se debe convertir MSIL al cdigo especfico de la CPU, normalmente mediante un compilador JIT. Common Language Runtime proporciona uno o varios compiladores JIT para cada arquitectura de equipo compatible, por lo que se puede compilar y ejecutar el mismo conjunto de MSIL en cualquier arquitectura compatible. Cuando el compilador produce MSIL, tambin genera informacin adicional sobre el cdigo. Esta informacin describe los tipos que aparecen en el cdigo, incluidas las definiciones de los tipos, las firmas de los miembros de tipos, los miembros a los que se hace referencia en el cdigo y otros datos que el motor de tiempo de ejecucin utiliza en tiempo de ejecucin. El lenguaje intermedio de Microsoft (MSIL) y los datos adicionales, conocidos como MetaData, se incluyen en un archivo ejecutable portable (PE), que se basa y

- 16 -

extiende el PE de Microsoft publicado y el formato Common Object File Format (COFF) utilizado tradicionalmente para contenido ejecutable. Este formato de archivo, que contiene cdigo MSIL o cdigo nativo as como metadata, permite al sistema operativo reconocer imgenes de Common Language Runtime. La presencia de metadatos junto con el Lenguaje intermedio de Microsoft (MSIL) permite crear cdigos autodescriptivos, con lo cual las bibliotecas de tipos y el Lenguaje de definicin de interfaces (IDL) son innecesarios. El motor de tiempo de ejecucin localiza y extrae los metadatos del archivo cuando son necesarios durante la ejecucin.

Los archivos

ejecutables estn conformados por MSIL Datos Adicionales (Metadata) El MSIL es independiente del lenguaje en el que se desarrolla

- 17 -

Microsoft Visual Studio.NET Introduction Administrando Solucion y Proyectos Presentation IDE

- 18 -

Microsoft Visual Studio.NET simplifica el desarrollo de aplicaciones basadas en .NET proporcionando un entorno de desarrollo simple y unificado Caractersticas Un solo IDE (Integrated Development Environment) Soporte para varios lenguajes .NET (VB.NET, C#,...) Desarrollo de mltiples tipos de proyectos Explorador Web integrado (basado en IE) Interfase personalizable Posee varias utilidades adicionales: Acceso a datos SQL Server, Depurador, Intellisense, Emuladores para mviles, etc.

- 19 -

Los proyectos son contenedores que se ubican en una solucin para administrar, compilar y almacenar tems. El contenido de los tems depende del proyecto que se est desarrollando y del lenguaje. Pueden ser archivos de cdigo, imgenes, grficos, etc..

- 20 -

Todo recurso de una aplicacin se ubica dentro de los proyectos. El contenido de los tems depende del proyecto que se est desarrollando y del lenguaje. Pueden ser archivos de cdigo, imgenes, grficos, etc..

- 21 -

Plantillas de Proyectos Visual Studio permite acceder a un nmero predefinido de plantillas o templates. Al agregar diferentes mdulos, estos agregan plantillas. Algunas pueden aparecer en formas de Wizards, para generar proyectos. Las plantillas de proyectos permiten a los desarrolladores concentrarse en la funcionalidad especfica que se desea implementar y es desde el proyecto donde se administra las diversas tareas referidas a la compilacin, guardado y apertura. Archivos de definicin de Proyectos Cada proyecto contiene un archivo de definicin que contiene metadata del proyecto. La extensin de estos archivos de definicin y el contenido del archivo se determina por el tipo de proyecto que define. Generalmente el proyecto almacena la configuracin y los seteos de compilacin que se especificaron para el proyecto y su conjunto de tems. Algunos proyectos mantienen una lista de archivos asociados con el proyecto y su ubicacin. Cuando se agrega un tem a proyecto, la ubicacin fsica del tem en disco se guarda en la definicin del proyecto. Si el tem es removido del proyecto, la informacin se elimina.

- 22 -

Una solucin permite a los desarrolladores concentrarse en la tarea de desarrollo y distribucin de los proyectos, en lugar de resolver detalles de administracin de los archivos de proyecto y los componentes. Una solucin de Visual Studio permite: -Trabajar con varios proyectos en la misma instancia de Visual Studio -Trabajar con tmes utilizando seteos y opciones que se aplican a un conjunto de proyectos -Utilizar el Solution Explorer para disear y compilar la solucin Visual Studio genera automticamente una solucin cuando se crea un nuevo proyecto. Es posible agregar nuevos proyectos a una solucin a medida que se necesitan. Para administrar los proyectos y archivos de una solucin, el Solution Explorer provee una vista grfica de toda la solucin. Tambin permite agregar carpetas de tems que no pertenecen al proyecto. La definicin de la solucin se crea en dos archivos: una definicin de solucin .sln y opciones de usuario de la solucin .suo Los archivos de definicin de solucin almacenan metadata que describe la solucin: -Los proyectos asociados. -tems asociados Una solucin puede contener varios proyectos que pueden ser abiertos, cerrados y salvados al mismo tiempo. Cada proyecto en una solucin puede contener varios archivos o tems. Los tipos de los tems contenidos en un proyecto dependen del lenguaje de desarrollo utilizado.

- 23 -

La relacin lgica entre una solucin y sus componentes no reflejan, necesariamente, la forma en la que la solucin y sus componentes son almacenados en el disco. Si se crea una aplicacin que consta de varios proyectos, es recomendable crear una carpeta de solucin donde se almacenen todos los proyectos. Cuando se crea una solucin multi-proyectos, el primer proyecto se transforma en el de start-up por default. Al compilar la solucin, los proyectos se compilar en el orden en el que fueron agregados.

- 24 -

La plantilla de proyectos permite comenzar una nuevo proyecto a partir de plantillas (Templates), agrupadas segn distintos tipos o categoras. Para acceder a la plantilla de proyectos desde el men: File->New Proyect Una vez seleccionado el tipo de proyecto, se deben completar campos que determinan ubicacin e identificacin del proyecto y de la solucin que lo contiene. Name: Determina el nombre del proyecto. Location: Permite seleccionar la ubicacin fsica de la Solucin y Proyecto Solution: Da la opcin de crear una nueva solucin contenedora del proyecto o incluirlo en una solucin preexistente Solution Name: Nombre de la solucin que se crear junto al proyecto. Por defecto es el mismo nombre que el proyecto.

- 25 -

El Solution Explorer permite observar los tems y realizar las tareas de administracin de los mismos desde la solucin o desde los proyectos. Tambin permite utilizar los editores de Visual Studio para trabajar con tems fuera de la solucin. Desde el Solution Explorer es posible agregar y eliminar archivos y realizar otras tareas administrativas. Cada proyecto tiene sus propias carpetas e iconos para indicar el tipo de tems en el proyecto. Display Jerrquico Una solucin y sus proyectos aparecen en un formato jerrquico que provee informacin actualizada sobre el estado de la solucin, los proyectos y los tems. Esto permite al desarrollador trabajar en varios proyectos al mismo tiempo.

- 26 -

Lenguajes en Visual Studio.NET Visual Basic .NET C# C++ J# Eleccin del lenguaje

- 27 -

Re-escrito desde cero para trabajar bajo .NET. Ahora totalmente OO. Mejoras s/VB6: Caractersticas: Herencia Sobrecarga Constructores Administracin estructurada de excepciones Comprobacin de Tipos Miembros Shared

- 28 -

Fue un lenguaje creado especialmente para .NET. Totalmente OO. Caractersticas: Sintaxis similar a C++, Java Tipos seguros Case-sensitive Atributos accedidos por un punto Todo es tratado como objetos C# la lnea finaliza con un ;

- 29 -

http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/vcedit/html/vc grfvisualcppstandardeditionfeatures.asp

- 30 -

http://msdn.microsoft.com/library/spa/default.asp?url=/library/SPA/dv_vjsharp/ht ml/vjconvisualjoverview.asp

- 31 -

.NET utiliza UN solo runtime (el CLR) y TODO lenguaje para .NET compila a MSIL Prcticamente no hay diferencias de performance entre VB.NET y C#. Cual lenguaje usar, en general depender de su experiencia previa con otros lenguajes o decisin personal. Si conoce Java, C++, etc. >> C# (nuestra eleccin) Si conoce VB o VBScript >> VB.NET

- 32 -

En el siguiente ejercicio, se muestran los pasos para crear diferentes tipos de proyectos en Visual Studio 2008, crear un mtodo en una biblioteca de clases, y utilizarlo desde un formulario. Pasos: 1. Abrir Visual Studio 2008. 2. En el men File, hacer click en New, y luego en Project. 3. Aparecer el cuadro de dilogo New Project. 4. Para elegir el tipo de proyecto, expandir Visual C# y hacer click en Web, seleccionar el template ASP.NET Web Application. 5. Especificar un nombre y una ubicacin para el proyecto y presionar OK. Visual Studio crear el proyecto. 6. Antes de comenzar, veamos bsicamente qu contiene el entorno de desarrollo. a. A la derecha de la aplicacin se encuentra la ventana Solution Explorer. sta nos permite ver y administrar los archivos, referencias, configuracin y recursos del proyecto. b. En la parte superior izquierda est la ventana Toolbox. Contiene los controles que se pueden utilizar en el formulario, como botones, cuadros de texto, etc. c. La ventana Properties de la parte inferior derecha permite establecer las propiedades y los eventos de los controles. d. En la parte central se encuentra el editor de cdigo. 7. Para agregar un web site a la solucin, en el men File, hacer click en Add

- 33 -

y luego en New Web Site. En el cuadro de dilogo, seleccionar ASP.NET Web Site y presionar OK. 8. Para agregar un proyecto de ventanas, hacer click en File, luego seleccionar Add y New Project. En el rbol de Visual C#, seleccionar Windows Forms Application como template. 9. Agregar una biblioteca de clases a la solucin. En el men File, hacer click en Add y luego en New Project. Expandir Visual C# y hacer click en Windows, seleccionar el template Class Library. 10. En la ventana Solution Explorer, dentro del proyecto de biblioteca de clases, hacer doble click sobre el archivo Class1.cs y escribir un mtodo que retorne la cadena Hello World!.

11. Para agregar un botn y una etiqueta al formulario, seleccionar el proyecto WindowsApplicartion Forms1 y hacer doble click en el archivo Form1.cs. Desde la ventana Toolbox, expandir Common Controls y arrastar un componente Button al formulario. 12. Modificar la propiedad Text del botn a Say Hello en la ventana Properties. 13. Agregar una etiqueta al formulario, del mismo modo que el punto anterior, seleccionando en este caso un componente Label. 14. Para dar funcionalidad al botn, usando el mtodo creado en la biblioteca de clases, es necesario agregar la referencia al proyecto. 15. En la ventana Solution Explorer, Hacer click con el botn secundario del mouse sobre el nodo References perteneciente al proyecto del formulario y seleccionar Add Reference. En el cuadro de dilogo, hacer click sobre la solapa Projects y seleccionar ClassLibrary1, presionar OK. 16. La referencia que agreg aparecer en el nodo References, como se ve en la siguiente imagen.

- 34 -

17. Hacer doble click sobre el botn. En mtodo button1_click, llamar al mtodo creado en la biblioteca y mostrar el resultado en la etiqueta.

18. En la ventana Solution Explorer, hacer click sobre el proyecto del formulario con el botn secundario del mouse y seleccionar Set as StartUp Project. 19. Presionar F5 para ejecutar la aplicacin. 20. Una vez cargado el formulario, presionar el botn Say Hello. El texto Hello Word! aparecer en la etiqueta.

- 35 -

21. Cerrar el formulario. 22. Agregar los controles y escribir el cdigo necesario para realizar el mismo funcionamiento en el sitio web, utilizando el mtodo de la biblioteca de clases.

- 36 -

Mdulo II Introduccin al lenguaje C#

- 37 -

Introduccin Este mdulo presenta la sintaxis bsica y la estructura de C#. Describe los tipos de datos, incluyendo variables y constantes, el sistema comn de tipos de Microsoft .NET, sentencias iterativas y condicionales, y explica cmo crear enumeraciones definidas por usuarios. Comprender la sintaxis del lenguaje es fundamental para escribir cdigo en C#.

- 38 -

Introduccin Esta leccin describe la estructura de un programa C#. Esta informacin se provee como un recurso para desarrolladores que no tienen experiencia con el estilo del lenguaje C.

- 39 -

Introduccin Antes de escribir sus primeras lneas de cdigo en C#, es de gran ayuda comprender la estructura del lenguaje. Definicin La estructura de un lenguaje de programacin especfica los elementos que debe incluir en su aplicacin y define cmo organizar estos elementos para que el compilador entienda su cdigo. Ejemplo de la estructura de C# El siguiente cdigo muestra la estructura bsica de una aplicacin C#: using System; class HelloWorld { static void Main() { Console.WriteLine("Hola Mundo"); } }

Los elementos y los principios de organizacin que se muestran en las seis lneas de cdigo anteriores son brevemente descriptas lnea por lnea en las siguientes secciones.

- 40 -

La palabra reservada using La palabra reservada using hace referencia a recursos de la biblioteca del .NET Framework de Microsoft. Tpicamente, usted inserta esta palabra clave al comienzo de un archivo de programa, por lo general, varias veces, para referenciar a distintos recursos. El espacio de nombres (namespace) System System es el espacio de nombres que provee acceso a toda la funcionalidad de sistema sobre la cual se construye la aplicacin. Clase Programar en C#, o en cualquier lenguaje orientado a objetos, consiste en escribir clases, las cuales se usan para crear objetos. En el anterior ejemplo de cdigo, la clase se llama HelloWorld. El mtodo Main Los mtodos describen el comportamiento de una clase. En la tercera lnea, static void Main es un mtodo global que le dice al compilador donde comienza la ejecucin de la aplicacin. Toda aplicacin C# debe incluir un mtodo Main en una de las clases. Sentencias Las sentencias son instrucciones que se completan para realizar acciones en aplicaciones C#. Las sentencias estn separadas entre s por un punto y coma, para permitir al compilador distinguir unas de otras. Algunos lenguajes ubican una sentencia por lnea. En C#, usted puede incluir mltiples sentencias en una lnea, o una sentencia en mltiples lneas. Es buena prctica escribir una sentencia por lnea; aunque, por cuestiones de legibilidad, es mejor dividir una sentencia larga en varias lneas. Llaves Las llaves {} se usan para identificar el comienzo y el final de bloques de cdigo en una aplicacin. Cada llave que abre debe tener su correspondiente llave que cierra. En el ejemplo, las llaves que siguen a class HelloWorld encierran los tems que estn dentro de la clase HelloWorld. Las llaves que siguen a Main se usan para encerrar las sentencias que estn en el mtodo Main. Microsoft Visual Studio .NET provee varias seales para asegurarse que sus llaves estn correctamente cerradas. Cuando se tipea una llave que cierra, los elementos que encierra aparecen en negrita por un instante. Tambin, los indicadores que estn en el margen izquierdo del documento muestran el alcance del grupo de sentencias.

- 41 -

Introduccin Dar formato es otro elemento del programa, diseado para ayudar a organizar su cdigo. Se fomenta el uso de convenciones para mejorar la estructura y la legibilidad de su cdigo. Ejemplo El cdigo demuestra cmo aplicar los principios de identacin, sensibilidad a maysculas y minsculas, espacios en blanco y comentarios: using System; class HelloWorld { static void Main() { Console.WriteLine("Hola Mundo"); //escribe Hola Mundo } } Identacin La identacin indica que la sentencia se encuentra dentro de un mismo grupo de sentencias. Las sentencias que estn en un mismo grupo o bloque deberan estar identadas al mismo nivel.

- 42 -

Esta es una convencin importante que mejora la legibilidad de su cdigo. Aunque la identacin no es obligatoria, o requerida por el compilador, es una prctica recomendada. Sensibilidad a maysculas y minsculas C# es sensible a maysculas y minsculas, lo que significa que el compilador distingue entre caracteres en mayscula y minscula. Por ejemplo, las palabras programa, Programa y PROGRAMA se consideran diferentes en una aplicacin, no se puede sustituir una por otras. Espacio en blanco El espacio en blanco es ignorado por el compilador. Por eso, se pueden usar espacios en blanco para mejorar la legibilidad y el formato del cdigo. La nica excepcin es que el compilador no ignora los espacios entre comillas. Comentarios Se pueden incluir comentarios de una sola lnea en una aplicacin insertando una doble barra (//) seguida del comentario. Alternativamente, si su comentario es muy largo y ocupa mltiples lneas, puede usar barra asterisco (/*) para indicar el comienzo de un comentario y asterisco barra (*/) para indicar el final de su comentario. El siguiente ejemplo es un comentario de mltiples lneas que incluye un asterisco al principio de cada lnea. Estos asteriscos son opcionales y puede incluirlos para hacer que el comentario sea ms fcil de identificar. Comentario de mltiples lneas Ejemplo /* * Comentario de mltiples lneas * Este ejemplo muestra cmo dar formato a un * comentario de mltiples lneas en C# */ /* uso alternativo de este comentario */ Diseo Usted puede ubicar la llave que abre al final de la lnea en que comienza el grupo, o puede ubicar la llave en la siguiente lnea del mtodo o clase, tal como se muestra en el siguiente ejemplo: using System; class HelloWorld { static void Main() { Console.WriteLine("Hello, World"); } } Ambos diseos son aceptados y correctos. Sin embargo, es importante ser consistente. Su organizacin debera elegir qu diseo usar.

- 43 -

Introduccin Esta leccin presenta la sintaxis bsica del lenguaje C# y el sistema comn de .NET, incluyendo cmo usar tipos, variables, constantes, enumeraciones y cadenas. Cuando usted escriba cualquier aplicacin, debe representar los datos de cierta forma. Este proceso depende fundamentalmente de trabajar con tipos.

- 44 -

Introduccin Cada vez que su aplicacin deba almacenar datos temporalmente para usarlos durante la ejecucin, se almacenan en variables. Puede pensar una variable como si fuera una caja de almacenamiento. Las cajas vienen en diferentes tamaos y formas, llamados tipos, stos proveen almacenamiento para varios tipos de datos. Por ejemplo, el tipo de variable usado para almacenar un nombre es diferente al que se usa para guardar la edad de la persona.

- 45 -

Definicin. Los tipos predefinidos son aquellos provistos por el lenguaje C# y .NET Framework. La siguiente tabla lista los tipos predefinidos y describe los datos que estn diseados para almacenar. Tipo predefinido Byte Sbyte Short Ushort Int Uint Long Ulong Bool Float Double Decimal Object Char String Definicin Enteros de 0 a 255 Enteros de -128 a 127 Enteros de -32768 y 32767 Enteros de 0 y 65535 Enteros de -2147483648 y 2147483647 Enteros de 0 y 4294967295 Enteros de -9223372036854775808 y 9223372036854775807 Enteros de 0 y 18446744073709551615 Booleano: true o false Punto flotante de precisin simple Punto flotante de precisin doble Decimal con 28 dgitos Tipo Base para todos otros tipos Caracter Unicode simple entre 0 y 65535 Secuencia ilimitada de caracteres Unicode #Bytes 1 1 2 2 4 4 8 8 1 4 8 12 N/A 2 N/A

Almacenado Datos Suponga que est escribiendo una aplicacin que permite al usuario comprar tems por Internet con tarjeta de crdito. Su aplicacin debe administrar varias piezas de informacin: el nombre de la persona, el monto de compra, el nmero de la tarjeta de crdito y la fecha de expiracin de la tarjeta. Para representar esta informacin, su aplicacin usa distintos tipos. Eligiendo un tipo Deje que el dato que est representando determine la eleccin del tipo. Por ejemplo, si algo puede ser solo verdadero o falso, use bool. Decimal es una buena eleccin para dinero. Cuando se trabaje con enteros, un int es la eleccin tpica, a menos que haya una razn para elegir otro tipo. Adems de los tipos predefinidos, usted puede definir sus propios tipos para contener cualquier dato que elija.

- 46 -

Introduccin Una variable es un espacio de almacenamiento para un tipo en particular. Por ejemplo, si su aplicacin debe procesar un valor de dinero, requiere una variable que soporte ese valor. Antes de usar una variable, debe declararla. Al declarar una variable, usted est reservando espacio de almacenamiento para esa variable en memoria. Despus de declarar una variable, debe inicializarla asignndole un valor. Sintaxis La sintaxis para declarar una variable es el tipo de declaracin seguido del nombre de la variable. Por ejemplo: int miEntero; bool archivoFueCerrado;

Nombrar variables La siguiente lista identifica algunas buenas prcticas para nombrar variables: Asignar nombres significativos a sus variables. Usar la notacin camello. En la notacin camello la primer letra del identificador es minscula y la primer letra de cada palabra siguiente en el identificador es mayscula, como nuevaCuentaBancaria.

- 47 -

No usar palabras reservadas de C#. Aunque C# sea sensible a maysculas y minsculas, no crear variables que difieran solo en ello.

Inicializando variables Para inicializar una variable, se le asigna un valor. Para asignar un valor, usar el operador (=) seguido del valor, y luego un punto y coma, como se muestra en el siguiente ejemplo: int miVariable; miVariable = 1; Se puede combinar estos pasos, por ejemplo: int miVariable = 1; Ms ejemplos de declaraciones de variables se muestran en el siguiente cdigo: int x = 25; int y = 50; bool estaAbierto = false; sbyte b = -55; Asignando valores literales Cuando se asigna 25 a x en el cdigo anterior, el compilador asigna el valor literal 25 en la variable x. No obstante, la siguiente asignacin genera un error de compilacin: decimal bankBalance = 3433.20; // ERROR! Este cdigo causa un error porque el compilador de C# asume que cualquier nmero literal con un punto decimal es un double, a menos que se especifique que es un decimal. Se especifica el tipo de literal agregando el sufijo, como se muestra en el siguiente ejemplo: decimal balance= 3433.20M;

- 48 -

Los sufijos de literales que se pueden usar se muestran en la siguiente tabla. Se permiten minsculas: Categoria Entero Sufijo U L UL Nmero Real F D M L Descripcin Sin singo Long Long sin signo Float Double Decimal Long

Caracteres Un caracter (tipo char) se especifica entre comillas simples: char miInicial = 'a'; Caracteres de Escape Algunos caracteres no se pueden especificar usando comillas simples, por ejemplo, un caracter de nueva lnea o un beep o una comilla simple. Para representar estos caracteres, used debe usar caracteres de escape, los cuales se muestran en la siguiente tabla: Secuencia de escape \' \" \\ \0 \a \b \f \n \t \v Nombre del character Comilla simple Comilla doble Barra invertida Null Alerta Retroceso Avance Lnea Nueva Tabulacin Horizontal Tabulacin Vertical

Por ejemplo, se puede especificar una comilla simple como sigue: char comillaSimple = '\''; Examinando variables en Visual Studio .NET El entorno de desarrollo de Visual Studio .NET provee herramientas tiles para examinar el valor de las variables mientras su aplicacin esta ejecutndose.

- 49 -

Para examinar el valor de una variable, ubicar un breakpoint en la variable que usted desea examinar, corra la aplicacin en modo debug, y luego usar la herramienta de debug para ver los valores. 1. Ubicar un breakpoint haciendo click en el margen izquierdo de la ventana de cdigo. El breakpoint queda indicado como un punto rojo. Ud. puede ubicar un breakpoint haciendo click en New Breakpoint en el men Debug.

2. Ejecutar su aplicacin en modo debug haciendo click en Start Debugging en la barra de herramientas, o haciendo click en Start Debugging en el men Debug, o presionando F5.

3. Su aplicacin se ejecuta hasta que encuentra un breakpoint. Cuando la aplicacin encuentra un breakpoint, se pausa, y el entorno de desarrollo marca la lnea prxima a ejecutarse. 4. Usar la ventana de debug para ver el valor de la variable. Para abrir las ventanas de debug, en el men Debug, seleccionar Windows, y luego hacer click en Autos o hacer click en Locals, o en This.

La ventana Autos muestra las variables usadas en la sentencia actual y la prxima. Por defecto, la ventana Autos se visualiza abajo del entorno de desarrollo cuando se encuentra en modo debug.

La ventana Locals muestra las variables locales, y la ventana This muestra los objetos asociados al mtodo actual 5. Para pasar al prximo breakpoint, cuando usted est listo de continuar ejecutando su programa, puede presionar F5 o hacer click en Continue en el

- 50 -

men Debug. O puede ejecutar el programa paso a paso presionando F10, o haciendo click en Step Over del del men Debug.

Introduccin La cadena es uno de los tipos ms comnmente usado. Definicin Una variable string contiene una secuencia de caracteres alfanumricos que son usados como entrada para clculos o bsquedas. Nota: No hay lmite en el nmero de caracteres que conforman una cadena. Sintaxis Una cadena se declara como cualquier otra variable, se asigna el tipo (string) y se le da un nombre. Declarando cadenas literales Se puede asignar un valor literal a una variable string encerrando el valor entre comillas dobles. string saludo = "Hola Mundo"; Usando caracteres de escape Tambin se pueden incluir caracteres de escape en un string.

- 51 -

Por ejemplo, si Ud. desea crear un string escrito en dos lneas, puede incluir un retorno de lnea en el string usando el caracter \n, como se muestra en el siguiente ejemplo: string saludo = "Hola\nMundo"; Este cdigo produce la siguiente salida: Hola Mundo Si Ud. quiere insertar una tabulacin, use el caracter de escape \t, como se muestra en el siguiente ejemplo: string saludo = "Hola\tMundo"; // string sample = "Hello\tWorld"; // produce Hola Mundo Para insertar una barra invertida, que es muy til para rutas de archivos, usar el caracter de escape \\, como se muestra en el siguiente ejemplo: string ruta = "c:\\My Documents\\sample.txt"; // produces c:\My Documents\sample.txt Usando cadenas verbatim Una cadena verbatim es un string que es interpretado por el compilador exactamente como est escrito, lo que significa que an cuando la cadena ocupe mltiples lneas o incluya caracteres de escape, stos no son interpretados por el compilador y son incluidos en la salida. La nica excepcin son las comillas dobles, que deben ser interpretadas por el compilador para que pueda reconocer dnde termina la cadena. Una cadena verbatim se indica con el smbolo (@) seguido de la cadena entre comillas dobles. Por ejemplo: string saludo = @"Hola"; string saludo = @"Hola\tMundo"; // produces "Hola\tMundo" El siguiente cdigo muestra un ejemplo ms til: string ruta = @"c:\My Documents\sample.txt"; // produce c:\My Documents\sample.txt Si se desea usar comillas dobles dentro de la cadena verbatim, se debe agregar otro par de comillas dobles. Por ejemplo, para producir Hola se usa es siguiente cdigo: string s = @"""Hola"""; // Nota: tres comillas dobles de cada lado El cdigo anterior produce la salida: "Hola" Entendiendo Unicode El .NET Framework usa Unicode UTF-16 (Unicode Transformation Format,

- 52 -

16-bit encoding form) para representar caracteres. C# tambin codifica caracteres usando el estndar de Unicode. El estndar de Unicode es el mecanismo universal actual de codificacin que se usa para representar texto en el procesamiento de computacin. El estndar anterior era ASCII. El estndar Unicode representa un avance significativo sobre ASCII porque Unicode asigna un valor numrico nico, llamado punto de cdigo, y un nombre a cada carcter que se usa en todos los lenguajes del mundo. ASCII define solo 128 caracteres, lo que significaba que algunos lenguajes no se podan representar correctamente en una aplicacin. Por ejemplo, el carcter A se representa por el cdigo de punto U+0041 y el nombre LATIN CAPITAL LETTER A. Los valores estn disponibles para ms de 65.000 caracteres, y hay espacio para soportar hasta un milln ms. Para ms informacin, ver el standar Unicode en www.unicode.org.

Introduccin Una constante es una variable cuyo valor permanece constante. Las constantes son tiles en situaciones donde el valore que se use tienen un significado y es fijo, como el nmero pi, el radio de la Tierra, o el porcentaje de impuesto. Beneficios Las constantes hacen su cdigo mas legible, mantenible y robusto. Por ejemplo, si asigna el valor 6378 a la constante llamada radioTierra, cuando use este valor en clculos es inmediatamente aparente qu valor se est haciendo referencia, y no es posible asignarle un valor distinto por otra persona.

- 53 -

Sintaxis Una constante se declara usando la palabra clave y el tipo. Se debe asignar un valor a la constante en el momento de la declaracin. Ejemplos const int radioDeLaTierra = 6378;//km const long distanciaAlSol = 149600000;//km const double velocidadOrbital = 29.79D;//km seg

Introduccin Una enumeracin especifica un grupo de constantes. Una enumeracin es un tipo definido por usuario, lo que significa que usted puede crear un enumeracin, declarar variables de ese tipo y asignar valores a esas variables. El propsito de una enumeracin es representar valores constantes. Beneficios Adems de proveer todas las ventajas de las constantes, las enumeraciones: Hacen que su cdigo sea ms fcil de mantener asegurando que a sus variables se asignen solamente valores anticipados. Permiten que usted asigne nombres fcilmente identificables a sus valores, haciendo que su cdigo sea ms fcil de leer. Hacen que su cdigo sea ms fcil de escribir, porque se asignan valores de la enumeracin., ya que muestra una lista de posibles valores que usted puede usar. Permiten que especifique un set de valores constantes y defina un tipo que acepte valores solamente de ese set.

- 54 -

Sintaxis Usted crea una enumeracin usando la palabra clave enum, asignando un nombre, y luego listando los valores que su enumeracin puede tomar. Es recomendable que use la notacin Pascal, para el tipo y para cada miembro de la enumeracin. En la notacin Pascal, la primera letra de cada palabra del identificador se escribe con mayscula, como ListaDePlanetas. Ejemplo En el siguiente ejemplo se muestra una enumeracin: enum Planeta { Mercurio, Venus, Tierra, Marte } El cdigo anterior crea un nuevo tipo, Planeta. Ud. puede crear variables de este tipo y asignarles un valor de la lista de la enumeracin. Haciendo referencia a un miembro especfico. Cuando usted quiera hacer referencia a un miembro en una enumeracin, use el nombre de la enumeracin, un punto y el nombre del miembro. Por ejemplo: el siguiente cdigo declara una variable planetaInterno de tipo Planeta, y le asigna un valor: Planeta planetaInterno = Planeta.Venus; Usted puede declarar una enumeracin en una clase o namespace, pero no en un mtodo. Asignando valores Si los miembros de su enumeracin deben tener un valor especfico, usted puede asignar a miembros de una enumeracin esos valores en la declaracin. El siguiente cdigo asigna el valor del radio de cada planeta interno: enum Planetas { Mercurio = 2437, Venus = 6095, Tierra = 6378 } Tipo base de enumeracin. Usted puede usar cualquier entero excepto char como tipo base que se usar para la enumeracin especificando el tipo luego del nombre de la enumeracin. Por ejemplo: enum Planetas : uint { Mercurio = 2437, Venus = 6095, Tierra = 6378 }

- 55 -

En esta prctica, se declararn e inicializars variables y luego se examinarn usando la herramienta de debug. 1. Abrir una nueva instancia de Visual Studio 2008. 2. En el men File, hacer click en New, y luego en Project. o hacer click en Create Project de la ventana Start Page. 3. Aparecer el cuadro de dilogo New Project. 4. Para elegir el tipo de proyecto, expandir el nodo Visual C# y hacer click en Windows, seleccionar el template Windows Forms Application. 5. Especificar un nombre y una ubicacin para el proyecto y presionar OK. Visual Studio crear el proyecto. 6. Para agregar una etiqueta al formulario, desde la ventana Toolbox, expandir Common Controls y arrastar un componente Label al formulario. 7. Declarar, inicializar y mostrar en la etiqueta una variable con el valor Juan Perez. 8. Declarar, inicializar y mostrar en la etiqueta una variable con el valor 135.20. Se asume que es una variable de tipo double. 9. Crear una enumeracion llamada Planeta, agregar los planetas a la enumeracion. 10. Declarar una variable Planeta, asignar un valor a Planeta.Tierra y mostrarlo en la etiqueta. a. Planeta miPlaneta; b. Asignar el valor Planeta.Tierra a la variable.

- 56 -

11. Usar la herramienta de debug para ver el cdigo paso a paso, y examinar los valores de las variables, usando la ventana Locals. 12. Guardar y Salir de Visual Studio 2008.

Introduccin Cuando se disea aplicaciones, a menudo se debe convertir un dato de un tipo a otro. La conversin puede ser necesaria cuando se realizan operaciones con dos tipos distintos. Definiciones Hay dos tipos de conversiones en el .NET Framework: implcitas y explcitas. Una conversin implcita es automticamente realizada por la CLR (Common Language Runtime) sobre operaciones que garantizan no truncar informacin. En una conversin explcita se solicita explcitamente al compilador a realizar una conversin, que de otra forma podra perder informacin o producira un error.

Por qu convertir? Por ejemplo, cuando se ingresa un valor numrico en una pgina web, el tipo de dato puede ser texto. Un programador debe entonces convertir ese texto a un tipo numrico.

- 57 -

Otra razn para convertir es evitar el desbordamiento u overflow. Si usted trata de sumar dos bytes, el compilador retorna un int. Retorna un int porque el byte puede mantener solo 8 bits, hasta un valor de 255, entonces el resultado de sumar dos bytes podra resultar fcilmente en un nmero mayor de 255 (int=byte+byte). Por esta razn, el valor resultante de la suma es convertido por el compilador y devuelto como un int. Conversiones implcitas La siguiente tabla muestra los tipos de conversin implcita que soporta C#: De Sbyte Byte Short Ushort Int Uint long, ulong Float Char A short, int, long, float, double, decimal short, ushort, int, uint, long, ulong, float, double, decimal int, long, float, double, decimal int, uint, long, ulong, float, double, decimal long, float, double, decimal long, ulong, float, double, decimal float, double, decimal Double ushort, int, uint, long, ulong, float, double, decimal

Notar que las conversiones implcitas pueden ser realizadas desde un tipo pequeo a otro ms grande o desde un entero sin signo a un entero con signo. Ejemplo El siguiente ejemplo muestra una conversin implcita: int x = 123456; // int es un entero de 4 bytes long y = x; // conversin implcita a un long Conversin explcita La sintaxis para realizar una conversin explcita se muestra en el siguiente cdigo: tipo variable1 = (tipo cast) variable2; El tipo entre parntesis indica al compilador que el valor de la derecha (variable2) es convertido al tipo que est especificado entre parntesis. Ejemplo El siguiente ejemplo muestra una conversin explcita: int x = 500; short z = (short) x; // conversin explcita a un short, z contiene el valor 500 Es importante recordar que las conversiones explcitas pueden resultar en prdida de datos. Por ejemplo, en el siguiente cdigo, un decimal es explcitamente convertido a un int: decimal d = 1234.56M; int x = (int) d;

- 58 -

El resultado de esta conversin es que a x se le asigna el valor 1234. Otras conversiones La biblioteca de clases de .NET Framework provee un soporte para tipos de conversiones en la clase System.Convert.

- 59 -

Introduccin Esta leccin explica cmo usar los operadores para crear expresiones.

Introduccin El propsito de escribir una expresin es realizar una accin y retornar un valor. Por ejemplo, usted puede escribir una expresin para hacer un clculo matemtico, asignar un valor o comparar dos valores: Definiciones Una expresin es una secuencia de operadores y operandos. Un operador es un smbolo determinador que indica la accin que usted quiere que ocurra en su expresin. Un operando es el valor sobre el cual la operacin es realizada. Un operador est especficamente diseado para producir un nuevo valor en base al operando. Tipos de operadores: Algunos de los tipos comunes de operadores que se pueden usar en C# son: Incremento y decremento: Usados para incrementar o decrementar un valor en una unidad. Aritmticos: Usado para realizar clculos aritmticos como la suma. De Comparacin: Usados para comparar si un valor es mayor, mayor o igual, menor, menor o igual a otro. Lgicos: Usados para definir situaciones and/or.

- 60 -

Condicional: Usado para realizar una sentencia if. De Asignacin: Usado para asignar un valor a una variable. La mayora de los operadores solamente se usan con datos numricos, pero otros tambin se usan para cadenas. La siguiente tabla lista todos los operadores que se pueden usar en C#: Tipo de Operador Primario Unario Matemtico Desplazamiento Comparacin Igualdad Lgico Condicional Asignacin Operador (x), x.y, f(x), a[x], x++, x--, new, typeof, sizeof, checked,unchecked +, -, !, ~, ++x, --x, (T)x + , - ,*, /, % << , >> < , > , <= , >= , is == &,|,^ && , || , ? = , *= , /= , %= , += , -= , <<=, >>= , &= , ^= , |=

Nota Es importante notar la diferencia entre el operador de asignacin y el operador de igualdad. Notar que es igual a se representa con dos signos igual (==) porque un solo signo (=) se usa para asignar un valor. int x = 10; // asignacin int y = 20; int z = x + y; // (z == 30) z es igual a 30? C# hace posible usar una sintaxis concisa para manipular datos en forma compleja. La siguiente tabla muestra cmo realizar operaciones en una forma ms corta.

Forma corta x++ , ++x x--, --x x += y x -= y x *= y x /= y x %= y x >>= y x <<= y x &= y x |= y x ^= y

Expresin idntica x=x+1 x=x-1 x=x+y x=xy x=x*y x=x/y x=x%y x = x >> y x = x << y x=x&y x=x|y x=x^y

- 61 -

Incremento y decremento Los operadores de incremento y decremento pueden usarse antes o despus del operando. Por ejemplo, x++ y ++x son ambos equivalentes a x=x+1. Sin embargo, cuando estos operadores se usan en expresiones, x++ y ++x se comportan de manera diferente. ++x incrementa el valor de x antes de que la expresin sea evaluada. Es decir, se incrementa x y luego el nuevo valor de x se usa en la expresin. Ejemplo 1 int x = 5; (++x == 6) // verdadero o falso? La respuesta es verdadero. x++ incrementa el valor de x despus de que la expresin se ejecuta, entonces, la expresin se evala usando el valor original de x. Ejemplo 2 x = 5 (x++ == 6) // // verdadero o falso? La respuesta es falso. Ejemplo 3 int x = 10 int y = x++; // y es igual a 10 int z = x + y; // z es igual a 21 Una ayuda para mejorar la legibilidad de su cdigo, es ubicar el incremento y el decremento en sentencias separadas. Negacin lgica El operador de negacin lgica es un signo de admiracin (!). Se usa para revertir el valor de un tipo bool. Si bool b es falso, !b es verdadero Si bool b es verdadero, !b es falso Por ejemplo: bool estaAbierto = true; bool estaCerrado = !estaAbierto; Operadores matemticos Adems de los operadores obvios + - * y /, existe el operador de resto (%) que devuelve el resto de una divisin. Por ejemplo: int x = 20 % 7; // x == 6 Operadores lgicos C# provee operadores lgicos, como se muestra en la siguiente tabla:

- 62 -

Tipo de Operador Lgico Condicional

Operador && ||

Descripcin x && y retorna verdadero si ambos son verdaderos. y se evala solo si x es verdadero. x || y retorna verdadero si alguno de ellos o ambos son verdaderos. y se evala solo si x es falso. x & y retorna verdadero si ambos son verdaderos x | retorna verdadero si alguno de ellos o ambos son verdaderos. x ^ y retorna verdadero si alguno de ellos es verdadero y falso si ambos son verdaderos o ambos falsos.

Booleano

& | ^

Los desarrolladores a menudo usan los operadores lgicos condicionales. Estos operadores siguen las mismas reglas que los operadores booleanos pero tienen la caracterstica que solo son evaluados si es necesario. Con qu usar operadores Se puede usar tambin el operador de suma y de igualdad con cadenas. El signo ms concatena cadenas y el de igualdad las compara. string string string string a b c d = = = = "semi"; "circulo"; a + b; "cuadrado";

La cadena c tiene el valor semicrculo. bool mismaForma = ( "circulo" == "cuadrado" ); mismaForma = ( b == d ); El booleano mismaForma es falso en ambas sentencias.

- 63 -

Introduccin Los desarrolladores a menudo crean expresiones que realizan ms de un clculo, comparacin o una combinacin de ambos. En estas situaciones, la precedencia de los operadores controla el orden en el cual se evalan las expresiones. Si se desea que las operaciones se realicen en un orden diferente, se debe indicar al compilador el orden usando parntesis. Orden de evaluacin El orden en el cual los operadores se evalan en una expresin se muestra en la tabla de precedencia. Tipo de Operador Primario Unario Multiplicativo Adicin Desplazamiento Comparacin Igualdad Lgico Condicional Asignacin Operador x.y, f(x), a[x], x++, x--, new, typeof, checked, unchecked +, -, !, ~, ++x, --x, (T)x *, /, % +,<< , >> < , > , <= , >= , is, as == , != &,^,| && , || , ?: = , *= , /= , %= , += , -= , <<=, >>= , &= , ^= , |=

- 64 -

Por ejemplo, el operador mas (+) tiene una precedencia ms baja que el operador de multiplicacin (*), entonces a + b * c significa multiplicar b * c y luego sumar a. Parntesis Usar parntesis para mostrar el orden de evaluacin y hacer la evaluacin de su expresin ms legible. Los parntesis extra son eliminados por el compilador y no hacen su aplicacin ms lenta. Por ejemplo, en la siguiente expresin, el compilador multiplica b por c y luego suma d. a=b*c+d Usando parntesis, en la siguiente expresin, el compilador primero evala lo que est entre parntesis, (c + d), y luego multiplica por b. a = b * (c + d) Los siguientes ejemplos demuestran la precedencia de los operadores y el uso de parntesis para controlar el orden de la evaluacin. 10 + 20 / 5 (es reultado es 14) (10 + 20) / 5 (es reultado es 6) 10 + ( 20 / 5 ) (es reultado es 14) ((10 + 20) * 5) + 2 (es reultado es 152) Asociatividad Todos los operadores binarios, aquellos que necesitan dos operandos, son asocitativos a izquierda, es decir, que la expresin se evala de izquierda a derecha, excepto por los operadores de asignacin. Los operadores de asignacin y condicionales son asociativos a derecha. Por ejemplo: x + y + z se evala como (x + y) + z x = y = z se evala como x = (y = z )

- 65 -

Esta leccin presenta las sentencias condicionales. Usted aprender cmo y cundo usar sentencias if y switch. Objetivos de la leccin Luego de completar esta leccin usted ser capaz de: Usar la sentencia condicional if...else para controlar el flujo de una aplicacin. Usar la sentencia condicional switch para controlar el flujo de una aplicacin.

Agenda de la leccin Esta leccin incluye las siguientes actividades: Cmo y cundo usar la sentencia if. Cmo y cundo usar la sentencia switch.

- 66 -

En esta prctica basada en papel, examine cada lnea de cdigo y luego responda la pregunta. Asuma que cada codigo se ejecuta en secuencia como est escrito. 1. Cdigo: int x = 10; int y = x++; Pregunta: Cul es el valor de y? Por qu? 2. Cdigo (continua del anterior) x += 10; Pregunta Cul es el valor de x? Por qu? 3. Cdigo int z = 30; int a = x + y * z; Pregunta Cul es el valor de a? Por qu? Escribir esto de una forma ms legible.

- 67 -

4. Cdigo (continua del anterior) int a = 10; int b = a++; bool myBool = ( a == b ); Pregunta Qu hace este cdigo? Cul es el valor de myBool? Pasos para verificar las respuestas con una aplicacin. 1. Abrir una nueva instancia de Visual Studio 2008. 2. En el men File, hacer click en New, y luego en Project. o hacer click en Create Project de la ventana Start Page. 3. Aparecer el cuadro de dilogo New Project. 4. Para elegir el tipo de proyecto, expandir el nodo Visual C# y hacer click en Windows, seleccionar el template Windows Forms Application. 5. Especificar un nombre y una ubicacin para el proyecto y presionar OK. Visual Studio crear el proyecto. 6. Copiar el cdigo correspondiente y verificar las respuestas realizando breakpoints con la herramienta de debug y siguiendo el cdigo paso a paso. 7. Guardar y Salir de Visual Studio 2008.

Introduccin Una sentencia condicional permite controlar el flujo de la aplicacin seleccionando las sentencias que sern ejecutadas, basado en el valor de una expresin booleana.

- 68 -

Hay tres variaciones de una sentencia condicional: if, if else, y if else if. Cuando una expresin que se est evaluando es verdadera, el cdigo siguiente a la sentencia if ser ejecutada. Declarando un if La sintaxis para la sentencia if else es la siguiente: if (expresin booleana) sentencia1 else sentencia2 La sentencia1 se ejecuta si Statement1 is executed if the expresin booleana is verdadera. Si es falsa se ejecuta la sentencia2. Por ejemplo: if ( ventas > 10000 ) { bono += .05 * ventas; } else { bono = 0; } Evaluacin mltiple Se puede evaluar ms de una expresin en una sentencia. Por ejemplo, las expresiones que siguen a la sentencia if se evalan como verdaderas si ventas es mayor a 10000 pero menor a 500000: if ( (ventas > 10000) && (ventas < 50000) ) { // ventas esta entre10001 y 49999 inclusive } Usando el ternario El operator ternario (?) es una forma corta de la sentencia if...else. Es til cuando se desea realizar una comparacin y retornar un valor booleano. Por ejemplo, la siguiente expresin asigna el valor 0 a bono si el valor de ventas es menor a 10000: bono = (ventas > 10000) ? (ventas * .05) : 0

- 69 -

Introduccin Una sentencia switch selecciona el cdigo a ejecutar basndose en el valor de una expresin. Las sentencias switch son tiles para seleccionar una rama de ejecucin de una lista de opciones mutualmente exclusivas. Usar sentencias switch hacen su aplicacin ms eficiente y su cdigo ms legible que si se usa sentencias if anidadas. Sintaxis Una sentencia switch toma la forma de una expresin seguida de bloques de opciones, indicando los casos. Cuando la expresin en el argumento equivale al valor de uno de los casos, el cdigo que sigue a ese caso es ejecutado. Cuando no equivale a ningn caso, se ejecuta el caso por defecto, si es que hay uno definido. Break Se debe incluir una sentencia break al final de cada bloque de opcin para que no se produzca un error de compilacin (siempre que exista cdigo en ese caso). Ejemplo: La siguiente sentencia switch, asume que x es un entero.
switch (x) { case 0: // x is 0 break;

- 70 -

case 1: // x is 1 break; case 2: // x is 2 break; }

Secuencia de ejecucin La secuencia de ejecucin es la siguiente: 1. Se evala x. 2. Si una de las constantes en el caso es igual al valor de la expresin del switch, se pasa el control a la sentencia seguida del caso. 3. Si ninguno de los casos equivale al valor de la expresin, el control se pasa al final de la sentencia switch, o al caso por defecto, el cual es descripto en la siguiente seccin. Si x tiene el valor 1, las sentencias del caso 1 se ejecutan. Definiendo un caso por defecto Si lo desea se puede definir una condicin para aquellos valores que no son manejados en ninguno de los casos. El siguiente ejemplo muestra cmo definir una condicin por defecto.
switch (x) { case 0: // x is break; case 1: // x is break; case 2: // x is break; default: // x no break; }

es 0, 1 o 2

El caso por defecto maneja cualquier valor que no est contemplado en los casos.

- 71 -

En esta prctica completar un cdigo al cual le falta una lgica condicional apropiada. Suponga que un zoolgico necesita 5000 visitantes por semana para completar un proyecto. Usted usar una sentencia if para verificar el nmero de visitantes y escribir un mensaje indicando si el mismo fue abajo o arriba de la meta de 5000 visitantes. Pasos 1. Abrir una nueva instancia de Visual Studio 2008. 2. En el men File, hacer click en New, y luego en Project. o hacer click en Create Project de la ventana Start Page. 3. Aparecer el cuadro de dilogo New Project. 4. Para elegir el tipo de proyecto, expandir el nodo Visual C# y hacer click en Windows, seleccionar el template Windows Forms Application. 5. Especificar un nombre y una ubicacin para el proyecto y presionar OK. Visual Studio crear el proyecto. 6. Para agregar un botn al formulario, desde la ventana Toolbox, expandir Common Controls y arrastrar un componente Button al formulario. 7. Modificar la propiedad Text del botn a Validar en la ventana Properties. 8. Agregar una etiqueta al formulario, del mismo modo que el punto anterior, seleccionando en este caso un componente Label. 9. Agregar un cuadro de texto al formulario, del mismo modo que el punto anterior, seleccionando en este caso un componente TextBox.

- 72 -

10. Para dar funcionalidad al botn, hacer doble click sobre el mismo. Agregar el cdigo necesario para que el mtodo button1_click valide si el valor ingresado en el cuadro de texto es mayor o igual a 5000 y muestre el resultado en la etiqueta. Ejemplo:Se ha alcanzado la meta de 5000 visitantes, o de lo contrario, No se ha alcanzado a la meta. 11. Testear el cdigo presionando F5 para compilar y ejecutar la aplicacin. 12. Ingresar el valor 5000 en el cuadro de texto y presionar el botn Validar y verificar que el mensaje en la etiqueta sea el correcto. 13. Ingresar el valor 4999 en el cuadro de texto y presionar el botn Validar y verificar que el mensaje en la etiqueta sea el correcto. 14. Guardar y Salir de Visual Studio 2008.

Introduccin C# provee varios mecanismos de iteracin, lo cual le permite ejecutar un bloque de cdigo repetidas veces hasta que se cumple una cierta condicin. En todos los casos una sentencia se ejecuta hasta que una expresin booleana se hace verdadera.

- 73 -

Introduccin Una iteracin for se usa para ejecutar un cdigo un cierto nmero de veces. Evala una condicin dada, y mientras esa condicin sea verdadera, ejecuta el bloque de sentencias. La condicin se ejecuta antes de que la condicin sea evaluada. Si la condicin es falsa no se ejecutan las sentencias. Se usa un for cuando se conoce por adelantado el nmero de veces que quiere repetir la ejecucin de un cdigo. Ejemplo Por ejemplo, suponga que desea saber el monto de una cuenta bancaria de ahorros luego de 10 aos, y desea saber el total que tendr al finalizar cada ao. Una forma es escribir la sentencia cuenta *= inters 10 veces, o usar una iteracin.

- 74 -

Sintaxis La sintaxis para declarar una iteracin for es: for (inicializador; condicin; iterador) { sentencias; } Ejemplo for ( int i = 0; i < 10; i++ ) { Console.WriteLine( "i = {0}",i ); } for ( int j = 100; j > 0; j -= 10 ) { Console.WriteLine( "j = {0}", j ); } Esta estructura es muy flexible. Por ejemplo, el contador de iteraciones puede ser incrementado o decrementado en cada iteracin. En este caso, es necesario conocer la cantidad de iteraciones. Ejemplo de un for que decrementa En el siguiente ejemplo, se decrementa la variable i de 10 hasta 1. for ( int i = 10; i > 0; i-- ) { sentencias; } Ejemplo de un for que incrementa En el siguiente ejemplo, se incrementa la variable i de 0 hasta 100, con incrementos de 10. for ( int i = 0; i <= 100; i = i+10 ) { sentencias; } Declaracin mltiple Las sentencias inicializacin e iteracin pueden contener ms una variable local, como se muestra en el siguiente ejemplo: for ( int i = 0, j = 100; i < 100; i++, j-- ) { Console.WriteLine("{0}, {1}", i, j ); } Este ejemplo produce la siguiente salida: 0, 100 1, 99 2, 98 . . . 99, 1

- 75 -

Introduccin Tal como en el caso del for, la iteracin while evala la condicin antes de ejecutar el cdigo. Se usa cuando no se conoce exactamente cuntas veces debe iterar. Sintaxis La sintaxis para declarar una iteracin while es la siguiente: while (condicin) { sentencias; } Ejemplo while ( leerArchivo == true ) { LeerProximaLinea(); } Usando la palabra reservada continue Se puede usar la palabra reservada continue, para iniciar la prxima iteracin sin ejecutar el resto de las sentencias del while. El siguiente ejemplo lee comandos de un archivo. while ( leerArchivo == true ) { string comando = LeerProximaLinea(); if ( comando == "Comentar" ) { continue; //comienza una nueva iteracin }

- 76 -

if ( comando == "Setear" ) { // sentencias para hacer algo } } Cuando el comando es un comentario, no hay necesidad de procesar el resto de la lnea, entonces se usa la palabra reservada continue para comenzar una nueva iteracin. Usando la palabra reservada continue Tambin se puede salir de una iteracin. Cuando se encuentra la palabra reservada break, se termina la ejecucin y contina la siguiente sentencia al while. while ( leerArchivo == true ) { string comando = LeerProximaLinea(); if ( comando == "Exit" ) { break; //sale del while } if ( comando == "Setear" ) { // sentencias para hacer algo } }

- 77 -

Introduccin En una iteracin do, se ejecutan las sentencias del do, se evala la condicin y si es verdadera, se ejecutan las sentencias nuevamente. Es til cuando se desea ejecutar el cdigo del loop al menos una vez. Sintaxis La sintaxis de una iteracin do es la siguiente: do { sentencias } while (expresin booleana); Nota: El punto y coma despus de la sentencia do es obligatorio. Ejemplo En el siguiente ejemplo, se usa un do para escribir nmeros del 1 al 10 en una columna: int i = 1; do { Console.WriteLine("{0}", i++); } while ( i <= 10) En este ejemplo, el operador de incrementos se usa para incrementar el valor de i despus de que es escrito por primera vez.

- 78 -

En esta prctica, se usar una iteracin for para calcular la suma de los enteros del 1 al 1000. Pasos 1. Abrir una nueva instancia de Visual Studio 2008. 2. En el men File, hacer click en New, y luego en Project. o hacer click en Create Project de la ventana Start Page. 3. Aparecer el cuadro de dilogo New Project. 4. Para elegir el tipo de proyecto, expandir el nodo Visual C# y hacer click en Windows, seleccionar el template Windows Forms Application. 5. Especificar un nombre y una ubicacin para el proyecto y presionar OK. Visual Studio crear el proyecto. 6. Para agregar un botn al formulario, desde la ventana Toolbox, expandir Common Controls y arrastrar un componente Button al formulario. 7. Modificar la propiedad Text del botn a Calcular en la ventana Properties. 8. Agregar una etiqueta al formulario, del mismo modo que el punto anterior, seleccionando en este caso un componente Label. 9. Para dar funcionalidad al botn, hacer doble click sobre el mismo. Agregar el cdigo necesario para que el mtodo button1_click sume los enteros del 1 al 1000 con una sentencia for y muestre el resultado obtenido en la etiqueta. 10. Testear el cdigo presionando F5 para compilar y ejecutar la aplicacin. 11. Presionar el botn Calcular y verificar que el mensaje en la etiqueta sea el correcto. 12. Opcional: Realizar la misma funcionalidad que en el punto 9 usando una sentencia while en lugar de una sentencia for. 13. Opcional: Realizar la misma funcionalidad que en el punto 9 usando una sentencia do en lugar de una sentencia for. 14. Guardar y Salir de Visual Studio 2008.

- 79 -

Mdulo III Fundamentos de la POO

- 80 -

Abstraccin Probablemente la abstraccin sea la herramienta ms poderosa con la que cuenta el hombre para comprender fenmenos complejos del mundo real. En el mundo real nos enfrentamos da a da con diferentes fenmenos tales como objetos fsicos, eventos, situaciones y procesos. La abstraccin, en este sentido, es el proceso [intencional] de supresin, u ocultamiento, de detalles respecto de un fenmeno, entidad o concepto, dejando de lado el resto, de manera de concentrarnos en otros aspectos que nos son ms significativos en un determinado contexto. Es importante notar que este proceso de abstraccin es completamente subjetivo y dependiente del contexto; diferentes personas pueden atravesar este proceso de simplificacin de diferentes maneras para un mismo fenmeno o entidad, eliminando diferentes conceptos y, por tanto, llegando a una caracterizacin diferente. Por ejemplo, tomando como objeto de anlisis el concepto de automvil, un observador interesado en la mecnica podra caracterizarlo como un vehculo con cierto tipo de motor, mientras que otro observador, en un contexto diferente, podra caracterizar al mismo automvil como un medio de trasporte, haciendo nfasis en su capacidad de trasportar personas o cosas. Notar que en este caso, deja de importar el tipo de motor que tenga (simplificacin). Diferentes niveles de abstraccin Nuestro mundo est conformado por una enorme cantidad de fenmenos y entidades, imposibles de representar y manejar sin alguna herramienta que nos permita caracterizarlos de alguna forma prctica.

- 81 -

Una forma de realizar esto es lograr abstraer determinadas caractersticas de las entidades de nuestro dominio, para as modelar un concepto ms general que las abarque. En otras palabras, lo que buscamos es separar efectivamente los objetos concretos de la idea que queremos representar. Esto, que en principio nos puede parecer una tarea difcil, es algo que hacemos inconscientemente en el da a da. A modo de ejemplo, pensemos en la nocin de que un objeto se encuentre sobre otro: si vemos un florero apoyado en una mesa diremos naturalmente que el florero se encuentra sobre la mesa. Asimismo, podemos decir que un lpiz se encuentra sobre un escritorio o que el pan se encuentra sobre la mesada. De estos ejemplos podemos decir que el florero, el lpiz y el pan comparten el concepto de estar sobre algo. De hecho, una vez que logramos abstraer la idea de estar sobre, no slo la podemos extrapolar a otras situaciones sino que podremos hablar en abstracto con otras personas que comprendan esa nocin, sin referirnos a un caso concreto. De forma similar, podramos utilizar una pelota, un aro, una rueda, etc., y a partir de estos objetos explicar lo que significa que un objeto sea redondo. Una vez hecho esto podemos determinar si una o ms entidades pueden ser caracterizadas de esta manera simplemente por comparacin (verificando que el conjunto de propiedades que define al concepto redondo tambin son propias de la entidad en cuestin). Al trabajar con objetos, dos de las ms importantes abstracciones con las que trabajaremos son las nociones es-un y tiene-un:

- 82 -

Tipos de abstracciones: es-un y tiene-un [9] Las nociones de dividir en partes y dividir en especializaciones representan las dos formas de abstraccin ms importantes usadas en la programacin orientada a objetos. Comnmente se las conoce como las abstracciones es-un y tiene-un. La idea de divisin en partes es la abstraccin tiene-un. El significado de este trmino es fcil de comprender; un auto tiene-un motor, tiene-una transmisin, etc. Al concepto de especializacin nos referimos como la abstraccin es-un. Nuevamente, el trmino surge de las sentencias que pueden ser usadas para ilustrar las relaciones. Utilizando este concepto, una bicicleta es-un vehculo rodado, el cual a su vez es-un medio de transporte... Buscando el nivel de abstraccin correcto [9] En las etapas tempranas del desarrollo de software uno de los problemas crticos es encontrar el nivel de abstraccin correcto o adecuado. Un error comn es hacer hincapi en los niveles ms bajos, preocupndose por los detalles de implementacin de varios componentes claves, en lugar de esforzarse para asegurar que la estructura organizativa de alto nivel promueva una clara separacin de responsabilidades (concerns). El programador (o el equipo de diseo en grandes proyectos) debe tratar de balancear el nivel de abstraccin adecuado en cada momento. Por un lado, uno no quiere ignorar o tirar a la basura demasiados detalles sobre un problema, pero por otro lado, tampoco uno debe mantener muchos detalles que al fin de cuentas opaquen y no nos permitan ver ciertas cuestiones importantes. En el contexto de la programacin OO, la abstraccin surge como un proceso de reconocimiento de similitudes entre fenmenos, conceptos y entidades, y la decisin de concentrarse en estas similitudes e ignorar las diferencias entre ellos. De esta manera, logramos identificar conceptos generales (persona, auto, pelota, etc.) que puedan ser mapeados directamente a construcciones bsicas (objetos) en nuestro paradigma.

- 83 -

Modelo Un modelo, es una versin simplificada de algn fenmeno o entidad del mundo real. El modelado, como proceso, est muy ligado a otro concepto muy importante que vimos anteriormente: el de abstraccin. La forma de construir un modelo, ya sea mental, fsico, etc., es a travs de un proceso de abstraccin (simplificacin), mediante el cual descartamos aquellas caractersticas que no nos sean relevantes y nos concentramos en aquellas que s nos interesan. Esas caractersticas relevantes son las que terminarn dando forma a nuestro modelo. En dos lneas, acerca de un modelo podramos decir: Es una abstraccin utilizada para entender y razonar sobre entidades y fenmenos del mundo real. Debe omitir detalles no esenciales y su grado de granularidad debe estar acorde a sus propsitos. Modelado del mundo real Creamos un sinfn de modelos mentales para poder comprender los fenmenos interesantes y para poder dominarlos. Un modelo es un artefacto creado por un propsito; no puede estar bien o mal, slo puede ser ms o menos til en relacin a su objetivo. La eleccin de los fenmenos y las preguntas que hacemos sobre los mismos dependen de nuestros intereses, los paradigmas de modelado a los que estemos acostumbrados y las herramientas que usemos para expresar nuestras ideas. Si lo que queremos es comunicar de manera precisa nuestras ideas a un colega, nuestro paradigma de modelado y notacin deben ser similares a su paradigma y notacin. Si lo que queremos es comunicarnos con una computadora, nuestro paradigma de modelado debe ser consistente con el lenguaje de

- 84 -

computacin apropiado. A medida que seamos ms expertos en un paradigma de modelado en particular, ms difcil ser poder realizar preguntas cuyas respuestas excedan los lmites del paradigma.[16] Como dice Trygve en la referencia anterior, un modelo es creado con un propsito, y por tanto, podemos inferir que hay una subjetividad implcita agregada por el observador que crea este modelo, ya que lo hace motivado por un propsito. Es importante notar que dicho propsito (ya sea propio o inducido) puede ser completamente diferente al de otro observador. Asimismo, un modelo nuca est completo, sino que su grado de completitud depende del uso que le demos a dicho modelo. Las personas creamos modelos justamente para simplificar y generalizar fenmenos ms complejos, con lo cual, en realidad, terminamos ignorando ms detalles de los que incluimos en nuestro modelo.

A pesar de no hacerlo conscientemente, vivimos constantemente utilizando y creando nuevos modelos de todo tipo para representar los fenmenos de la naturaleza; los ejemplos abundan y van desde los modelos fsicos (utilizados en el diseo de represas, puentes, puertos y otras construcciones) hasta los modelos matemticos (utilizados por ejemplo para realizar simulaciones y optimizaciones sobre sistemas reales, como en el campo de la hidrologa). En astronoma se utilizan modelos especficos para representar el movimiento de los cuerpos celestes en el espacio, utilizando elementos de la geometra como son los crculos y las elipses para representar las rbitas que describen los planetas, junto con otros modelos matemticos. Estos modelos permiten a los astrnomos, entre otras cosas,

- 85 -

poder estimar la posicin de uno de estos cuerpos celestes en el espacio en un punto determinado en el tiempo y predecir, por ejemplo, las colisiones entre ellos. Es importante notar que al realizar este tipo de modelos se dejan de lado muchos detalles; por ejemplo, los planetas no son esferas perfectas, pero son modelados de esa forma ya que simplifican determinados clculos y la imprecisin que introducen en el resultado final es despreciable. Los modelos tambin nos permiten poder realizar simulaciones para evaluar o estimar cul ser el desempeo del sistema en el mundo real, una vez que sea llevado a la prctica. Este tipo de tcnicas es utilizado en la industria del diseo de vehculos de alta tecnologa (automotriz o aeronutica) para testear, por ejemplo, las caractersticas aerodinmicas de los prototipos, utilizando maquetas a escala y simulando el desempeo del vehculo dentro de un tnel de viento. Modelos OO La ejecucin de un programa se puede ver como un modelo fsico simulando el comportamiento de una parte real o imaginaria del Mundo. La palabra clave aqu es fsico. El trmico modelo fsico es utilizado para distinguir estos modelos de, por ejemplo, los modelos matemticos. Parte de la realidad puede ser explicada utilizando ecuaciones matemticas: las leyes de Newton son un ejemplo de esto. Un modelo fsico es un modelo construido a partir de algn material fsico como pueden ser los ladrillos Lego. Los elementos del modelo fsico representan fenmenos del dominio de aplicacin. Los objetos son como el material computarizado que se utiliza para construir modelos fsicos computarizados. Podemos ver a los objetos como un tipo de ladrillos electrnicos de Lego.

- 86 -

Resea Histrica [9] Comnmente se piensa que la programacin orientada a objetos es un fenmeno relativamente reciente dentro de la ciencia de la computacin. Por el contrario, en realidad, casi todos los conceptos principales actualmente asociados con los programas orientados a objetos, tales como objetos, clases y jerarquas de herencia, fueron desarrollados en los aos 60 como parte de un lenguaje llamado Simula, diseado por investigadores en el Centro de Computacin Noruego (Norwegian Computing Center). Como el nombre lo indica, Simula fue un lenguaje inspirado por los problemas involucrados en la simulacin de sistemas de la vida real. Sin embargo, la importancia de estas construcciones, an para los propios desarrolladores de Simula, fue reconocida parcialmente [10]. En la dcada del 70 Alan Kay organiz un equipo de investigacin en Xerox PARC (Palo Alto Research Center o Centro de Investigacin Palo Alto). Con una gran presciencia o previsin, Kay predijo la prxima revolucin en la computacin personal que se desarrollara cerca de una dcada ms tarde (ver, por ejemplo, su artculo de 1977 en Scientific American [11]). Kay estaba interesado en descubrir un lenguaje de programacin que fuera entendible para aquellos profesionales ajenos a la computacin, para la gente comn sin ningn tipo de entrenamiento en el uso de computadoras. Encontr en las nociones de clases y en la computacin como simulacin una metfora que fcilmente podra llegar a ser comprendida por los usuarios principiantes, como luego demostrara mediante una serie de experimentos dirigidos en PARC usando a los chicos como programadores. El lenguaje de programacin desarrollado por su equipo fue llamado Smalltalk. Este lenguaje evolucion a travs de varias revisiones durante la dcada. Un artculo muy popular de la revista Byte de 1981 contribuy para popularizar en gran medida los conceptos desarrollados por Kay y su equipo en Xerox. Casi contemporneo al trabajo de Kay fue otro proyecto llevado a cabo al otro lado del continente. Bjarne Stroustrup, un investigador de los Laboratorios Bell que haba aprendido Simula mientras completaba su doctorado en la Universidad de Cambridge en Inglaterra, se encontraba desarrollando una extensin al lenguaje C que facilitara la creacin de objetos y clases [12]. Esto se transformara luego en el lenguaje C++ [13]. Con la difusin de informacin sobre estos y otros proyectos similares, comenz un aumento vertiginoso de la investigacin sobre tcnicas de programacin orientada a objetos. Al momento de producirse la primera conferencia importante sobre programacin orientada a objetos, en 1986, hubo literalmente docenas de nuevos lenguajes de programacin compitiendo para ser aceptados. Entre estos incluidos Eiffel [14], Objective-C [15], Actor, Object Pascal, y varios dialectos de Lisp. En las dos dcadas desde la conferencia de OOPSLA en 1986, la programacin orientada a objetos a pasado de ser revolucionaria a ser el movimiento principal, y en este proceso ha transformado gran parte de la ciencia de la computacin.

- 87 -

Simula: Por los aos 60, los programadores comprendieron que era necesario descomponer los sistemas de programacin en partes pequeas ms manejables. La introduccin de Simula-67 trajo consigo la primera nocin de objetos, las clases, y una especie de herencia; por lo tanto, Simula es un hito importante en cualquier debate sobre lenguajes de programacin OO. El lenguaje fue diseado por OleJohan Dahl, Bjrn Myhrhaug y Kristen Nygaard en el Norwegian Computing Center ubicado en Oslo. La primer versin del lenguaje, Simula-1, fue presentada en 1966. Los mdulos de programacin definidos por Simula no se basaron en procedimientos, sino en objetos fsicos tangibles. Simula tuvo una novedosa manera de plantear los objetos, en donde que cada objeto tiene sus propios datos y comportamiento. Smalltalk: Muchos consideran que el primer lenguaje verdaderamente orientado a objetos fue Smalltalk, desarrollado en el Learning Research Group en Xerox's Palo Alto Research Center a principios de los 70. En Smalltalk, todo es realmente un objeto, lo que impone el paradigma OO y hace que sea prcticamente imposible escribir un programa en Smalltalk que no sea OO. Smalltalk es en realidad un ambiente de programacin interactivo que interpreta cdigo sobre la marcha (on-the-fly) lo que permite cambiar los parmetros y el cdigo de un programa mientras el programa est corriendo. Smalltalk fue el primero en introducir muchos otros conceptos que luego apareceran como revolucionarios al ser implementados en otras aplicaciones, como los buscadores o exploradores (browsers), las ventanas y los mens emergentes (pop-up menus). El ambiente se basa en una mquina virtual, permitiendo a las aplicaciones ser migradas entre diferentes plataformas.

- 88 -

C++: Tiene su origen en un proyecto para simular software corriendo en un sistema distribuido. Este simulador, de hecho escrito en Simula, es donde Bjarne Stroustrup concibi la idea de combinar algunas de las caractersticas de Simula con la sintaxis de C. El concepto de clase en C++ brindaba el mecanismo de encapsulamiento, que hoy por hoy es un requisito esencial de cualquier lenguaje OO. Aunque C brind una base slida para C++, tambin se convirti en una carga un tanto pesada. El hecho de hacer a C++ compatible con su predecesor trajo serios inconvenientes. Aunque C++ proporciona construcciones OO, tambin es posible usar tcnicas de programacin estructurada. Por este motivo, C++ no es considerado un lenguaje OO puro, si no un lenguaje hbrido. Java: Los orgenes de Java se encuentran en un lenguaje que se apod Oak. Su creador decidi que basara su lenguaje en el tan exitoso C++, pero que slo incorporara aquellas caractersticas de C++ que parecieran valer la pena. Las caractersticas que elimin de C++ fueron la herencia mltiple, las conversiones automticas de tipos, el uso de punteros, y el esquema de administracin de memoria de C++. Pero el proyecto fue archivado por falta de inters en el mercado. Con la llegada de la Web y el surgimiento de los browsers, la gente de Sun comenz a atar cabos, y as Oak fue rescatado de la inactividad y renombrado como Java. C#: Microsoft respondi a la popularidad de Java produciendo una versin de Java llamada Visual J++. Sin embargo, Microsoft se decidi por una respuesta ms integral. Usando muchas de las innovaciones que implementaba Java, Microsoft desarroll un lenguaje denominado C# que se convirti en la base para la plataforma .NET. De igual manera que Java, C# se bas fuertemente en los xitos y fracasos de lenguajes anteriores.

- 89 -

Paradigma Etimolgicamente la palabra paradigma deriva del Griego paradigma, que significa patrn o ejemplo. Thomas Kuhn [2] asign a la palabra paradigma [19] el significado aceptado hoy en da en la comunidad cientfica, cuando la adopt para referirse al conjunto de prcticas que definen a una disciplina cientfica durante un perodo de tiempo en particular. Kuhn define tambin el trmino cambio paradigmtico[20], como el proceso y el resultado de un cambio en las hiptesis establecidas por las teoras cientficas reinantes. Un cambio paradigmtico (o revolucin cientfica, como tambin lo llama Kuhn) se origina cuando los cientficos encuentran anomalas que no pueden ser explicadas mediante el paradigma aceptado universalmente sobre el cual debe realizarse el progreso cientfico. Todos los paradigmas presentan anomalas pero las hay de distinto tipo e importancia. Cuando ocurre una serie de anomalas significativas contra un paradigma actual, la disciplina cientfica entra en un estado de crisis, en el cual se prueban nuevas ideas, tal vez descartadas previamente. Eventualmente se forma un nuevo paradigma, que entrar en conflicto con el actual, enfrentando a los seguidores de cada corriente. De producirse la transicin entre el antiguo paradigma y el nuevo, se dice que ha sucedido una revolucin cientfica o cambio paradigmtico, segn Kuhn. Floyd, en The Paradigms of Programming [18] de 1978 habla sobre cmo influyen los paradigmas de programacin en el suceso de los diseadores de programas, sobre cmo deben ser enseados y cmo deben ser incorporados en los lenguajes de programacin. Afirma que por aquella poca existan problemas en cuanto al inventario de paradigmas de programacin disponible, en la manera en que se enseaba estos paradigmas y en la manera en que los lenguajes de programacin soportaban o dejaban de soportar los paradigmas de sus correspondientes comunidades de usuarios. Se refiere al estado de la programacin como un estado de depresin (lo llama depresin del software), en comparacin con la crisis del software de la dcada anterior. Basndose en la visin de Kuhn sobre las revoluciones cientficas y en experiencias llevadas a cabo por l y algunos de sus colegas, concluye que la probabilidad de que se produzca un avance continuo en programacin, requerir de una invencin continua, elaboracin y comunicacin de nuevos paradigmas.

- 90 -

Paradigma estructurado [21] [22]: describe la programacin en trminos del estado del programa y sentencias que cambian dicho estado. Los programas estructurados son una secuencia de instrucciones o sentencias que le indican a la computadora cmo realizar una tarea. Podemos identificar los siguientes tipos de sentencias bsicas sobre las cuales se basa el paradigma: la asignacin, la secuencia, la repeticin o iteracin y la ramificacin condicional. Con estas tres sentencias se supone que se puede construir cualquier programa dentro del paradigma estructurado. Dentro del conjunto de lenguajes que soportan el paradigma estructurado, podemos mencionar: C, PASCAL, ADA, BASIC.

- 91 -

El Paradigma Orientado a Objetos Hasta el momento hemos dado algunas ideas respecto de qu es un paradigma y de los distintos paradigmas de programacin que encontramos hoy en da. Pero por qu es importante esto? En nuestro caso, poder definir el paradigma orientado a objetos nos va a permitir entender claramente cules son las bases sobre las que vamos a trabajar. En breve, al definir el paradigma OO estaremos explicitando cules son los conceptos bsicos con los que trabajaremos y cules son las reglas vlidas que nos permitirn manipular dichos conceptos. Probablemente Alan Kay es quin ha dado la definicin ms concisa del paradigma orientado a objetos. En [27] escribe: para este momento la mayora de los principios de Smalltalk se haban plasmado en seis ideas principales que estaban en consonancia con las premisas iniciales del diseo del intrprete. Las primeras tres hablan sobre que significa ser un objeto cmo son vistos y utilizados desde el exterior. Estas premisas no requirieron de ninguna modificacin durante los aos. Las ltimas tres los objetos vistos desde adentro fueron re-pensadas en cada nueva versin de Smalltalk Todo es un objeto. Los objetos se comunican enviando y recibiendo mensajes. Los objetos tienen su propia memoria (en trminos de objetos). Cada objeto es instancia de una clase (que tambin debe ser un objeto). Las clases contienen el comportamiento compartito por sus instancias. Para evaluar un programa, el control es pasado al primer objeto y el resto es tratado como envo de mensajes.

- 92 -

La principal construccin es la nocin de objetos. Los objetos pueden componerse o conocer otros objetos. Los programas estn organizados en base a clases y jerarquas de herencia. La forma de pedirle a un objeto que lleve a cabo una determinada tarea es por medio del envo de un mensaje.

- 93 -

Programas Orientados a Objetos Una vez que hemos sentado el paradigma con el cual vamos a trabajar (o sea, las reglas del juego) es interesante detenernos un momento y analizar qu forma tiene un programa en este paradigma. Al utilizar un paradigma estructurado, un programa se basa en el diseo de estructuras de datos, los cuales son bsicamente contenedores de informacin pasivos. Luego, se desarrollan algoritmos que trabajan sobre dichas estructuras realizando algn tipo de transformacin de datos. Al construir programas orientados a objetos, se deja de pensar en trminos de estructuras de datos pasivas y algoritmos y se piensa en trminos de objetos activos; los objetos son entidades que proveen un comportamiento particular y son utilizados para modelar el dominio del problema. Bajo esta ptica, nuestro programa ya no se encuentra dividido entre datos pasivos y algoritmos activos, sino que es una red de objetos que cooperan (envindose mensajes) para llevar determinada tarea a cabo.

- 94 -

- 95 -

Los objetos son los elementos primarios que utilizaremos para construir programas. Dichos objetos son bsicamente abstracciones de alguna entidad (ya sea tangible o no) del dominio del problema que estamos atacando. Para resolver un problema determinado en el paradigma OO slo tenemos objetos, que se comportan de una determinada manera (definido por sus mensajes) e interactan entre ellos (envindose de mensajes). Cada objeto es una construccin caracterizada por: su comportamiento, el cual est dado por los mensajes a los que puede responder; su estado interno, que, mediante un conjunto de variables de instancia representa las caractersticas intrnsecas de la entidad; y finalmente su identidad. El comportamiento que provee puede verse como los servicios que presta y que determinan su existencia y deben servir para responder preguntas como /para qu quiero a este objeto?/ y /qu servicios me puede brindar?/. Por otro lado, como dijimos antes, el estado interno est representado por variables de instancia que se utilizan para expresar caractersticas del objeto y relaciones de conocimiento con los otros objetos con que va a colaborar. Otra de las propiedades importantes de los objetos es el encapsulamiento, que sostiene que el nico que puede manipular el estado interno de un objeto es el mismo objeto. En otras palabras, un objeto no puede invadir el espacio privado (estado interno) de otro objeto. Pero no debemos perder de vista el hecho de que dentro de un sistema coexisten miles de objetos, lo que conduce a la necesidad de disponer de algn mecanismo que permita identificarlos unvocamente de modo de poder diferenciarlos. Por este motivo, los objetos poseen una identidad que, como se present anteriormente, es una propiedad intrnseca de cada objeto y, por tanto, no puede ser modificada por el programador.

- 96 -

Caractersticas Comportamiento bien determinado. Al disear un objeto lo que uno hace es establecer cules son las responsabilidades de dicho objeto. Estas responsabilidades se materializan en un conjunto de mensajes a los que un objeto puede responder. Estado interno. A nivel de implementacin los objetos poseen una estructura interna que se define en trminos de variables de instancia. Las variables de instancia se utilizan para representar aquellas caractersticas propias del objeto (como puede ser el nmero de una cuenta bancaria) y a los objetos con los que deber colaborar a lo largo de su vida. Identidad. Es una propiedad intrnseca que poseen todos los objetos. La definicin de identidad es la siguiente: Un objeto solo es idntico a si mismo. Notar que identidad no es lo mismo que igualdad; dos tazas pueden ser iguales, pero cada taza solo es idntica a si misma. Todo objeto es instancia de una clase. Las clases son el siguiente nivel de abstraccin, sobre el cual entraremos en detalle mas adelante. Como dijimos anteriormente, un objeto es una abstraccin de una entidad de nuestro modelo. Dado que generalmente nos encontramos con un conjunto de objetos que se comportan en forma similar, el siguiente paso es encontrar una forma de definir el comportamiento de todos estos en forma general. Pensemos por ejemplo en las cuentas bancarias: en un banco habr miles de cuentas bancarias, las que se

- 97 -

comportarn de la misma forma. Por este motivo, aparece la nocin de clase cuenta bancaria, la cual se utiliza para describir el comportamiento de todas sus ocurrencias (instancias).

Cuando pensamos en los objetos vistos desde afuera lo que nos interesa es qu es lo que el objeto puede hacer y no cmo lo hace. A continuacin veamos un extracto del libro de Budd [34]: Supongamos que un individuo, llamado Chris, desea enviarle flores a una amiga llamada Robin, que vive en otra ciudad. Debido a la distancia, Chris no puede simplemente recoger las flores y llevrselas a Robin en persona. No obstante, esta tarea puede resolverse fcilmente. Chris puede simplemente caminar hasta la florera ms cercana, la cual es atendida por un florista llamado Fred. Chris le dir a Fred el tipo de flores que desea enviar a Robin, y la direccin donde deben ser entregadas. Luego Chris tendr la seguridad de que las flores sern entregadas de manera expeditiva y automtica. Corriendo el riesgo de volver innecesariamente a algn punto, enfaticemos el hecho de que el mecanismo que fue usado para resolver el problema, fue encontrar un agente apropiado (llamado Fred) y enviarle a este un mensaje con la solicitud. Es responsabilidad de Fred satisfacer esa solicitud. Existe un mtodo (algn algoritmo o conjunto de operaciones) usado por Fred para hacer esto. Chris no tiene que preocuparse en saber las particularidad del mtodo que Fred usar para satisfacer la solicitud, de hecho, a menudo la persona que hace una solicitud no desea saber lo detalles. Esta informacin usualmente se encuentra oculta. Una investigacin, sin embargo, podra mostrar el hecho de que Fred enva un mensaje ligeramente

- 98 -

diferente a otro florista en la ciudad donde vive Robin. Ese florista, tal vez tenga un subordinado que hace los arreglos florales. Este florista entonces le pasa las flores, junto con otro mensaje a un repartidor, y as sucesivamente. En un principio, el florista que vive en la ciudad de Robin obtuvo sus flores de un mayorista de flores, el cual interactu con los que cultivan las flores, los cuales deben administrar un equipo de jardineros. Entonces, nuestra primera observacin de la solucin orientada a objetos a un problema, es que la solucin a este problema requiere de la ayuda de otros individuos. Sin su ayuda, el problema no podra ser fcilmente solucionado. Expresaremos esto de la siguiente manera: Un programa orientado a objetos se estructura como una comunidad de agentes interactuando, llamados objetos. Cada objeto tiene un rol para llevar a cabo. Cada objeto provee un servicio, o ejecuta una accin, que es usada por otro miembro de la comunidad. [34] En muchos casos el objeto necesitar otros objetos que lo ayuden a llevar a cabo su tarea. En este caso, al enviar el mensaje, el objeto emisor tambin le enva un conjunto de parmetros para que el objeto pueda resolver el pedido. Por ejemplo, al pedirle al florista que enve las flores, el objeto emisor (Chris) debe indicarle al florista el tipo y cantidad de flores que quiere enviar, as como la direccin de Robin.

La implementacin indica cmo hace el objeto para responder a sus mensajes. Se especifica a travs de un conjunto de mtodos. Es privada del objeto. Ningn otro objeto puede accederla.

- 99 -

Estado interno/estructura interna El estado interno de un objeto est constituido por un conjunto de variables de instancia. Dichas variables de instancia acompaan al objeto durante todo su ciclo de vida. Una variable de instancia puede hacer referencia a una propiedad intrnseca de la entidad que representa, o bien a otro objeto con el cual pueda colaborar para llevar a cabo sus responsabilidades. A lo largo de la vida del objeto, las propiedades y colaboradores pueden cambiar. Por ejemplo, al depositar $100 en una cuenta bancaria la variable de instancia saldo cambiar su valor. Este estado interno es privado del objeto. Es una de las caractersticas fundamentales del paradigma y, como veremos ms adelante, resulta crucial para lograr software escalable. Por definicin, las variables de instancia (estructura interna) de un objeto es privado a ste. El nico que puede acceder y manipular sus v.i. es el propio objeto. Si un objeto externo quiere acceder a una v.i. lo tiene que hacer por medio del envo de un mensaje. Esto le da la posibilidad al objeto de decidir qu es lo que quiere publicar. Identidad La identidad es una propiedad intrnseca que poseen todos los objetos. Por definicin un objeto solo es idntico a si mismo. Es importante notar que identidad no es lo mismo que igualdad; dos sillas pueden ser iguales al punto que, si nos damos vuelta y las cambian de lugar, no podramos distinguir cual es cual. A pesar de esto, cada silla sigue manteniendo su identidad.

- 100 -

La identidad sirve para poder distinguir objetos individuales dentro de un sistema. Es decir, dentro de un sistema coexisten una cierta cantidad de objetos, por lo que es necesario poder identificarlos y diferenciarlos entre ellos. La identidad, a nivel prctico, no tiene mayor importancia para el programador ya que los lenguajes orientados a objetos proveen un mecanismo por el cual cada objeto posee un identificador nico y, de hecho, casi nunca es posible obtener dicho identificador. Indirectamente vamos a estar utilizando este concepto cuando comparemos dos objetos por igualdad, pero este concepto se ampliarn a continuacin.

- 101 -

Identificar objetos y propiedades. Como ejercitacin adicional, puede plantearse la idea de agrupar las propiedades en los objetos que correspondan.

- 102 -

Identificar objetos y propiedades. Como ejercitacin adicional, puede plantearse la idea de agrupar las propiedades en los objetos que correspondan.

- 103 -

Dijimos que el comportamiento de un objeto se define por medio de los mensajes que ste entiende y que para poder enviarle un mensaje a un objeto, hay que conocerlo. Hemos visto tambin que al enviarle un mensaje a un objeto, ste responde activando el mtodo asociado al mensaje, siempre y cuando ste exista. Tambin vimos que un mensaje es enviado a un objeto por otro objeto y como resultado del envo de un mensaje, siempre se retorna un objeto. El mtodo, es decir la implementacin, especifica qu hace el objeto receptor al recibir el mensaje. El mtodo no contiene otra cosa que una serie de mensajes enviados a otros objetos (slo hay objetos y mensajes). Recordemos tambin que los mtodos son privados al objeto y que los objetos slo pueden comunicarse mediante el envo de mensajes. Veamos en qu consiste la ejecucin de comportamiento ante el envo de un mensaje. Mostrar la importancia de qu mensajes entiende un objeto y no cmo los realiza. Poder mostrar la modularidad y separacin que existe a la hora de programar en POO.

- 104 -

Al enviarle un mensaje a un objeto, ste responde activando el mtodo asociado a ese mensaje (siempre y cuando exista). Como resultado del envo de un mensaje puede retornarse un objeto.

- 105 -

Por ejemplo, supongamos que contamos con un objeto que representa la torre de control de un aeropuerto. Si la torre desea avisar al avin LV-YPS que debe aterrizar, primero debe conocerlo. A su vez, si el avin LV-YPS desea comunicarse con la torre, tambin debe conocerla.

- 106 -

Cuando un objeto (emisor) le enva un mensaje a otro objeto (receptor), el objeto receptor responde activando el mtodo asociado a este mensaje, siempre que el mensaje recibido forme parte del protocolo del objeto receptor. Volviendo al ejemplo, cuando la torre enve el mensaje aterrizar al avin, ste activar un mtodo que contendr el procedimiento de aterrizaje. Podra suceder que el avin no conozca los procedimientos para aterrizar, es decir, podra no existir un mtodo que se corresponda con el mensaje aterrizar. Qu ocurre cuando un objeto no entiende un mensaje recibido? Esto depende del lenguaje: algunos lenguajes pueden evitar esta situacin mediante un sistema de tipos fuerte que chequee estas situaciones en tiempo de compilacin, mientras que otros brindan una mayor libertad en cuanto al envo de mensajes y responden, eventualmente, con un error en tiempo de ejecucin.

- 107 -

Otro ejemplo de envo de mensajes, usando una versin simplificada del juego de rol.

- 108 -

La persona enva el mensaje #dameUnCafe() a la expendedora. La expendedora le pide a la cafetera que le sirva el caf en el vaso que le da. La cafetera retorna el vaso con el caf preparado. La expendedora entrega el vaso con caf a la persona

- 109 -

Siempre se debe contar con dos objetos para poder resolver el envo de un mensaje, uno cumpliendo el rol de emisor y otro el de receptor (eventualmente podra tratarse del mismo objeto cumpliendo los dos roles). El emisor enva un mensaje al receptor, en este caso el mensaje hacerAlgo. El receptor recibe el mensaje y busca entre sus mtodos aquel que coincida con el nombre del mensaje. Si encuentra el mtodo correspondiente, procede a ejecutarlo (en este caso el objeto receptor tiene un mtodo asociado al nombre hacerAlgo). La ejecucin del mtodo la veremos en detalle ms adelante, en este caso nos interesar saber que al finalizar la misma, el objeto receptor deber retornar un objeto como resultado del envo del mensaje, devolviendo nuevamente el control al objeto emisor.

- 110 -

Cmo es la manera en que se especifica un mensaje? En primer lugar debemos asignarle un nombre, el mismo debe tener significado en el dominio del problema, esto es de vital importancia para el futuro entendimiento del sistema. Por otro lado, debemos indicar cules son los posibles objetos, u otro tipo de parmetro, requeridos para resolver el mensaje. Cada lenguaje de programacin propone una sintaxis particular para indicar el envo de un mensaje. A lo largo del curso utilizaremos la siguiente sintaxis: <objeto receptor>.<nombre de mensaje> (<parmetros>); Por ejemplo, decirle a una cuenta bancaria que deposite $100 se escribe como: unaCuenta.depositar(100);

- 111 -

Ejemplificar correctamente la diferencia entre mtodo y mensaje. Mostrar, si es necesario, el #dameCafe(), del ejemplo del juego de rol.

- 112 -

- 113 -

Veamos como ejemplo la implementacin del mtodo depositar del objeto caja de ahorro. El comentario nos indica de manera concisa en qu consiste la resolucin del comportamiento representado por el mtodo. En este caso la resolucin es muy sencilla: la variable de instancia saldo de la caja de ahorro se actualiza con el valor del parmetro unMonto.

Este caso es muy similar, salvo que se reciben dos parmetros: el saldo y el nro. de cuenta. El cajero conoce al banco por medio de la variable de instancia banco, y lo que hace es delegar en dicho objeto la responsabilidad de buscar la caja de ahorro que corresponde al nro. de cuenta que viene como parmetro. Luego, una vez encontrada la caja de ahorro correspondiente, se le enva el mensaje depositar con el monto como parmetro.

- 114 -

Ahora ser necesario especificar el mtodo saldo. El objeto caja de ahorro debe devolver su saldo actual como respuesta al envo del mensaje saldo, para lo cual necesitaremos un mecanismo que nos permita indicar cul es el resultado de evaluar un mtodo. Para tal fin contamos con una construccin sintctica especial, el smbolo flecha hacia arriba. El smbolo va seguido de cualquier objeto e indica que ese objeto ser retornado como resultado de la ejecucin del mtodo. La especificacin del mtodo saldo quedara de esta manera. Simplemente se indicara que se debe devolver el colaborador interno saldo, anteponiendo el smbolo al nombre de la variable de instancia que contiene el valor a retornar.

- 115 -

Forma ms visual e intuitiva de los envos de mensajes en los objetos.

Cambio del objeto titular dentro de la caja de Ahorro

- 116 -

Este caso, en respuesta al mensaje titular(), esperamos obtener el titular de la caja de ahorro. Por lo tanto, cuando la caja de ahorro recibe el mensaje titular, activa el mtodo correspondiente y se retorna el objeto persona Juan Prez.

- 117 -

Realizar el mtodo #extraer(unMonto), utilizando el mtodo #depositar(unMonto) como ejemplo

- 118 -

Modelar el proceso de extraccin de dinero de un cajero automtico identificando las principales entidades participantes y el conjunto de mensajes que los comunica. Para esto utilizaremos diagramas de secuencia UML.

- 119 -

- 120 -

El ocultamiento de la informacin es particularmente importante en la programacin orientada a objetos. Los objetos frecuentemente son complejas estructuras de datos con muchos componentes que no deben ser accedidas por los clientes. Existen algunas razones para tal encapsulamiento: - La representacin de un objeto est sujeta a cambios. Durante el desarrollo de una clase puede suceder que un conjunto diferente de variables de instancia resulte mejor con el propsito de la clase. Si los clientes acceden directamente a las variables de instancia, stos deben ser modificados para que queden consistentes con la nueva representacin. - En contraste con los registros en los programas convencionales, los objetos no son usados principalmente como contenedores cuyo nico objetivo es agrupar datos elementales. Ms bien, las variables de instancia del objeto son utilizadas para representar el estado del mismo. El objeto en si mismo es una entidad activa que puede llevar a cabo ciertas operaciones cuando le es requerido. Las variables de instancia pueden ser consideradas como variables auxiliares que son necesarias para realizar las operaciones. - Los objetos frecuentemente poseen otros objetos. La posesin es privada para el objeto; la relacin entre el objeto y los otros objetos que le pertenecen no debe ser alterada por los clientes. - Los objetos son accedidos mediante referencias polimrficas. Si un objeto es accedido a travs de una variable v, el objeto referenciado por v puede cambiar dinmicamente durante la ejecucin del programa y no podemos estar seguros si la variable v siempre har referencia a un objeto con la misma estructura interna.

- 121 -

El encapsulamiento es una de las caractersticas fundamentales del paradigma y es uno de los puntos clave para que el software escale en forma suave y se adapte a los cambios. Idealmente, en cualquier sistema, intentamos que el acoplamiento entre las partes que lo componen sea lo ms bajo posible. Esto implica que cada parte sabe lo mnimo indispensable de las otras partes, lo que implica que los cambios en alguna de esas partes no impactan (o lo hacen en forma muy leve) en el resto de las partes del sistema. En un sistema OO las partes bsicas son los objetos, por lo que nos gustara que los cambios en un objeto impacten lo menos posible en el resto de los objetos que hacen al sistema. Uno de las formas de lograr esto es por medio de la separacin entre lo que es pblico de un objeto y lo que es privado. Desde el punto de vista mas puro del paradigma orientado a objetos un objeto se define por los servicios que puede brindar (o sea, por los mensajes que entiende). Luego, lo lgico es que estos mensajes sean la parte pblica del objeto. Por otro lado, la implementacin de estos mensajes (los mtodos, o sea cmo resuelve un requerimiento el objeto) no es algo que le importe al emisor del mensaje, por lo que debe ser privado del objeto que implementa el mtodo. De forma similar, tampoco tiene porque interesarle al resto de los objetos cul es la estructura interna de un determinado objeto ni con qu otros objetos ste tiene que colaborar para llevar a cabo sus responsabilidades. Todo lo que le importa al objeto emisor es cul es el mensaje que tiene que enviar, qu parmetros debe enviar y cual es la semntica asociada al envo del mensaje.

- 122 -

El hecho de programar en trminos del protocolo de un objeto, sin saber nada de su estructura interna ni de cmo implementa sus mtodos, es lo que ayuda a mantener los cambios acotados, evitando que un cambio en un objeto se propague por todo el sistema. De aqu la relacin que nombramos anteriormente acerca de los mtodos y el encapsulamiento. Justamente es a travs de los mtodos que el objeto publica la nica manera de interactuar con l. Nada se podr hacer que no est provisto a travs del protocolo.

El mismo grfico que habamos visto anteriormente lo vemos ahora desde el punto de vista del encapsulamiento. Vemos que el titular de la caja de ahorro es slo conocido por la misma caja de ahorro y la nica forma de accederla es a travs del protocolo del objeto. Lo mismo ocurre con el saldo.

- 123 -

Ahora debemos modelar un objeto punto, que represente un punto en el plano, dando la implementacin correspondiente a cada uno de los siguientes mensajes: getX() Devuelve la coordenada x del punto setX(unNumero) Cambia la coordenada x del punto por unNumero getY() Devuelve la coordenada y del punto setY(unNumero) Cambia la coordenada y del punto por unNumero igualA(otroPunto) Devuelve si el punto es igual a otroPunto

- 124 -

Mostrar con diagramas de secuencia la interaccin entre el pulsador, la va, la locomotora. En primera instancia van a modelar el motor con un boolean. Luego el ejercicio los llevar a que lo modelen con un objeto a parte: Motor

- 125 -

En este punto, el nuevo objeto Motor entender los tres mensajes: #haciaAtrs.

- 126 -

#haciaAdelante. #apagado. Mostrar la escalabilidad del objeto agregando ms estados posibles de movimiento.

Si pensamos nuevamente en el ejemplo del banco, es evidente que existirn varios objetos de tipo caja de ahorro, uno por cada caja de ahorro existente en el banco. Todos estos objetos debern tener el mismo comportamiento y es de esperar que si hay algn cambio en el comportamiento de las cajas de ahorro, el mismo se refleje por igual en todos los objetos de este tipo. Luego, es necesario contar con algn mecanismo que permita agrupar el comportamiento comn a un conjunto de objetos, de manera que pueda ser reutilizado sin tener que ser especificado individualmente. Por otro lado, el estado interno de cada caja de ahorro ser diferente (los saldos no sern los mismos por ejemplo) pero todas compartirn la misma estructura interna (todas conocen su saldo, titular, etc.). Desde el punto de vista de la reutilizacin, es as como surge la nocin de clase: como una herramienta que me permite factorizar y reutilizar estructura y comportamiento en comn.

- 127 -

Una clase nos permite describir en un slo lugar el comportamiento genrico de un conjunto de objetos. Una vez definido este comportamiento, es posible crear objetos que lo reutilicen y se comporten de la manera all descripta. Las clases nos permiten pensar en un nivel de abstraccin ms alto. Cuando construimos programas nos preguntamos constantemente: qu clases de objetos aparecen en mi sistema? Una clase entonces puede pensarse como un molde para un tipo especfico de objeto. Molde como medio para definir la forma de los objetos. Es natural clasificar objetos por determinadas caractersticas. En muchos casos nos encontramos en situaciones en las que un conjunto de objetos se comportan en forma similar y slo difieren en sus caractersticas bsicas o en los objetos con los que colabora. En estos casos es importante poder abstraer el comportamiento comn de los objetos y especificarlos en forma abstracta, de forma tal de modelar el concepto subyacente. Como definicin de clase se puede tomar la siguiente: Una clase es una descripcin abstracta de un conjunto de objetos. Las clases describen el formato de los objetos y agrupan comportamiento en comn. Una clase especifica qu forma tendrn sus instancias (sus variables de instancia) y cmo respondern a los mensajes que se le enven. De esta forma, una clase puede ser vista como una descripcin de sus instancias y como un repositorio de comportamiento. Cuando se le enva un mensaje a un objeto, lo que hace el intrprete es buscar en la clase del objeto receptor un mtodo con el cual responder al envo del mensaje. De sta forma, todos los objetos que comparten una misma clase responden en forma similar al envo de un mensaje.

- 128 -

En el caso de la cuenta bancaria, dado que en un banco habr miles de cuentas, lo que hacemos es modelar la nocin de cuenta bancaria en una clase. Esta clase definir qu variables tendrn sus instancias, as como los mensajes a los que puede responder. En nuestro caso la clase se llamar CuentaBancaria, especificar que sus instancias tienen dos variables (saldo y titular) y que pueden responder a los mensajes saldo(), titular(), depositar(unMonto) y extraer(unMonto).

Sabemos que las clases son las encargadas de describir en forma abstracta a sus instancias, luego es lgico que si necesitamos crear una nueva instancia se lo pidamos a la clase. Por ese motivo, la clase tiene la responsabilidad de crear sus instancias. Volviendo al ejemplo de la cuenta bancaria, para crear una nueva cuenta bancaria lo que debemos hacer es pedirle a la clase CuentaBancaria que nos retorne una nueva instancia. Uno de los problemas ms comunes es la confusin entre clases e instancias. Es importante remarcar que una clase es un molde de estructura y comportamiento, as como la encargada de crear a sus instancias. Una vez que se crea una instancia, esta tiene sus propias variables. Por ejemplo, si creamos dos cuentas bancarias, cada una tendr su saldo y su titular. Lo nico que comparten es que ambas son instancia de la misma clase, lo que implica que al enviarles un mensaje, el mtodo que se activar se buscar en la clase CuentaBancaria, que es comn a las dos.

- 129 -

Contamos con una clase CajaDeAhorro, que define el comportamiento y la estructura comn a todas sus instancias. Una CajaDeAhorro sabr extraer(unMonto) de su saldo, depositar(unMonto) y devolver su saldo actual. Adems deber colaborar con un objeto que cumplir el rol de titular de la cuenta. Podemos ver en el ejemplo dos instancias de CajaDeAhorro, cada una con su propio estado interno. Eventualmente podran llegar a compartir el mismo titular de cuenta (un persona es titular de ambas cuentas) o bien tener el mismo saldo. Las dos instancias de la clase CajaDeAhorro comparten el mismo comportamiento, definido en la propia clase. De ahora en ms cuando queramos referirnos a un mtodo de una clase, lo haremos utilizando la siguiente sintaxis, por convencin: NombreDeClase>>mtodo(parmentro1, ) Ejemplo: CajaDeAhorro>>depositar(unMonto) saldo := saldo + unMonto

- 130 -

Las clases se especifican por medio de un nombre, la estructura interna que tendrn sus instancias y los mensajes y mtodos asociados que definen su comportamiento. El nombre debe comenzar con mayscula y no contener espacios. Las variables de instancia representan el estado o estructura interna de las instancias de la clase. Por ltimo, se detalla el conjunto de mensajes que entender una instancia de dicha clase, tambin llamado protocolo.

- 131 -

Hasta el momento habamos visto que un objeto, ante le envo de un mensaje, buscaba entre sus mtodos aqul que correspondiera con el mensaje en cuestin para proceder con la activacin del mismo. Ahora que hemos introducido las clases como repositorio de comportamiento, la bsqueda del mtodo asociado a un mensaje ya no ser plena responsabilidad de las instancias, sino que este trabajo ser delegado a las clases. En el ejemplo podemos ver cmo el objeto unaCajaDeAhorro delega la bsqueda del mtodo a su clase (CajaDeAhorro) ante la recepcin del mensaje depositar(unMonto). La clase buscar entre su coleccin de mtodos aqul que corresponda con el mensaje depositar(unMonto) y se proceder a ejecutar el mtodo en el contexto del objeto receptor del mensaje (unaCajaDeAhorro).

- 132 -

Muestra la necesidad de generar una instancia nueva de la clase Punto, la cual es el resultado de las operaciones pedidas.

- 133 -

- 134 -

- 135 -

A la hora de programar existen diversas formas de conocimiento. A esta altura es bueno recordar que, para que un objeto le enve un mensaje a otro debe conocerlo, o sea, nombrarlo. Para esto existen diversas formas de conocimiento: - Variables de instancia. - Variables temporales. - Parmetros. - Seudo-variables.

- 136 -

Son las que ms hemos visto hasta el momento. Al definir la clase, se define la estructura que tendrn sus instancias; esta estructura interna viene dada por un conjunto de variables de instancia. Las variables de instancia acompaan al objeto desde su creacin hasta que muere.

- 137 -

- 138 -

Se utilizan para nombrar objetos que el objeto receptor necesita para cumplir un requerimiento. Por ejemplo, para alquilar una pelcula a un cliente, el video club debe saber qu pelcula y qu cliente. En este caso la pelcula y el cliente son parmetros que se envan junto con el mensaje alquilar para poder cumplir el requerimiento.

Para transferir de una cuenta a otra, el banco necesita el monto, y las dos cuentas.

- 139 -

Se definen dentro de un mtodo. Estas variables se utilizan para nombrar objetos temporalmente. Al finalizar la activacin del mtodo dejan de existir.

- 140 -

En este caso, la variable cuenta se utiliza slo como una referencia auxiliar. No es necesaria ms all de la activacin de este mtodo.

- 141 -

As como un objeto necesita conocer a otro objeto para enviarle un mensaje, es necesario que tenga una forma de nombrarse a si mismo para poder enviarse mensajes. Esto se hace por medio de la seudo-variable this. Se dice que this es una seudo-variable ya que funciona similar a una variable de instancia, excepto por dos motivos: no est definida en ninguna clase y no pude ser asignada (qu significara hacer algo del estilo this := otherObject?). Si bien la denominacin this es la ms correcta para esta situacin de autoreferenciamiento, en el sentido de que representa al objeto en s mismo y la palabra concuerda con este hecho, existen otros lenguajes donde se ha dado una denominacin distinta para esta misma seudo-variable.

- 142 -

En este caso tenemos a un objeto caja de ahorro con un saldo inicial de 400 (de Juan) y otra con 300 (de Ana). Inicialmente la extraccin se hace sobre la caja de Juan, previo chequeo de ciertas condiciones (por ejemplo que el saldo no quede en descubierto), para lo cual se utiliza el mtodo sePuedeExtraer(unMonto) con el fin de realizar esta validacin. El objeto caja de ahorro deber poder mandarse a s mismo el mensaje sePuedeExtraer(unMonto) en el contexto de una extraccin y en el caso de resultar positivo el chequeo, proceder a realizar la extraccin actualizando su saldo, en caso contrario se obtendr un error. Esto queda reflejado en la especificacin del mtodo extraer(unMonto) perteneciente al objeto caja de ahorro. En este caso el objeto caja de ahorro hizo las veces de Emisor y Receptor para un mismo mensaje, pero como al Receptor no le interesa saber quin es el Emisor, es exactamente lo mismo si el mensaje ha sido enviado por otro objeto o por uno mismo, no se tratan de manera diferente. En el segundo caso, el objeto intenta hacer lo mismo con la caja de Ana, pero se aprecia que la operacin falla debido a que no tiene saldo suficiente.

- 143 -

- 144 -

En este ejercicio debemos dar una implementacin para un objeto fecha, que sirva para representar fechas del tipo 21/6/1999, el cual deber entender los siguientes mensajes con su correspondiente semntica: getDia() Devuelve el nmero de da de la fecha setDia(unNumero) Cambia el nmero de da de la fecha por unNumero getMes() Devuelve el nmero de mes de la fecha setMes(unNumero) Cambia el nmero de mes de la fecha por unNumero getAo() Devuelve el nmero de ao de la fecha setAo(unNumero) Cambia el nmero de ao de la fecha por unNumero igualA (otraFecha) Devuelve true si la fecha es igual a otraFecha, false en caso contrario mayorQue() Devuelve true si la fecha es posterior a otraFecha, false en caso contrario menorQue() Devuelve true si la fecha es anterior a otraFecha, false en caso contrario mayorOIgualQue() Devuelve true si la fecha es posterior o igual a otraFecha, false en caso contrario menorOIgualQue() Devuelve true si la fecha es anterior o igual a otraFecha, false en caso contrario seEncuentraEntre(unaFecha, otraFecha) Devuelve true si la fecha se encuentra entre unaFecha y otraFecha, false en caso contrario

- 145 -

Este ejercicio consiste en modelar un objeto lapso de tiempo que permita representar un intervalo o lapso de tiempo entre dos fechas. El protocolo a implementar es el siguiente: desde() Devuelve la fecha de inicio del lapso de tiempo hasta () Devuelve la fecha de fin del lapso de tiempo desdeHasta(unaFecha, otraFecha) Cambia la fecha de inicio por unaFecha y la de fin por otraFecha cantidadDeDias() Devuelve la cantidad de das existentes entre la fecha de inicio y la de fin incluye(unaFecha) Devuelve true si la fecha unaFecha se encuentra entre la fecha de inicio y la de fin La idea de este ejercicio es mostrar cmo funciona el doble encapsulamiento. Hacer notar cmo podra cambiar la estructura interna de este objeto y cmo se resolveran los mismos mensajes si en vez de tener dos fechas como variables internas se tuviera una fecha desde que comienza el lapso y la cantidad de das en el cual termina.

- 146 -

- 147 -

- 148 -

- 149 -

Cuando se hace referencia al desacoplamiento interno se quiere decir que se puede seguir agregando funcionalidad sin depender de la estructura interna que tenga el objeto, sino utilizar el protocolo que implementa para llevar a cabo la nueva funcionalidad querida.

- 150 -

- 151 -

Aqu se trata de definir qu es realmente UML. Tomar y pensar en las tres palabras por separado ayudan a la comprensin del objetivo de este lenguaje y al por qu de su utilidad: - Modelado: nos llevar a presentar la visin y concepcin de MODELOS. - Unificado: nos llevar a mencionar qu se unific en UML - Lenguaje: nos llevar a explicar que para cerrar esta Unificacin de Modelado era importante consensuar un Lenguaje; especificando su sintaxis y su semntica, indicando tambin reglas para conformar modelos grficos vlidos

- 152 -

Se presenta la idea de modelo porque lo que se va a notar, utilizando UML, es justamente un modelo. Se presentan caractersticas y ventajas de los modelos.

- 153 -

Booch, Rumbaug y Jacobson, son los creadores de UML, llamado inicialmente Lenguaje de Modelado. El primer intento de combinar y reemplazar los mtodos existentes se di cuando Rumbaugh se uni a Booch en Rational Software Corporation en 1994. Ellos empezaron combinando conceptos de los mtodos OMT. La metodologa OMT Object Modeling Technique - fue creada por James Rumbaugh mientras diriga un equipo de investigacin en los laboratorios de la Ca. General Electric) y Booch, obteniendo como resultado una primera propuesta en el ao 1995. En ese momento Jacobson tambin se uni a Rational y comenz a trabajar con el do Booch-Rumbaugh. El Lenguaje Unificado de Modelado fue adoptado en forma unnime por los miembros de OMG como estndar en noviembre de 1997. All OMG asumi la responsabilidad de futuros desarrollos en el estndar de UML. Nota: OMG (Object Management Group) es una organizacin que promueve estndares para la industria del software. Puede ampliar informacin en: www.omg.org

- 154 -

Notar que hubo muchos otros aportes adems de lo propuesto por Rumbaugh, Booch y Jacobson. Todas estas contribuciones sumaron riqueza al lenguaje y graficamente se manifiestan en los diferentes tipos de diagramas que tiene UML. Mencionar las ventajas buscadas y obtenidas con la unificacin de diferentes enfoques. Algunos de ellos son: Reunir los puntos fuertes de cada mtodo Idear nuevas mejoras Proporcionar estabilidad al mercado Eliminar ambigedad en los usuarios

- 155 -

Es importante mencionar que la mayora de las personas somos naturalmente visuales. Eso explica por qu entendemos mejor y ms rpidamente un dibujo que parte de un texto. Es por ello que en el criterio de unificacin de las metodologas de modelado se concluy en un lenguaje grfico visual para la especificacin y construccin de modelos. Aqu vale la pena detenerse en semntica y sintaxis. La sintaxis de UML determina la forma de los elementos bsicos sintcticos. Por ejemplo, un rectngulo con una divisin y nombre es una clase. La semntica de UML especifica el significado de cada elemento de modelado. Siguiendo con el ejemplo de la anterior, la semntica de la clase es la de denotar a un conjunto de objetos, instancias de la misma, que tienen la misma estructura y el mismo comportamiento. Las reglas de construccin o reglas de buena formacin determinan la forma en que los elementos pueden combinarse de manera de obtener modelos correctos. Por ejemplo, que las clases deben tener obligatoriamente un nombre; o que los nombres de los mensajes de una clase no pueden repetirse.

- 156 -

El Lenguaje Unificado de Modelado se ha convertido en una notacin estndar para el modelado de sistemas con gran cantidad de software. UML sirve adems para el modelado de negocios y sistemas no software [OMG01]. Nota: Artefacto: es una pieza de informacin usada o producida por un proceso de desarrollo de software.

- 157 -

En UML 2.0 se definen una serie de diagramas adicionales a los establecidos en UML 1.x. Aqu se presentan todos los diagramas UML para que el asistente tenga una idea global de lo abarcado por el lenguaje. El conjunto de diagramas se encuentra organizado en torno a dos categoras: Diagramas Estructurales (representados en naranja). Diagramas Dinmicos o de Comportamiento (representados en azul). Diferentes diagramas se utilizan durante diferentes etapas dentro del desarrollo de software. Se puede asociar como ejemplo alguna etapa con algn diagrama, por ejemplo, la etapa de Anlisis con los diagramas de Casos de Uso, de Actividad y de Estado. Los diagramas a presentar a continuacin se corresponden con la etapa de Diseo (hay ms diagramas para esta etapa) son los de clases y los diagramas de secuencia.

- 158 -

- 159 -

El objetivo de este diagrama es el de representar los objetos del sistema, especificando la estructura de las clases, sus relaciones y su comportamiento. Si bien el elemento de modelado que ser presentado es la CLASE, tambin pueden aparecer en el diagrama de Clases, las INTERFACES. Aparte de esos dos (y la nota), no hay otro elemento de modelado que pueda participar de este diagrama.

- 160 -

Una clase es una plantilla que define una coleccin de conceptos con las mismas caractersticas. Estructura de una clase: Cada uno de los compartimientos es opcional, excepto el del nombre. Nombre de la clase: en la prctica, los nombres de clase son nombres cortos o expresiones nominales extrados del vocabulario del sistema que se est modelando. El nombre de la clase se escribe con mayscula, centrado y en negrita. Atributos: un atributo representa alguna propiedad del elemento que se est modelando Operaciones: son los mensajes que los objetos de la clase entienden Responsabilidades: es un contrato o una obligacin de una clase. Se utiliza cuando an no se ha definido completamente el comportamiento de la clase, en una etapa previa al diseo.

- 161 -

Diferenciar lo sintcticamente correcto de lo semnticamente correcto. En UML, lo indicado es que el nombre comience con letra mayscula. Por ej: X o Clase1. Segn el paradigma OO, el nombre de una clase debe ser lo ms representativa posible del concepto que modela. Por ejemplo: CuentaBancaria, TarjetaDeClienteVIP Se muestran dos formas de escribir el nombre de una clase: escribiendo directamente su nombre y escribiendo su nombre precedido de su ubicacin (teatro es un paquete).

- 162 -

La nica condicin es que el nombre del atributo debe comenzar con minsculas. Los corchetes significan que el elemento es opcional, por lo que slo el nombre es obligatorio. La barra / indica que el atributo es derivado. Por ejemplo, la edad de una persona podra derivarse de su fecha de nacimiento. El atributo subrayado indica que el atributo es de clase. Esto significa que este atributo es compartido por todas las instancias de la clase (tambin se lo conoce como variable de clase). Por convencin, se indica subrayado. Descripcin de las propiedades: changeable: no hay restricciones para modificar el valor del atributo. addOnly: para los atributos con multiplicidad mayor de uno (colecciones), se pueden aadir valores adicionales, pero una vez creado, un valor no puede ser eliminado o modificado. frozen: el valor del atributo no se puede modificar tras inicializar el objeto (una constante) A menos que se especifique lo contrario, los atributos siempre son changeable.

- 163 -

UML ofrece una serie de elementos para especificar detalles para los atributos y las operaciones. Desde fuera de un objeto slo se puede manipular los datos por medio de llamadas a operaciones mtodos- del objeto. Tipos de visibilidad: Privado: (-) significa que slo se puede usar en los objetos donde est definido el atributo u operacin. Protegido: (#) significa que slo los objetos de las subclases de la clase a la que pertenece el atributo u operacin pueden utilizarlo. Paquete: ( ) significa que slo los objetos del paquete en donde est definida la clase a la que pertenece el atributo u operacin pueden utilizarlo. Pblico: (+) significa que los objetos pertenecientes a cualquier clase puede utilizar el atributo u operacin. No existe un valor por defecto para la visibilidad. Si sta no se indica, est indefinida.

- 164 -

El nombre del mensaje junto a sus parmetros (incluido el tipo de retorno, si lo hay) se conoce como signatura de la operacin.

- 165 -

Al igual que con los atributos, pueden especificarse mensajes a nivel de clase. stas se indican con el subrayado. Descripcin de las propiedades de una operacin: isQuery: indica que la operacin no cambia el valor de ningn atributo. La operacin es una funcin pura sin efectos laterales. Hay otras tres propiedades relacionadas con la concurrencia, que tienen que ver con la manera de que un mtodo que implementa una operacin responde a los mltiples hilos de actividad: sequential: (slo puede llegar una llamada por vez). Los invocadores deben coordinarse para que en el objeto slo haya un nico flujo al mismo tiempo. guarded: (pueden llegar varias llamadas simultneamente, pero slo puede atenderse una por vez). concurrent: (pueden entrar mltiples llamadas al mtodo provenientes de otros tantos hilos y todas ellas se atienden concurrentemente).

- 166 -

Indicar que no es necesario mostrar todos los atributos y mensajes de la clase. Para organizar mejor las listas largas de atributos y operaciones, se pueden utilizar estereotipos para anteponer a cada grupo una categora descriptiva, sin que estas estn predeterminadas.

- 167 -

Al modelar clases, un buen comienzo consiste en especificar las responsabilidades de los elementos del vocabulario. Una clase puede tener cualquier nmero de responsabilidades, aunque, en la prctica, cada clase bien estructurada tiene al menos una responsabilidad y a lo sumo unas pocas. Al ir refinando los modelos, se traducirn esas responsabilidades en el conjunto de atributos y mensajes que mejor satisfagan las responsabilidades de la clase.

- 168 -

Entre las relaciones que pueden aparecer en un diagrama de Clases, no se menciona aqu a la Realizacin. Una realizacin es una relaciona una interfaz con la clase que la implementa.

- 169 -

- 170 -

Dada una asociacin entre dos clases, se puede navegar desde un objeto de una clase hasta un objeto de la otra clase, y viceversa. Es legal que ambos extremos de una asociacin estn conectados a la misma clase. Esto significa que, dado un objeto de la clase, se puede conectar con otros objetos de la misma clase. La navegabilidad en las asociaciones es bidireccional.

- 171 -

Rol: cuando una clase participa en una asociacin, tiene un rol especfico que juega en la asociacin. Un rol es simplemente la cara que la clase de un extremo de la asociacin presenta a la clase del otro extremo. Se puede nombrar explcitamente el rol que juega una clase en una asociacin. Nota: la misma clase puede jugar el mismo o diferentes roles en otras asociaciones. Navegabilidad: indica qu objeto conoce a quien. En el caso presentado, un usuario conoce una clave, pero una clave no conoce a un usuario. Si se quiere bidireccionalidad puede indicarse indistintamente con una flecha en cada punta de la asociacin o slo con la asociacin, sin flechas en los finales.

- 172 -

Multiplicidad: el cuntos se denomina multiplicidad del rol de la asociacin, y se escribe como una expresin que se evala a un rango de valores o a un valor explcito. Cuando se indica una multiplicidad en un extremo de una asociacin, se est especificando que cada objeto de la clase conoce a tantos objetos como los indicados en la multiplicidad en este extremo opuesto. Notar que * indica 0..*

- 173 -

Una asociacin entre dos clases representa una relacin estructural entre iguales, es decir, ambas clases estn conceptualmente en el mismo nivel, sin ser ninguna ms importante que la otra. Agregacin: sirve para modelar una relacin todo/parte, en la cual una clase representa el todo, que se compone de otros elementos (las partes). Este tipo de relacin se denomina agregacin, la cual representa una relacin del tipo tieneun, o sea, un objeto del todo tiene objetos de la parte. El rombo vaco distingue el todo de la parte. Esto significa que la agregacin simple no cambia el significado de la navegacin a travs de la asociacin entre el todo y sus partes, ni liga la existencia del todo y sus partes.

- 174 -

Las partes con multiplicidad no fija, se pueden crear despus del elemento compuesto. Pero una vez creadas, viven y mueren con l. Notar que una parte siempre se asocia a un todo. NO PUDE PASAR que una parte (una instancia de Parte) se asocie a ms de un todo (una instancia de Todo). Las palabras que mejor definen a este tipo de asociacin son: -exclusividad -dependencia

- 175 -

Las composiciones a Punto indican que cualquier instancia de Punto puede estar en un Polgono o en un Crculo, pero no en ambos. Sin embargo, una instancia de Estilo puede ser compartida por muchos Polgonos y Crculos. Es ms, esto implica que el borrado de un Polgono provocara el borrado de sus Puntos asociados, pero no del Estilo asociado. Esta restriccin (un Punto puede solamente aparecer en un solo Polgono o Crculo a la vez) no se puede expresar mediante las multiplicidades, nicamente. Sugerencia: comparar las diferencias entre composicin y agregacin en el ejemplo 1. sta puede estar claramente determinada por el contexto o dominio del problema a representar

- 176 -

Contexto: Nombre: Una asociacin puede tener un nombre, que se utiliza para describir la naturaleza de la relacin. Para que no haya ambigedad en su significado, se puede dar una direccin al nombre por medio de una flecha que apunte en la direccin en la que se pretende que se lea el nombre. Nota: aunque una asociacin puede tener un nombre, normalmente no se necesita incluirlo si se proporcionan explcitamente nombres de rol para la asociacin, excepto si se tiene un modelo con muchas asociaciones y es necesario referirse a una o distinguir unas de otras. Esto es esencialmente cierto cuando se tiene ms de una asociacin entre las mismas clases.

- 177 -

Muchas veces se omite escribir la multiplicidad en un extremo de la asociacin. En dicho caso se asume que la misma corresponde a 1. El modelador puede escribir explcitamente el nombre que juega una clase dentro de una asociacin. Pero si no lo hace, igualmente cada una de las clases juega un rol en la asociacin. Ese rol es el nombre de la clase en letras minsculas.

- 178 -

La generalizacin representa a la relacin es-un: un elemento concreto es-un elemento ms general. La generalizacin especifica que los objetos hijos se pueden emplear en cualquier lugar que pueda aparecer el padre, pero no a la inversa. Una clase hija hereda las propiedades de sus clases padres (atributos, asociaciones y operaciones). A menudo, no siempre, el hijo aade atributos y operaciones a los que hereda de sus padres. Una operacin de un hijo con la misma signatura que una operacin del padre redefine la operacin del padre. Nota: Una generalizacin puede tener un nombre, aunque es raro que se necesiten los nombres, a menos que se tenga un modelo con muchas generalizaciones y haya que referirse a ellas o distinguirlas. En UML, una clase puede tener ninguno, uno o ms padres. Una clase sin padres y uno o ms hijos se denomina clase raz o clase base. Una clase sin hijos se llama clase hoja. Una clase con un nico padre se dice que utiliza herencia simple; una clase con ms de un padre se dice que utiliza herencia mltiple.

- 179 -

Una generalizacin simple, sin adornos, es suficiente para la mayora de las relaciones de herencia que aparecen en el modelado. Pero si se quieren especificar ciertos matices, UML aporta cuatro restricciones que pueden aplicarse a las generalizaciones. Descripcin de las restricciones: complete: especifica que todos los hijos en la generalizacin se han especificado en el modelo (aunque puede que algunos se omitan en el diagrama) y no se permiten hijos adicionales. incomplete: especifica que no se han especificado todos los hijos en la generalizacin (incluso aunque se omitan algunos) y que se permiten hijos adicionales. Es la opcin por defecto. disjoint: especifica que los objetos del padre no pueden tener ms de uno de los hijos como tipo. overlapping: especifica que los objetos del padre pueden tener ms de uno de los hijos como tipo. Nota: disjoint y overlapping se aplican en el contexto de herencia mltiple.

- 180 -

Las notas permiten agregar comentarios que se pueden utilizar para describir, clarificar y hacer observaciones sobre cualquier elemento de un modelo. Se marca por medio de lnea punteada al elemento al cual estn ligados y por lo tanto, comentan. El comentario puede hacerse en lenguaje coloquial o en un lenguaje formal como lo es OCL. Grficamente, una nota se representa como un rectngulo con una esquina doblada, junto con un comentario (no puede estar sin texto).

- 181 -

- 182 -

- 183 -

- 184 -

- 185 -

Descripcin: Dada una instancia de Clase_A, indicar si la misma conoce instancias de Clase_C

- 186 -

Nota: UML permite notar las relaciones como atributos o como relaciones de conocimiento. En la prctica se utiliza notar al estado de los objetos como atributos y al conocimiento con otros objetos, como relaciones de asociacin o al menos tomar una misma postura de notacin.

- 187 -

Inciso c: La cardinalidad de la composicin debe ser 1

- 188 -

Inciso d: es como el ejemplo del punto, el crculo y el polgono.

- 189 -

Nota: las clases hijas pueden ocupar el lugar del padre.

- 190 -

- 191 -

- 192 -

- 193 -

- 194 -

- 195 -

Descripcin: Se presenta un ejemplo general de un Diagrama de Clases, modelando parte del dominio de representaciones artsticas y reserva de entradas. Notar que la composicin indica la carencia de sentido de tener representaciones sin entradas para el ingreso del pblico.

- 196 -

Bibliografa

- 197 -

Вам также может понравиться