introduccion a la programacion 2005

94
Introducción a la Programación Preparado para rendir la estrella inicial del examen DCE por José María Selesan

Upload: spikko11

Post on 04-Sep-2015

234 views

Category:

Documents


6 download

DESCRIPTION

a

TRANSCRIPT

  • Introduccin a laProgramacin

    Preparado para rendir la estrellainicial del examen DCE

    por Jos Mara Selesan

    00_IntrodProg.qxd 23/7/07 20:01 Page 1

  • TTULO > Introduccin a la Programacin

    AUTOR > Jos Mara Salesan

    FORMATO > 13,5 x 19 cm

    PGINAS > 96

    Copyright GRADI S.A. 2007.

    Hecho el depsito que marca la ley. Reservados todos los derechos de autor.

    Prohibida la reproduccin total o parcial de esta publicacin por cualquier medio

    o procedimiento y con cualquier destino.

    Primera impresin realizada en agosto de 2007.

    Kollor Press, Capital.

    Todas las marcas mencionadas en este libro

    son propiedad exclusiva de sus respectivos dueos.

    Selesan, Jos MaraIntroduccin a la programacin. - 1a ed. - Banfield - Lomas de Zamora : Gradi S.A., 2007.v. 11, 96 p. ; 19x14 cm. (Pocket users)

    ISBN 978-987-1347-45-2

    1. Informtica. I. TtuloCDD 005.3

    00_IntrodProg.qxd 23/7/07 20:01 Page 2

  • 3El objetivo del libro es brindar al lec-tor un panorama general sobre el desa-rrollo de software para computadorasy servir como punto de partida, tantopara rendir el examen cero del progra-ma Desarrollador Cinco Estrellas deMicrosoft, como para adentrarse en es-ta fascinante profesin. A lo largo delos cinco captulos que lo integran, nosintroduciremos en algunos de los prin-cipales temas que todo programadordebe conocer.

    El primer captulo trata sobre los fun-damentos del software y los algoritmos.Si bien pueden parecer un tanto trivia-les, son de fundamental importancia,porque un programador debe estar pre-parado y capacitado para pensar cual-quier solucin a un problema en formade algoritmo. Estudiaremos, tambin,distintas maneras de expresar algorit-mos, necesarias como herramientas decomunicacin y documentacin.

    En los captulos dos y tres, abordare-mos temas relacionados con la progra-macin estructurada. A lo largo deellos, aprenderemos muchos concep-tos, la mayora de los cuales se utilizana diario, porque forman la base decualquier programa. Aprenderemos los

    conceptos de variable, estructuras decontrol, buenas prcticas de codifica-cin, y ms. Es importante que el lec-tor medite en profundidad cada unode estos temas, realice prcticas y con-sulte ms material para asimilar co-rrectamente cada uno de ellos y esta-blecer una base de conocimiento sli-da que le permita enfrentar cualquiertipo de desarrollo.

    Luego, el captulo cuatro presenta unaintroduccin a la Programacin Orien-tacin a Objetos (POO). Este paradig-ma, si bien no es nuevo, presenta unavance importante en la manera de de-sarrollar software, y recin en los lti-mos aos se lo est considerando comoel paradigma por defecto para todonuevo desarrollo. Si bien este captulono ahonda en detalles, tiene como ob-jetivo familiarizar al lector con cadauno de los conceptos clave de la POO.

    Finalmente, el captulo cinco intro-duce algunos de los conceptos del Len-guaje Unificado de Modelado (UML).UML se basa fuertemente en los con-ceptos de POO, como clases y heren-cia, por lo que ser necesario compren-der los temas del captulo cuatro paraaprovechar al mximo ste.

    Introduccin

    00_IntrodProg.qxd 23/7/07 20:01 Page 3

  • Captulo 1

    FUNDAMENTOSQu es el software? 8

    Un poco de historia 9

    Los lenguajes de programacin 11

    Los lenguajes en la actualidad 13

    Compilacin e interpretacin 14

    Algoritmos 15

    Expresin de algoritmos 15

    Conclusiones 18

    Captulo 2

    PROGRAMACIN ESTRUCTURADAMejorar el cdigo 20

    Hacia la programacin estructurada

    Conceptos de programacin

    estructurada 22

    Identificadores y palabras clave

    Variables

    Tipos de datos

    Sentencias

    Operadores y expresiones

    Tipos de operadores

    Estructuras de control

    Conclusiones 34

    Captulo 3

    ELEMENTOS DE PROGRAMACINModularizacin 36

    Procedimientos y funciones

    Libreras 44

    Arreglos y matrices 45

    Arreglos

    Matrices

    El estilo de programacin 50

    Tabulaciones

    Comentarios

    Conclusiones 54

    Captulo 4

    PROGRAMACION ORIENTADAA OBJETOSLos objetos 56

    Origen

    Ventajas de la POO

    CONTENIDO

    4

    00_IntrodProg.qxd 23/7/07 20:01 Page 4

  • 5Clases y objetos 58

    Propiedades y mtodos

    Pensar en objetos 60

    Patrones de diseo

    Relaciones entre clases 63

    Relacin de uso

    Relacin de agregacin

    Herencia 66

    Redefinir comportamiento

    Extender clases

    Tipos de herencia

    Clases abstractas

    Interfaces

    Polimorfismo 72

    Conclusiones 74

    Captulo 5

    UMLQu es UML? 76

    Diagrama de clases 77

    Clases

    Relaciones entre clases

    Diagrama de secuencia 83

    Elementos del diagrama

    de secuencia

    Diagramas de casos de uso 85

    Conclusiones 86

    Apndice

    EL EXAMENAlgoritmos 88

    Lenguajes de programacin 88

    Programacin estructurada 89

    Programacin orientada

    a objetos 91

    Desarrollador 5 Estrellas 92

    00_IntrodProg.qxd 23/7/07 20:01 Page 5

  • 6Cuando un msico escucha una me-loda que acaba de componer o cuan-do un escultor retoca el ltimo detallede su obra maestra, est ante un logropersonal, pero que fue hecho pensan-do en los dems. Est ante el fruto desu trabajo, que tuvo que realizar parapasar de una idea o modelo que estabaslo en su imaginacin, a algo percep-tible por los otros. Y ese logro causauna gran satisfaccin.

    El desarrollo de software al igualque la msica, la escultura o la pintu-ra es una actividad creativa y, hasta sise quiere, artstica. Es una actividad enla que una persona (el programador)debe plasmar una idea en un programaque alguien usar luego. Y es muy pro-bable que esa idea sea algo totalmentenovedoso, algo que nadie antes ha vis-to. Y ver esa idea traducida en softwa-re produce una sensacin que slo unprogramador puede entender.

    Ser programador no es fcil, pero esdivertido. Desarrollar software es, defi-nitivamente, una tarea compleja. De-beremos ser capaces de interpretar alusuario, de entender qu es lo que ne-cesita (aunque muchas veces l mismono sabe qu es lo que necesita). Pasare-mos largas horas pensando un algorit-mo que resuelva el problema de nues-

    tro cliente de la mejor manera. Mu-chas veces nos iremos a casa y seguire-mos pensando en ese dichoso algorit-mo. Nos iremos a dormir (probable-mente tarde, porque habremos dedica-do parte de nuestro tiempo libre aaprender nuevas tecnologas) y desper-taremos pensando en el algoritmo o,incluso, con la solucin en mente. Pe-ro cuando escribamos la ltima lneadel cdigo que implementa ese algorit-mo y lo veamos funcionando, obten-dremos una gran satisfaccin. Una sa-tisfaccin que slo puede entenderotro programador.

    Cuando escrib mi primera lnea decdigo, debo haber tenido unos 11aos. Ese da, al ver que una secuenciade caracteres casi ilegible dibujaba uncrculo en la pantalla del televisor (lapoca de las PCs recin comenzaba),me di cuenta de que eso era lo que que-ra hacer el resto de mi vida. Creo quecada persona que quiere dedicarse aldesarrollo de software, antes de nada,debe experimentar qu sensacin leproduce ver su programa en ejecucin.Aquel que no sienta nada jams podrser un programador, porque la mayorrecompensa es, justamente, esa sensa-cin, aunque sean las 4 de la madruga-da y llevemos 20 horas codificando.

    Prlogo

    00_IntrodProg.qxd 23/7/07 20:01 Page 6

  • CAPTULO 1

    Fundamentos

    En este primer captulo, veremos los fundamentos

    bsicos del software, su funcionamiento, su uso

    y su creacin. A su vez introduciremos los principales

    conceptos sobre la programacin moderna.

    ATENCIN AL LECTOR > [email protected]

    01_IntrodProg.qxd 23/7/07 20:04 Page 7

  • 8FUNDAMENTOS

    QU ES EL SOFTWARE?> Desde siempre, las computadoras han sido mquinas con la nica capacidadde llevar a cabo instrucciones, como imprimir un texto en un dispositivo de sa-lida o sumar dos nmeros. Un programa es un conjunto de instrucciones y da-tos que juntos y, de manera sistemtica, permiten resolver problemas. Podemosentonces definir el software como el conjunto de programas que funcionan enuna computadora y que permiten realizar una o varias tareas especficas.

    Es importante resaltar que, al hablar de computadoras, no nos referimos slo alas personales (PC), sino a cualquier dispositivo capaz de leer instrucciones deuna memoria, y ejecutarlas. Por lo tanto, podemos encontrar software en un la-varropas, en un respirador artificial y hasta en automviles modernos.

    Segn su uso, el software se puede clasificar en dos grandes grupos: el softwarede sistema y el software de aplicacin. El software de sistema es el conjunto deprogramas bsicos para el funcionamiento de la computadora, como por ejem-plo el sistema operativo (Windows o Linux), los drivers, etctera., mientras queel software de aplicacin son los programas para realizar tareas especficas, co-mo un procesador de texto, un juego o un compilador.

    Los trminos software y sistema se utilizan para referirse a lo mismo. Sin embar-go, la palabra sistema por s sola no tiene nada que ver con el software. Un sis-tema es un conjunto de elementos que interactan de alguna manera, como pue-de ser el sistema digestivo o el sistema solar. Otro ejemplo de sistema, son los sis-temas de informacin, sin que esto tampoco implique un software. Por ejemplo,un sistema contable es un conjunto de mtodos y de herramientas que permitenmantener la informacin sobre los movimientos econmicos y los bienes de unaempresa, pero se pueden utilizar libros en papel para alcanzar el objetivo. Final-mente, un sistema de informacin basado en computadora es la implementacin

    EL HARDWARE

    El otro componente importante de unacomputadora es el hardware, que incluyetodos los elementos fsicos o materialesque la conforman. La diferencia entre el

    hardware y el software es que este lti-mo es intangible (lo vemos, pero no po-demos tocarlo), mientras que el hardwa-re es totalmente palpable.

    01_IntrodProg.qxd 23/7/07 20:04 Page 8

  • 9QU ES EL SOFTWARE?

    con herramientas computacionales (programas y datos) de un sistema de infor-macin. Por lo tanto, como sinnimo de software podemos utilizar sistema deinformacin basado en computadora. Por otro lado, los trminos programa ysistema suelen utilizarse indistintamente, pero no est bien. Generalmente, pode-mos decir que un sistema es un grupo de programas que interactan para reali-zar ciertas tareas. Un programa es una unidad mucho ms pequea, indepen-diente y sencilla que un sistema.

    UN POCO DE HISTORIAMuchos autores coinciden en afirmar que la idea de programa como secuencia

    de instrucciones se remonta a principios del siglo XIX y no tiene nada que ver conla computacin. Efectivamente, en 1801 un francs llamado Joseph Marie Jac-quard ide un mecanismo de tarjetas perforadas para controlar los dibujos queformaban los hilos en una mquina para tejer. De esa manera, lograba programarlas puntadas de la mquina para obtener tramas y figuras repetibles.

    En 1843, Ada Augusta Lovelace, hija del poeta ingls Lord Byron, plante la ideade usar tarjetas perforadas para controlar la Mquina Diferencial de Babbage (ver re-cuadro) y lograr que repita ciertas operaciones. Unos aos ms tarde, su idea fue to-mada para desarrollar un sistema de cmputo para la oficina de censos de los Esta-dos Unidos. Las tarjetas estaban diseadas de tal modo que los agujeros representa-ban la edad, raza, sexo, etctera. Este desarrollo permiti que el tiempo en obtenerlos resultados del censo de 1890 fuera de 5 aos menos que el censo anterior.

    La idea de lady Ada tuvo tal repercusin que, al da de hoy, se la considera co-mo la primera programadora, y las tarjetas perforadas fueron utilizadas en cen-tros de cmputos hasta no hace mucho tiempo.

    LA MQUINA DIFERENCIAL

    En el ao 1812, Charles Babbage,preocupado por los errores de clcu-lo en las tablas matemticas, pensque sera til poder calcularlos deforma automtica. Ide, entonces,una mquina capaz de obtener apro-ximaciones al resultado de una fun-

    cin matemtica, mediante un mto-do llamado de las diferencias. Si bienpor limitaciones propias de la pocanunca lleg a terminar su construc-cin, su denominada Mquina dife-rencial sent las bases de la compu-tacin moderna.

    01_IntrodProg.qxd 23/7/07 20:04 Page 9

  • 10

    FUNDAMENTOS

    Ya en el siglo XX, el fsico estadounidense John Atanasoff, conocedor de las teo-ras de Babbage y consternado por la cantidad de clculos que deba realizar, pen-s en construir una mquina de clculo que, a diferencia de las mecnicas, seradigital, y su funcionamiento se basara en el sistema binario. Su aparato fue co-nocido como ABC Atanasoff-Berry-Computer, y por eso es considerado el ini-ciador de la computacin digital.

    Luego, durante la Segunda Guerra Mundial, se construy y comenz a funcio-nar en instalaciones militares de los Estados Unidos una mquina llamadaENIAC (Electronic Numeric integrator and Computer). Su funcionamiento se ba-saba en tubos de vaco, interruptores y rels para hacer operaciones matemticasutilizando el sistema binario. Por su tamao, ocupaba una habitacin entera.

    Figura 1. La ENIAC fue una de las primeras computadoras del siglo XX. Su poder de clculo era menor al de una calculadora de bolsillo actual.

    A partir de la ENIAC, las computadoras fueron evolucionando ao tras ao, a unritmo cada vez ms vertiginoso hasta llegar a las computadoras que conocemos enla actualidad. Sin embargo, a pesar de esta evolucin, las computadoras mantienendos caractersticas esenciales: estn basadas en el sistema binario y necesitan que seles provea de una secuencia ordenada de instrucciones para poder funcionar.

    LA MQUINA DE TURING

    Creada por Alan Turing, consista enuna cinta y un cabezal que poda leer yescribir caracteres en dicha cinta, co-mo tambin moverse hacia la izquierday hacia la derecha. La cinta podra ver-se como el conjunto de entradas y sali-das de un programa. Turing demostr

    que su mquina podra resolver cual-quier problema representable por unalgoritmo y que, si no era capaz de re-solverlo, entonces resultaba, insolubleen una computadora. Su trabajo seconvirti en el tema central de estudiode la Teora de la Computacin.

    01_IntrodProg.qxd 23/7/07 20:04 Page 10

  • 11

    LOS LENGUAJES DE PROGRAMACIN

    LOS LENGUAJES DE PROGRAMACIN> Ahora que sabemos qu es un programa, podemos decir que la programacines el proceso de construir programas. Para escribir programas, necesitamos cono-cer la lista de las posibles instrucciones que debemos proporcionar a la computa-dora, y cmo combinarlas para lograr los resultados deseados.

    De acuerdo con el primer prrafo, para confeccionar programas, debemos es-cribir una secuencia de instrucciones que puedan ser entendidas por la compu-tadora, pero como vimos anteriormente, hasta las computadoras ms moder-nas trabajan con el sistema binario, por lo que, para programarlas, deberamosproporcionarles secuencias de unos y ceros formando las instrucciones denuestro programa. Si bien el sistema binario es muy simple, para un ser hu-mano, resultara imposible recordar las combinaciones de unos y de ceros queforman cada una de las instrucciones. Para solucionar este problema, existenlos lenguajes de programacin, una forma ms sencilla y legible de represen-tar las instrucciones.

    Sin entrar en detalles formales, podemos decir que un lenguaje de programa-cin es un conjunto de reglas que determinan, de forma clara, precisa y sin am-bigedades, la forma en que se le imparten las instrucciones a una computadorapara construir un programa. Estas reglas se dividen en reglas sintcticas y reglassemnticas. Las reglas sintcticas especifican cules son los caracteres vlidos dellenguaje y cmo se pueden agrupar en palabras tambin vlidas. Las reglas se-mnticas determinan cul es el significado de las palabras, es decir, qu se espe-ra que la computadora haga cuando recibe una palabra o una instruccin.

    ARQUITECTURAS CISC Y ARQUITECTURAS RISC

    El conjunto de instrucciones que pue-de entender una computadora de-pende de su arquitectura (por ejem-plo, un procesador Intel tiene un con-junto de instrucciones diferente delde un procesador Motorola). La canti-dad de instrucciones permiten clasi-

    ficar a los procesadores en dos gran-des grupos: CISC (Complex Instruc-tion Set Computer, computadora conconjunto de instrucciones complejo) yRISC (Reduced Instruction Set Com-puter, computadora con conjunto deinstrucciones reducido).

    01_IntrodProg.qxd 23/7/07 20:04 Page 11

  • 12

    FUNDAMENTOS

    Los lenguajes de programacin fueron creados para facilitar la escritura de pro-gramas, proveyendo una abstraccin de las instrucciones reales de la computado-ra (formadas por unos y ceros) y reemplazndolas por palabras que fueran ms f-ciles de recordar por las personas. Segn el nivel de abstraccin que proveen, loslenguajes de programacin se clasifican en tres niveles (Tabla 1). Cuanto ms altosea el nivel, ms cercanas al lenguaje humano sern sus instrucciones y, general-mente, ms poderosas, ya que cada instruccin del lenguaje puede representaroperaciones complejas formadas por muchas instrucciones de la mquina.

    NIVEL DEL LENGUAJE CARACTERSTICAS Bajo Las instrucciones del lenguaje estn muy relacionadas con las instrucciones

    de la computadora, por lo tanto, el programador debe tener un buenconocimiento del funcionamiento del equipo. Al programar directamente(o casi) con instrucciones de la mquina, se obtienen resultados eficientesy se puede lograr cualquier cosa que haga la computadora, aunque con un esfuerzo ms grande que con otros niveles de abstraccin.Como lenguaje de bajo nivel, podemos mencionar el Assembler.

    Medio Si bien algunos autores ignoran este nivel, existe un grupo de lenguajes con una abstraccin un poco ms alta que los de bajo nivel, pero an bastante cercana al hardware. Su sintaxis es ms sencilla que la de los lenguajes de bajo nivel, pero permiten escribir programascercanos al lenguaje de la computadora.Un ejemplo tpico de lenguaje de nivel medio es el lenguaje C.

    Alto Este lenguaje est formado por palabras comunes en algn idioma (como por ejemplo el ingls), por lo que resultan fciles de recordar y de interpretar. Generalmente, son lenguajes ms poderosos en cuanto a expresividad que los de bajo nivel, pero puede ocurrir tambin que resulte difcil implementar programas que tengan que hacer un uso muy especfico del hardware.Como ejemplo de lenguajes de alto nivel, podemos mencionar a C# o Java.

    Tabla 1. Clasificacin de los lenguajes segn su nivel de abstraccin.

    TIPOS DE LENGUAJES

    Es muy importante tener en cuenta que, aunque los lenguajes de ms alto ni-vel puedan parecerse al lenguaje natural de los seres humanos, debern ser ms

    01_IntrodProg.qxd 23/7/07 20:04 Page 12

  • 13

    LOS LENGUAJES DE PROGRAMACIN

    estrictos y limitados, ya que es necesario que permitan definir las instruccionesde una forma entendible y sin ningn tipo de ambigedad.

    LOS LENGUAJES EN LA ACTUALIDADA lo largo del tiempo, los lenguajes han evolucionado y se adaptaron a las

    necesidades y a las posibilidades computacionales de cada momento. Por eso,actualmente disponemos de una gran cantidad de lenguajes de programacinentre los cuales elegir a la hora de comenzar un desarrollo o de aprender unanueva tecnologa.

    Para tomar una buena decisin y elegir el lenguaje que ms nos conviene, esimportante conocer sus caractersticas, sus capacidades y debilidades. Adems,un aspecto fundamental para tener en cuenta es el paradigma o enfoque del len-guaje, es decir, de qu forma hay que pensar y escribir el programa para resol-ver un problema. Los paradigmas ms conocidos son el imperativo, el declara-tivo y el orientado a objetos. Mediante el paradigma imperativo, debemos in-dicar explcitamente los pasos por seguir para resolver el problema, es decir, de-bemos indicar el cmo. Por otro lado, el paradigma declarativo permite escri-bir el programa describiendo las caractersticas del problema, es decir, especifi-cando el qu. Por ltimo, el paradigma orientado a objetos permite modelary escribir los programas a partir de la abstraccin de los objetos reales que for-man parte del dominio del problema. Actualmente, el paradigma declarativo esusado en el ambiente acadmico y con fines de investigacin, mientras que, enambientes productivos y de negocios, se utilizan los lenguajes imperativos y, enmayor medida, los orientados a objetos.

    QU ES EL ANLISIS LXICO?

    La compilacin de un programa esuna tarea bastante compleja, que in-volucra una serie de pasos conducen-tes a la generacin del cdigo de m-quina. El primer paso se denominaanlisis lxico. Consiste en leer eltexto del programa (normalmente al-macenado en uno o en varios archi-

    vos) y aplicar ciertas reglas para iden-tificar las palabras clave y las expre-siones vlidas del lenguaje de progra-macin. Durante el anlisis lxico, yapueden identificarse algunos erroresbsicos, frecuentes en la mayora delos programas, como por ejemplo, losidentificadores mal formados.

    01_IntrodProg.qxd 23/7/07 20:04 Page 13

  • 14

    FUNDAMENTOS

    COMPILACIN E INTERPRETACIN> Cuando escribimos un programa en algn lenguaje, nuestro propsito final siem-pre ser ejecutarlo en una computadora para realizar una tarea especfica. Ahorabien, al utilizar un lenguaje de programacin estamos escribiendo instrucciones queno son exactamente las que la computadora entiende. Para que nuestro programapueda ser ejecutado, ser necesario traducir las instrucciones que hemos escrito enforma ms sencilla para que la computadora pueda entenderlas. Esta traduccin re-sulta siempre necesaria para poder ejecutar un programa escrito en cualquier lengua-je. El tipo de traduccin que se haga, permitir clasificar los lenguajes en lenguajescompilados y lenguajes interpretados.

    En los lenguajes compilados, la traduccin se realiza por nica vez, almacenandolas instrucciones ya traducidas a lenguaje mquina en un archivo. De este modo, almomento de ejecutar el programa, la computadora lee una a una las instruccionesdel archivo generado durante el proceso de compilacin, y las ejecuta. Para realizarla traduccin o compilacin, se utiliza un programa llamado compilador, que seencarga de tomar cada una de las instrucciones escritas en un lenguaje de progra-macin y traducirlas a una o ms instrucciones del lenguaje de la mquina. Duran-te la compilacin, el compilador adems valida que las instrucciones que hemos es-crito sean correctas y que se respeten todas las reglas del lenguaje.

    Por otro lado, con los lenguajes interpretados, no existe un paso previo de com-pilacin, sino que la traduccin se realiza mientras se ejecuta el programa. Para ello,se utiliza un software denominado intrprete, que a medida que el programa se eje-cuta, lee cada una de las instrucciones y las traduce a instrucciones de la mquina,para que sean ejecutadas. Al igual que los compiladores, los intrpretes deben vali-dar que las instrucciones estn bien escritas para poder traducirlas sin problemas.

    Generalmente, usando lenguajes compilados, se logra mayor rendimiento, ya queel proceso de validacin y de traduccin se realiza una sola vez (al momento de lacompilacin). Luego, una vez que el programa est compilado, cada ejecucin se ha-ce sobre una secuencia de instrucciones de la computadora. Al usar lenguajes inter-pretados, la validacin y traduccin se realiza cada vez que se ejecuta el programa.Es ms, si una misma instruccin se repite varias veces, el intrprete la validar y tra-ducir cada vez. Sin embargo, los lenguajes interpretados proveen cierto grado deflexibilidad a la hora de realizar cambios en nuestro programa ya que, modificandocualquier instruccin, estar lista para que el intrprete la tome y la traduzca.

    01_IntrodProg.qxd 23/7/07 20:04 Page 14

  • 15

    ALGORITMOS

    LIBROS TILES

    Hay una gran cantidad de libros paraintroducirse en el mundo de la progra-macin de software y de los algorit-mos. Recomendamos, Metodologa dela Programacin. Algoritmos, diagra-

    mas de flujo y programas, de OsvaldoCairo (ISBN 9701509404). En el cual,se proponen distintas tcnicas de an-lisis para enfrentar la solucin de unproblema y llevarla a un algoritmo.

    ALGORITMOS> Segn el diccionario, un algoritmo es un conjunto ordenado de operacionessistemticas que permite hacer un clculo y hallar la solucin de un tipo de pro-blemas. Por ejemplo, cualquiera de los mtodos que aprendimos en la escuela pa-ra multiplicar dos nmeros reales es un algoritmo. El mtodo o la receta para pre-parar una comida no es un algoritmo, ya que el orden de algunos pasos, muchasveces, no importa o ni siquiera est claramente especificado (por ejemplo, pode-mos batir las claras a nieve antes o despus de mezclar la harina con l azcar, yan as vamos a poder hacer una torta).

    Ahora que conocemos los algoritmos, podemos redefinir el trmino programa co-mo implementacin de un algoritmo determinado en un lenguaje de progra-macin. El conocimiento del concepto de algoritmo es fundamental para todo pro-gramador ya que, en la tarea diaria de escribir programas para resolver problemas,antes debemos descubrir y entender cul es el algoritmo que los resuelve. Muchasveces, como programadores, nos encontraremos siguiendo los pasos de un algorit-mo con lpiz y papel para entender su funcionamiento o probar su eficacia.

    EXPRESIN DE ALGORITMOSComo los algoritmos no estn relacionados nicamente con la programacin de

    computadoras, es necesario contar con mtodos independientes para expresarlosy, por lo tanto, transmitirlos a otras personas. En la actualidad, existen varias for-mas de expresar un algoritmo, como ser, el lenguaje natural, el pseudocdigo, losdiagramas de flujo, algunos diagramas del lenguaje de modelado UML (que ve-remos en el ltimo captulo), etctera.

    En el caso del lenguaje natural, el algoritmo es expresado por medio de ora-ciones en un idioma determinado. A modo de ejemplo, se puede indicar el al-

    01_IntrodProg.qxd 23/7/07 20:04 Page 15

  • 16

    FUNDAMENTOS

    goritmo, en lenguje natural, para ver una pelcula en DVD de la siguiente ma-nera: presione la tecla Open/Close para abrir la bandeja del reproductor; luego,inserte el disco y presione la tecla nuevamente. En su televisor, seleccione la opcinDVD y por ltimo presione la tecla Play.

    PseudocdigoUno de los problemas del lenguaje natural es que suele resultar excesivamente

    verborrgico, ya que debe respetar en cierta medida las reglas gramaticales dellenguaje. Para evitar este problema, se puede utilizar un pseudocdigo, que con-siste en una serie de normas sintcticas y gramaticales, parecidas a las de un len-guaje de programacin, pero sin tanta rigidez, y con cierta libertad en el uso y enla combinacin de las palabras.

    Por ejemplo, supongamos que debemos escribir el algoritmo de Euclides paraencontrar el mximo comn divisor entre dos nmeros enteros. Usando pseudo-cdigo, podemos consignar:

    Entrada: A, B enteros

    Salida: el mximo divisor comn entre A y B

    Mientras A > 0 hacer:

    Si A > B

    CARACTERSTICAS DE LOS ALGORITMOS

    El estadounidense Donald Knuth, au-tor del libro El arte de programarcomputadoras, seal cinco propieda-des que deber tener todo algoritmo:Finito: un algoritmo debe tener unnmero finito de pasos, tras los cua-les debe terminar.Preciso: cada paso debe estar defini-do con precisin, rigurosidad y sinambigedades.Entradas: todo algoritmo debe tener

    cero o ms entradas, que son los da-tos que se le proporcionan como in-formacin variable y especfica de lainstancia del problema que resuelve.Salida: un algoritmo tiene una o mssalidas, que son el resultado del pro-blema que intenta resolver, y que de-penden de las entradas provistas.Eficacia: los pasos deben ser suficientespara lograr el cometido del algoritmo, esdecir, el algoritmo debe ser eficaz.

    01_IntrodProg.qxd 23/7/07 20:04 Page 16

  • 17

    ALGORITMOS

    A := A B

    Si no

    B := B A

    El Mximo Comn Divisor es el contenido de A

    Esto significa que la entrada al programa consiste de nmeros enteros (A y B)y, mientras el valor de A sea mayor que cero, se le asigna a A la resta entre A y B,si A es mayor que B; si no, a B se la asigna la diferencia entre B y A. El resulta-do es el valor que queda en A luego de las sucesivas restas.

    Como puede verse en el ejemplo, se especifican claramente cules son los datosde entrada y de salida. Adems se utilizan algunos smbolos ya conocidos (comoel signo mayor a) y otros propios del pseudocdigo (como el signo := para repre-sentar que el elemento de la izquierda toma como valor el resultado de la opera-cin de la derecha).

    Diagrama de flujoLos diagramas de flujo son una representacin grfica de los pasos de un algo-

    ritmo. En un diagrama de flujo, cada tipo de figura tiene su significado. Su nom-bre se debe a que las figuras se conectan con flechas que indican la secuencia oflujo de operacin.

    Si bien muchas personas utilizan sus propios smbolos y figuras al momento decrear sus diagramas de flujo, actualmente est definido de manera clara y estn-dar cules son las figuras vlidas y cul es su significado, de manera que cualquie-ra que las conozca pueda interpretar el diagrama.

    Los smbolos ms utilizados son: Flecha: indica el sentido del proceso, es decir, hacia dnde hay que dirigirse pa-

    ra encontrar el siguiente paso.

    PARA TENER EN CUENTA

    Al hacer un diagrama de flujo, hay quetener muy presente estos aspectos: Debe haber un nico punto de inicio

    del proceso.

    Debe haber siempre un camino pa-ra llegar a la solucin.

    Debe haber un nico punto de findel proceso.

    01_IntrodProg.qxd 23/7/07 20:04 Page 17

  • Rectngulo: se usa para representar un paso determinado del algoritmo. Rombo: representa un punto de decisin sobre la base de una condicin. De

    un rombo salen siempre dos flechas: una en un sentido, si se cumple la condi-cin y otra en otro sentido, si la condicin no se cumple.

    Para ilustrar el concepto, vamos a especificar el algoritmo de Euclides que usa-mos anteriormente, mediante un diagrama de flujo.

    18

    FUNDAMENTOS

    CONCLUSIONES

    Para introducirse en el mundo de la programacin y el desarrollo de aplica-ciones de software, es muy importante comenzar con una buena base de co-nocimiento de algoritmos y tcnicas de resolucin de problemas de distintotipo, sin usar un lenguaje especfico (podemos usar pseudocdigo). Una vezque dominemos ciertas tcnicas de resolucin de problemas y podamos ex-presar las soluciones como algoritmos, estaremos preparados para apren-der lenguajes de programacin que nos permitan llevar esos algoritmos auna computadora que los ejecute por nosotros.

    Devolver A B < B - AA < A - B

    A > B

    A > 0S No

    S No

    Figura 2. Diagrama de flujo del algoritmo de Euclides

    01_IntrodProg.qxd 23/7/07 20:04 Page 18

  • CAPTULO 2

    Programacinestructurada

    En este captulo, nos adentraremos en los principios

    fundamentales de la programacin y, al mismo

    tiempo, iremos aprendiendo sintaxis de los

    dos principales lenguajes de la plataforma .Net.

    ATENCIN AL LECTOR > [email protected]

    02_IntrodProg.qxd 23/7/07 20:05 Page 19

  • 20

    PROGRAMACION ESTRUCTURADA

    MEJORAR EL CDIGO> En el Captulo 1, vimos que un programa es la implementacin de un algoritmodeterminado, es decir, una secuencia de pasos o instrucciones, mediante un lengua-je de programacin. Cuando escribimos un programa, es normal que necesitemosalterar la secuencia de instrucciones siguiendo determinadas pautas. Si recordamosel algoritmo que analizamos en el captulo anterior, podemos ver que en cada vuelta,la instruccin por ejecutar depende de si A es mayor que B, o B es mayor que A.

    En los primeros lenguajes de programacin (como el BASIC original), la ni-ca forma que exista de variar las instrucciones por ejecutar segn una condicinera mediante un salto a otra parte del programa (generalmente, a otra posicinde memoria u otro nmero de lnea). Es decir, debamos evaluar la condicin y,dependiendo de si sta era verdadera o falsa podamos seguir en la lnea de aba-jo o hacer que la prxima instruccin por ejecutar fuera diferente, ubicada enotra parte del programa.

    Por ejemplo, para resolver el algoritmo de Euclides usando saltos, deberamosescribir algo as (con pseudocdigo):

    1: Si A 0 Ir a lnea 5

    3: B := B A

    4: Ir a lnea 1

    5: A := A B

    6: Ir a lnea 1

    7: Devolver A

    Esta implementacin tiene dos grandes problemas. El primero es que su es-critura se vuelve un poco dificultosa, porque hay que conocer los nmeros delnea. Por ejemplo, al escribir la lnea 1, ya hay que saber que vamos a saltar ala lnea 7. Si bien esto podra solucionarse usando nmeros de lnea que va-yan, por ejemplo, de 10 en 10 y hacer los saltos a nmeros ms bien lejanos,a medida que necesitemos modificar el algoritmo y escribir ms lneas de c-digo (incluso entre dos lneas ya existentes), los nmeros disponibles se iranacercando ms y ms, y podra llegar el momento en que necesitramos renu-

    02_IntrodProg.qxd 23/7/07 20:05 Page 20

  • 21

    MEJORAR EL CDIGO

    merar las lneas para tener ms espacio. El segundo problema reside en la po-ca claridad del cdigo. Para alguien que lo lee por primera vez, puede resultarextremadamente difcil entender.

    Dados los constantes saltos hacia atrs y hacia adelante a travs de las instruccio-nes del programa, este tipo de cdigo inevitablemente enredado se conoce comocdigo spaghetti, y la instruccin ms famosa para hacer saltos de lnea es GOTO(del ingls go to, ir a).

    HACIA LA PROGRAMACIN ESTRUCTURADACon el paso del tiempo, los programadores vieron que el cdigo spaghetti resulta-

    ba muy difcil de mantener, ya sea para agregar una nueva caracterstica al programao para corregir un error. As, en la dcada del 60, un cientfico de los Pases Bajos,Edsger Dijkstra, formul un teorema en el que demostr que cualquier programainformtico puede escribirse usando slo tres tipos de instrucciones bsicas: la se-cuencia, la evaluacin de condiciones y la repeticin o bucle de instrucciones, ysin utilizar instrucciones GOTO. Este teorema, conocido como el Teorema deDijkstra, sent las bases de lo que hoy conocemos como programacin estructu-rada y de una gran familia de lenguajes de programacin basados en este concepto.

    Al escribir un programa utilizando las tres estructuras propuestas por Dijkstra,se obtienen programas mucho ms claros, fciles de entender y de mantener yaque, en todo momento, la lgica est a la vista, y resulta fcil encontrar cul es lasiguiente instruccin por ejecutar.

    Iteracin

    Condicional

    MMiieennttrraass A > 0 hacer:

    SSii A > B

    A: = A - B

    SSii no

    B: = B - A

    Imprimir A

    Imprimir B

    Devolver A

    Secuencia}{Figura 1. En esta figura, vemos las tres estructuras

    de control propuestas por Dijkstra en el algoritmo de Euclides.

    02_IntrodProg.qxd 23/7/07 20:05 Page 21

  • 22

    PROGRAMACION ESTRUCTURADA

    CONCEPTOS DE PROGRAMACINESTRUCTURADA> En las siguientes secciones, veremos los conceptos bsicos de la programacin es-tructurada, junto con su implementacin utilizando lenguajes de la plataforma .Net.

    IDENTIFICADORES Y PALABRAS CLAVEComo vimos antes, un programa est formado por instrucciones. En los len-

    guajes de programacin, sobre todo en los de nivel medio y alto, las instruccio-nes estn formadas por palabras que pueden pertenecer o no a algn idioma hu-mano. Como tambin vimos, los lenguajes de programacin son ms estrictosque los lenguajes naturales y no se permite el uso de cualquier palabra ni tampo-co cualquier combinacin de ellas. Toda palabra que se pueda usar en un progra-ma, ya sea parte del lenguaje de programacin o definida por nosotros, recibe elnombre de identificador. En todos los lenguajes de programacin, los identifi-cadores deben respetar ciertas reglas para que sea ms sencillo el trabajo del com-pilador o del intrprete. La forma ms comn de representar un identificador espor una secuencia de uno o ms caracteres consecutivos (no se permiten los es-

    C# Y VB.NET

    Los dos lenguajes ms importantesen .Net (y los nicos provistos por Mi-crosoft desde la discontinuidad de J#)son C# y Visual Basic .Net.C# es un lenguaje orientado a obje-tos, que fue diseado especialmen-te para la plataforma .Net (inclusogran parte de las clases del frame-work estn escritas en C#). Comosu nombre lo indica, C# est basadoen el leguaje C, del que se han eli-minado algunos componentes parahacerlo ms seguro en cuanto al

    modelo de ejecucin y de adminis-tracin de memoria.Visual Basic .Net es una adaptacinpara .Net del conocido lenguaje Vi-sual Basic (que a su vez es una adap-tacin del BASIC original de los aos60) y como tal conserva muchas delas caractersticas (y problemas) delleguaje original. Al igual que C#, VB-.Net (como tambin se conoce a Vi-sual Basic .Net) est basado en el pa-radigma de Orientacin a Objetos queestudiaremos en el Captulo 4.

    02_IntrodProg.qxd 23/7/07 20:05 Page 22

  • 23

    CONCEPTOS DE PROGRAMACIN ESTRUCTURADA

    pacios ni los saltos de lnea) seguidos de caracteres o de nmeros. Generalmen-te, no se permite que los identificadores comiencen con nmeros.

    Hay una familia de identificadores que forman parte del lenguaje de programa-cin y que slo pueden usarse con los fines para los que fueron diseados. Estosidentificadores reciben el nombre de palabra clave. Por ejemplo, el lenguaje C#tiene la palabra clave using, con una semntica determinada, y al ser palabra cla-ve, no podremos usarla en otro contexto.

    VARIABLESEn cualquier programa que hagamos, necesitaremos manejar datos: el nombre

    del usuario, el saldo de una cuenta corriente, la cantidad de veces que iteramossobre una lnea de cdigo. Y es natural que estos datos cambien de valor duran-te la vida del programa. As, nos encontramos con uno de los conceptos ms b-sicos de la programacin, el concepto de variable. Una variable es una referen-cia a un dato cuyo valor puede cambiar durante la ejecucin de un programa.

    Siendo un poco ms formales, podemos decir que una variable es una posicinen la memoria de la computadora, donde reside un dato significativo para el pro-grama. Para que resulte ms fcil la lectura y la comprensin de los programas, lasvariables reciben nombres formados por identificadores vlidos. As, por ejemplo,

    LA PLATAFORMA .NET

    Microsoft .Net es una plataforma paradesarrollo y ejecucin de software pre-parada para enfrentar los nuevos de-safos en el mundo de la programacinde aplicaciones. Esta plataforma con-siste de una familia de lenguajes deprogramacin, una librera de clasescomn a todos los lenguajes de la pla-taforma y un entorno de ejecucin con-trolado. Una de las caractersticas msimportantes de .Net es que el cdigono se traduce directamente a instruc-ciones mquina, sino a un lenguaje in-

    termedio que luego, durante le ejecu-cin del programa, es traducido a cdi-go mquina. Esto brinda la posibilidadde escribir programas independientesde la plataforma de hardware y del sis-tema operativo. Adems, la bibliotecade clases comunes, junto con una es-pecificacin comn a todos los lengua-jes (conocida como CLS o Common La-guage Specification, Especificacin deLenguaje Comn), permite una perfec-ta y fcil interaccin entre diferenteslenguajes de la plataforma.

    02_IntrodProg.qxd 23/7/07 20:05 Page 23

  • 24

    PROGRAMACION ESTRUCTURADA

    en el caso de la implementacin del algoritmo de Euclides que hemos estudiado,usamos dos variables, denominadas A y B. Es una buena prctica de programa-cin dar nombres significativos a las variables, de manera de hacer evidente la in-tencin que tenemos al momento de definirla. Si en un programa llamamos a unavariable c, alguien que lea luego el programa (incluso podramos ser nosotros mis-mos) no podr entender rpidamente cul es el dato que representa; mientras quesi usamos nombreCliente, est claro que, en la ubicacin de memoria referenciadapor la variable, estamos almacenando el nombre de un cliente.

    Figura 2. Segn Google Trends, existe una tendencia a usar ms el lenguaje C# que VB.Net, adems de haber ms noticias en

    Internet sobre C# (fuente www.google.com/trends?q=visual+basic%2Cc%23).

    TIPOS DE DATOSUn tipo de dato es el conjunto de valores que toma una variable, junto con las

    operaciones que pueden realizarse sobre esos valores. En muchos lenguajes, es ne-cesario asociar una variable con un tipo de dato, de manera que el compilador ointrprete pueda validar que las operaciones que hemos escrito realmente corres-ponden al tipo de dato que manejamos. Un ejemplo de tipo de datos es el n-mero entero. El conjunto de valores que puede tomar es el de los nmeros ente-ros (0, 1, 2, -1, etctera), y las operaciones que podemos realizar sobre ellos sonla suma, la resta, la multiplicacin y la divisin de enteros.

    02_IntrodProg.qxd 23/7/07 20:05 Page 24

  • 25

    CONCEPTOS DE PROGRAMACIN ESTRUCTURADA

    Los lenguajes que exigen que definamos el tipo de dato de las variables antes deusarlas se denominan fuertemente tipados. Desde el punto de vista de la deteccinde errores, estos lenguajes presentan una gran ventaja frente a los no tipados ya quepermiten detectar, durante la compilacin (en el caso de lenguajes compilados), al-gunos errores muy habituales, como intentar asignar a una variable un dato que nole corresponde. Por ejemplo, si definimos la variable numerador como de tipo ente-ro, pero ms adelante le asignamos el texto Hola Mundo, el compilador de un len-guaje fuertemente tipado detectar el problema y nos lo informar antes decompilar. Si el lenguaje no es fuertemente tipado, esto no se detectar y podra ocu-rrir que, luego, cuando queramos hacer una multiplicacin entre la variable nume-rador y el valor 5, la operacin resulte en un error. Al no ser detectado por el com-pilador, este error surgir durante la ejecucin del programa.

    En la plataforma .Net, C# es un lenguaje fuertemente tipado, mientras que enVB.Net existe la posibilidad de indicarle al compilador que exija o no la declara-cin de los tipos de datos de las variables.

    SENTENCIASLas sentencias describen acciones que sern ejecutadas por la computadora co-

    mo parte del funcionamiento del programa. stas se diferencian de las instruc-

    LOS COMENTARIOS EN C# Y EN VB.NET

    Los comentarios son un caso espe-cial de sentencia no ejecutable quepermiten escribir un texto libre con elobjetivo de aumentar la legibilidad delcdigo. En cada lenguaje, la forma deescribir comentarios vara, como astambin los tipos de comentarios quese pueden escribir (de una sola lneao de muchas lneas).En C#, los comentarios de una solalnea se escriben comenzando conlos caracteres // (por ejemplo: //es-to es un comentario), mientras que

    los comentarios de muchas lneasse escriben comenzando con los ca-racteres /* y finalizando con */. En-tre ambos caracteres, puede habertexto y saltos de lnea.En VB.Net, los comentarios de unasola lnea se escriben comenzandocon la comilla simple (), y no exis-ten los comentarios mltiple lnea(aunque se los puede simular escri-biendo lneas consecutivas de co-mentarios, todas comenzadas concomilla simple).

    02_IntrodProg.qxd 23/7/07 20:05 Page 25

  • 26

    PROGRAMACION ESTRUCTURADA

    ciones en que una sentencia puede ser traducida por el compilador o por el in-trprete en cero o ms instrucciones de mquina. Es decir, una sentencia poseemayor abstraccin y expresividad que una instruccin.

    Las sentencias pueden clasificarse en ejecutables y no ejecutables. Las ejecuta-bles son las que se traducen en instrucciones de la mquina y se utilizan para rea-lizar acciones concretas (como sumar dos nmeros o imprimir un texto en lapantalla del monitor). Por el contrario, las sentencias no ejecutables no se tradu-cen a instrucciones, y su nica funcionalidad reside en aumentar la legibilidaddel cdigo fuente, ya que se pueden usar como comentarios para explicar deta-lles de la implementacin.

    Al mismo tiempo, las sentencias pueden ser clasificadas en simples y compues-tas. Una sentencia simple es una sentencia en s misma y no contiene a ningunaotra. Por ejemplo, la sentencia de asignacin utilizada para asignar un valor a unavariable es una sentencia simple, ya que comprende nicamente la accin de asig-nar el valor a la variable. Por otro lado, las sentencias compuestas estn formadaspor dos o ms sentencias que se ejecutan de acuerdo con alguna estructura decontrol, tal como veremos ms adelante.

    OPERADORES Y EXPRESIONESAnteriormente, vimos que un tipo de datos define los posibles valores que pue-

    de tomar una variable con el conjunto de operaciones o de acciones que se reali-zan sobre esos valores. Podemos definir un operador como el smbolo utilizadopara indicar una operacin sobre elementos llamados operandos. Por ejemplo,para el tipo de dato nmero entero, est definida la operacin de suma, que pue-de representarse mediante el signo +. As, si escribimos 2 + 3, indicamos que que-remos aplicar la operacin de suma a los valores (operandos) 2 y 3. Del mismomodo, si escribimos saldo + 100, mostramos que queremos sumar 100 al valoralmacenado en la variable identificada como saldo. Cuando unimos dos o msconstantes o variables mediante un operador, definimos una expresin.

    Las expresiones pueden ser simples o compuestas. Una expresin simple esaqulla slo formada por un operador con los operandos necesarios. Una ex-presin compuesta est formada por dos o ms operaciones simples. En el ca-so de las expresiones compuestas, es necesario especificar con exactitud el or-den en que se resuelven las expresiones simples que las componen. En el casode operadores matemticos, generalmente, el orden en que se resuelven es el

    02_IntrodProg.qxd 23/7/07 20:05 Page 26

  • 27

    CONCEPTOS DE PROGRAMACIN ESTRUCTURADA

    tradicional (es decir, primero el producto y la divisin, y luego la suma y laresta). Si al momento de escribir la expresin no tenemos del todo claro cules el orden de prioridad de los operadores, podemos utilizar parntesis para al-terar o hacer implcito el orden de resolucin.

    TIPOS DE OPERADORESPara no entrar en detalles muy matemticos, podemos identificar tres grandes

    tipos de operadores: los lgicos, los aritmticos y los relacionales.

    Operadores lgicosLos operadores lgicos relacionan uno o ms valores de verdad (es decir, valores

    que pueden ser verdadero o falso), y el resultado es otro valor de verdad en funcinde los operandos. Dentro de los lenguajes de programacin, los operadores lgicosse utilizan para evaluar condiciones y modificar as el flujo de control de un pro-grama. Los operadores lgicos ms conocidos son no (NOT), o (OR), y (AND).En la Tabla 1, pueden apreciarse los valores devueltos por los operadores lgicos msconocidos (usamos los nombres en ingls para ir familiarizndonos con los lengua-jes de programacin). En la jerga de la programacin llamamos operadores boo-leanos a los operadores lgicos, por su relacin con el lgebra de Boole.

    A B NOT A A AND B A OR B A XOR BF F V F F FF V V F V VV F F F V VV V F V V F

    Tabla 1. Tabla de verdad de los cuatro operadores lgicos ms comunes.

    OPERADORES BOOLEANOS

    Operadores aritmticosComo hemos visto, los operadores aritmticos se corresponden con las opera-

    ciones matemticas tradicionales: la adicin, la sustraccin, la potenciacin.

    Operadores relacionalesLos operadores relacionales, tal como su nombre lo indica, establecen una re-

    lacin entre sus operandos. Un ejemplo clsico de operador relacional es el ope-

    02_IntrodProg.qxd 23/7/07 20:05 Page 27

  • 28

    PROGRAMACION ESTRUCTURADA

    rador mayor que, notado con el smbolo >. Engeneral, los operadores relacionales devuelven unvalor de verdad, por lo que son usados en expre-siones lgicas (por ejemplo, el valor de verdad dela expresin 7 > 9 es falso).

    Figura 3. George Boole fue el precursor en el lgebra de Boole, de donde se tom el concepto de Operador lgico o booleano.

    Tipos de operadoresSegn la cantidad de operadores con los que trabaja un operador puede cla-

    sificarse en unario o binario. Un operador unario se aplica slo a un opera-dor. El ejemplo ms comn es el signo -, utilizado para indicar nmeros ne-gativos (por ejemplo, -15). Los operadores binarios poseen dos operandos, co-mo por ejemplo, el signo +. El caso de los operadores binarios puede exten-derse y generalizarse para una cantidad cualquiera de operadores, en cuyo ca-so se denominan operador n-arios, donde n es la cantidad de operandos. Co-mo ejemplo, podemos imaginar un operador 4-ario llamado M que devuelveel mximo entre cuatro nmeros. Una operacin con este operador podra es-cribirse como M 7 2 0 9.

    Segn el lugar donde estn los operadores con respecto a los operandos enuna operacin, un operador puede clasificarse en infijo, prefijo o sufijo. Unoperador prefijo se coloca delante de los operadores. El ejemplo que veamosantes para el signo -, usado como operador unario, es un caso de operador

    EL LENGUAJE PASCAL

    El lenguaje Pascal fue creado por Ni-klaus Wirth con el objetivo de lograrun lenguaje fcil de aprender, parausar en sus clases de programacin,y lo bautiz en honor a Blaise Pascal,inventor de la primera calculadoramecnica. Pascal es un lenguaje es-

    tructurado y fuertemente tipado, ade-ms de contar con caractersticas quehacen posible un buen grado de en-capsulamiento. Actualmente, muchasuniversidades lo siguen utilizando pa-ra introducir los conceptos de progra-macin estructurada.

    02_IntrodProg.qxd 23/7/07 20:05 Page 28

  • 29

    CONCEPTOS DE PROGRAMACIN ESTRUCTURADA

    prefijo. Si el operador se coloca entre los operandos, entonces de denominainfijo (es el tipo ms comn entre los operadores matemticos). Por ejemplo,el signo de adicin (+) es un operador infijo, ya que se lo escribe entre los ope-randos (2 + 4). Por ltimo, los operadores sufijos son aquellos que se colocandetrs de los operandos. Un ejemplo no tan conocido es el operador ++ dellenguaje C#. Este operador devuelve el valor del operador y luego le suma uno(podemos escribir por ejemplo: a++).

    ESTRUCTURAS DE CONTROLNormalmente, el flujo de ejecucin de un programa es secuencial, porque se

    ejecuta una sentencia tras otra. Las estructuras de control permiten modificarel flujo secuencial, alterando el orden de las sentencias bajo determinadas cir-cunstancias. En los lenguajes estructurados, existen dos estructuras de controlbsicas: la seleccin y la repeticin o iteracin. Segn el teorema de Dijkstra,estas dos estructuras, junto con la secuencia, son suficientes para escribir cual-quier programa.

    La estructura de seleccinLa estructura de seleccin permite determinar si una sentencia (simple o com-

    puesta) ser ejecutada o no a partir de la evaluacin de una determinada condi-cin o expresin booleana. En la mayora de los lenguajes actuales, la seleccinse realiza mediante el uso de la estructura if (si). La forma ms bsica de esta es-tructura es la siguiente (en pseudocdigo):

    Si (expresin booleana)

    Entonces ejecutar sentencia A

    Si no ejecutar sentencia B

    La segunda parte (la del si no) es optativa y permite ejecutar una accin alter-nativa para cuando el resultado de la expresin lgica es falso.

    En C#, la estructura de seleccin se escribe mediante la palabra if seguida dela expresin entre parntesis y debajo la sentencia por ejecutar en caso de que laexpresin sea verdadera. En forma opcional, puede haber un else (si no) para es-pecificar una accin en caso de que la expresin lgica sea falsa.

    02_IntrodProg.qxd 23/7/07 20:05 Page 29

  • 30

    PROGRAMACION ESTRUCTURADA

    // C#

    if( saldo > montoExtraccion )

    RealizarExtraccion(montoExtraccion);

    else

    MostrarMensaje(No tiene suficiente saldo);

    En Visual Basic .Net, la estructura de seleccin es muy similar, aunque con al-gunas diferencias: la expresin no necesita ir entre parntesis y debe ser seguidapor la palabra reservada THEN (entonces). Adems, VB.Net provee la posibilidadde escribir la accin en la misma lnea del if o en la lnea siguiente. En caso quese escriba debajo, la estructura debe ser cerrada usando end if.

    VB.Net

    If saldo > montoExtraccion Then

    RealizarExtraccion(montoExtraccion)

    Else

    MostrarMensaje(No tiene suficiente saldo)

    End If

    Tambien podemos hacer esto:

    If b > 0 Then c = a / b else c = 0

    En muchos lenguajes, existe otra estructura de seleccin alternativa, denominadacomnmente case o select case, que permite especificar varias alternativas por ca-

    CLASIFICACIONES DE LOS TIPOS DE DATOS

    Los tipos de datos pueden clasificar-se en tres grupos: los ordinales, losno ordinales y los compuestos. Los ti-pos de datos ordinales son aquelloscuyos valores pueden ser ordenados(se establece una relacin de ordenentre cualquier par de valores), comopor ejemplo, los nmeros enteros o

    los caracteres de la tabla ASCII. Losvalores de los tipos no ordinales nopueden ordenarse, como es el casode los nmeros decimales de granprecisin o los punteros a memoria.Los tipos de datos compuestos inclu-yen las cadenas de caracteres y lasestructuras de datos.

    02_IntrodProg.qxd 23/7/07 20:05 Page 30

  • 31

    CONCEPTOS DE PROGRAMACIN ESTRUCTURADA

    sos, segn el valor de una variable o de una expresin. Si bien el select case puedeescribirse perfectamente como una secuencia de estructuras if, en pseudocdigo,podemos escribir la seleccin mltiple de esta manera:

    SegunEsElValorDe expresin hacer:

    C1: sentencia 1

    C2: sentencia 2

    Sino: sentencia n

    El funcionamiento de esta estructura es as: se evala la expresin, y su valor secompara con la lista de constantes C1, C2, etctera. Si el valor de la expresin es-t comprendido en la lista de constantes, se ejecuta la sentencia correspondiente(por ejemplo, si el valor de la expresin es C2, se ejecuta la sentencia 2). Si el va-lor de la expresin no est en la lista de constantes, y hay un sino, se ejecuta la sen-tencia asociada a ste, caso contrario, la ejecucin contina en la lnea siguiente.

    En C#, la estructura de seleccin mltiple cumple la misma funcin, pero sedenomina switch, y su sintaxis es la siguiente:

    // C#

    switch(variable)

    {

    case 10:

    HacerAlgo();

    break;

    case 20:

    HacerOtraCosa();

    break;

    default:

    HacerAlgoDistinto();

    break;

    }

    En Visual Basic .Net, la misma estructura selectiva mltiple se denomina Se-lect Case y se escribe as:

    02_IntrodProg.qxd 23/7/07 20:05 Page 31

  • 32

    PROGRAMACION ESTRUCTURADA

    VB.Net

    SELECT CASE variable

    CASE 10: HacerAlgo()

    CASE 20: HacerOtraCosa()

    CASE ELSE: HacerAlgoDistinto();

    END SELECT

    Las estructuras de repeticinMuy a menudo, necesitamos repetir una sentencia ms de una vez para completar

    el objetivo del algoritmo. Las estructuras de repeticin de los lenguajes estructura-dos permiten ejecutar una sentencia una cierta cantidad de veces o mientras se cum-pla una determinada condicin. Por ejemplo, si volvemos a mirar el algoritmo delCaptulo 1, podremos notar que repetimos las sentencias que hacen las restas entre lasdos variables mientras que el valor de la variable A sea mayor que cero.

    Como decamos en el prrafo anterior, la mayora de los lenguajes estructuradosproveen dos tipos de estructuras de repeticin: una para repetir una sentencia mien-tras se cumpla una condicin (es decir, mientras el resultado de evaluar una expre-sin lgica sea verdadero), y otra para repetir una sentencia una cantidad determi-nada de veces. La sentencia que se ejecuta repetidas veces se denomina bucle.

    La estructura de repeticin condicional se denomina comnmente while(mientras). En el lenguaje C#, simplemente se la escribe seguida de la expresinlgica entre parntesis y debajo la sentencia a ejecutar:

    // C#

    While( a > 0 )

    a = a - b;

    En Visual Basic .Net, es muy similar, con la diferencia que se debe marcar el fi-nal de la estructura con las palabras clave End While, y no es necesario escribirla expresin booleana entre parntesis:

    VB.Net

    While a > 0

    a = a - b

    End While

    02_IntrodProg.qxd 23/7/07 20:05 Page 32

  • 33

    CONCEPTOS DE PROGRAMACIN ESTRUCTURADA

    En algunos lenguajes, existe una variante de esta estructura de repeticin, consisten-te en evaluar la expresin lgica al final. La diferencia radica en que, al evaluar la con-dicin al final, la sentencia por repetir se ejecutar por lo menos una vez, mientrasque, si la evaluacin se hace al comienzo, la sentencia podra no ejecutarse nunca.

    Al momento de usar una estructura while, se debe prestar especial atencin a laexpresin lgica que determina el fin del bucle (tambin conocida como condi-cin de corte), ya que escribirla mal, podra hacer que el bucle nunca finalizara(bucle infinito). Por ejemplo, si la condicin de corte es que el valor de una va-riable llegue a cero, pero olvidamos modificarlo dentro del bucle, el valor perma-necer constante, y el ciclo nunca finalizar.

    La otra estructura de control repetitiva con la que disponemos en la mayora delos lenguajes estructurados es la que se conoce como For. Esta estructura permi-te especificar que se quiere repetir la sentencia una cantidad finita de veces, usan-do una variable como contador. A cada iteracin, la variable contador se incre-menta automticamente (es decir, no necesitamos preocuparnos por actualizarlacomo sucede con while). En algunos lenguajes, como Pascal, no se permite mo-dificar la variable contadora dentro del bucle para facilitar la traduccin y valida-cin del cdigo durante la fase de compilacin.

    En C#, la estructura for es un poco difcil de comprender al comienzo, perouna vez que nos familiarizamos con ella, vemos que tiene una gran capacidad deexpresividad y de flexibilidad para escribir repeticiones complejas. Al escribir unfor en C#, debemos especificar el valor con el que comienza la variable conta-dora, la condicin que determina que el contador ha llegado al valor final y laexpresin que incrementa el contador. Esto ltimo parece contradecir lo quemencionbamos antes acerca de que no es necesario preocuparnos por modifi-car el contador. Y es cierto. En ese aspecto, la estructura for de C# es parecidaa la estructura while. Vemosla en un ejemplo:

    // C#

    for(i=0;i

  • 34

    PROGRAMACION ESTRUCTURADA

    el que comienza la iteracin. La segunda, la condicin para finalizar. Y la ltimaespecifica la expresin que modifica el valor del contador en cada iteracin. Eneste ejemplo, la sentencia HacerAlgo se ejecutar diez veces. El for de C# sopor-ta algunas variantes que lo hacen ms complejo y potente, pero su explicacin ex-cede el alcance de este libro.

    En Visual Basic .Net, la estructura for es mucho ms sencilla e intuitiva, perotambin menos potente. Adems, se diferencia de la versin en C# en que debeser cerrado con la palabra reservada Next (siguiente). Continuando con el ejem-plo anterior, en Visual Basic podemos escribir:

    VB.Net

    For i=1 to 10

    HacerAglo()

    Next

    En este ejemplo, la sentencia HacerAlgo se repetir diez veces, y, en cada itera-cin, el valor de la variable i se incrementar automticamente en 1.

    CONCLUSIONES

    En el momento de su aparicin, la programacin estructurada signific un im-portante avance en las formas de construir software, sobre todo por el impac-to que caus en los costos de mantenimiento. La facilidad de mantenimientose debe a que, con la programacin estructurada, conseguimos programasms fciles de entender y de depurar (por la ausencia de instrucciones GOTO),adems, los bloques de cdigo son ms claros.

    02_IntrodProg.qxd 23/7/07 20:05 Page 34

  • CAPTULO 3

    Elementos deprogramacin

    En el captulo anterior, hemos introducido los conceptos

    fundamentales de la programacin estructurada,

    tal como fue planteada por Dijkstra en su famoso

    teorema. Ahora veremos algunos conceptos interesantes

    que, si bien se encuentran en la mayora de los

    lenguajes estructurados de la actualidad, son un poco

    ms generales y pueden aplicarse, prcticamente,

    en cualquier paradigma de programacin.

    ATENCIN AL LECTOR > [email protected]

    03_IntrodProg.qxd 23/7/07 20:41 Page 35

  • 36

    ELEMENTOS DE PROGRAMACIN

    MODULARIZACIN> En nuestro trabajo como programadores, nos encontramos a diario con laobligacin de resolver problemas. A medida que la tecnologa avanza y las ne-cesidades de los usuarios son ms exigentes, los problemas que debemos resol-ver se tornan ms complejos. Esto hace que la escritura de los programas seabastante difcil, y que su complejidad los vuelva inaccesibles. Tarde o tempra-no, la cantidad de variables y elementos que debemos manejar superar los l-mites normales de la mente humana.

    Una tcnica muy comn para facilitar la escritura de programas de gran tama-o o que necesiten resolver problemas muy complejos consiste en dividir el pro-blema en problemas ms pequeos. De esta manera, cada dificultad ser ms f-cil de entender y, por lo tanto, resultar ms sencillo encontrar un algoritmo quelo resuelva. As, la construccin del programa se reduce a la construccin de pe-queas unidades o subprogramas que se conectan de alguna manera para resol-ver juntas el problema original. Esta tcnica se conoce como Modularizacin, ya cada subprograma se lo denomina mdulo.

    Un programa escrito usando la tcnica de modularizacin se resume en unconjunto de subprogramas que se llaman unos a otros. Cada programa incluyeuna lista de sentencias (de cualquiera de los tres tipos que estudiamos en el ca-ptulo anterior) y, eventualmente, llamadas a otros subprogramas. Cuando ha-blamos de llamar o invocar a un subprograma, lo que queremos decir es que,desde un subprograma (o incluso desde el programa principal), se deriva la eje-cucin al subprograma llamado. Por ejemplo, en el siguiente pseudocdigo:

    Programa Principal:

    1 A()

    2 B()

    3 Fin.

    Subprograma A:

    3 Imprimir la palabra Hola

    Subprograma B:

    4 Imprimir la palabra Mundo

    03_IntrodProg.qxd 23/7/07 20:41 Page 36

  • 37

    MODULARIZACIN

    El programa principal llama o invoca al subprograma A y luego al subpro-grama B. Y aqu surge uno de los primeros conceptos clave de la modulariza-cin: un subprograma o mdulo debe ser un algoritmo en s mismo (de acuer-do con la definicin que vimos en el Captulo 1), es decir, que debe consistir deuna secuencia finita de pasos tras la cual finaliza. Entonces, cuando se hace unallamada a un subprograma, ste se ejecuta (o sea, se ejecutan sus sentencias) y,al terminar, el control vuelve al punto desde donde se hizo la invocacin. Re-tornando sobre el ejemplo anterior, concluimos que la secuencia de ejecucinser: comienza el programa, se deriva la ejecucin al subprograma A, se impri-me la palabra Hola, el control vuelve a la lnea 2, se deriva el control al sub-programa B, se imprime la palabra Mundo, el control vuelve a la lnea 3, y elprograma termina.

    PROCEDIMIENTOS Y FUNCIONESLos mdulos se pueden clasificar en procedimientos y en funciones. Las fun-

    ciones devuelven un nico valor al programa o subprograma que hizo la llama-da. Los procedimientos, generalmente, no devuelven ningn valor, aunque po-dran hacerlo. Las funciones se usan para resolver algn clculo y devolver el re-sultado, mientras que los procedimientos se utilizan para realizar una tarea con-creta, pero que no involucre devolver nada al programa o subprograma que lo lla-m. En la mayora de los lenguajes de programacin, los procedimientos y fun-ciones deben recibir un nombre consistente en un identificador vlido segn lasreglas lxicas del lenguaje.

    Otra de las ventajas de la divisin en subprogramas reside en que nos permi-te usar el mismo grupo de sentencias varias veces en el mismo programa sin ne-cesidad de volver a escribirlas. Sin embargo, lo ms probable es que en los dis-tintos lugares donde podamos llamar a un procedimiento o funcin, los datos

    DIVIDE Y VENCERS

    La tcnica de dividir un problema enproblemas ms pequeos que seanms fciles de resolver se conoce ha-bitualmente como la tcnica de Divi-dir y vencer, en referencia a pensa-

    mientos de Nicols Maquiavelo. En sulibro El Prncipe, Maquiavelo hablasobre generar discordia entre lospueblos, de manera que se separen yas poder dominarlos ms fcilmente.

    03_IntrodProg.qxd 23/7/07 20:41 Page 37

  • 38

    ELEMENTOS DE PROGRAMACIN

    que necesitamos manejar no sean los mismos. Es necesario, entonces, poderpasarle informacin adicional al subprograma. Esto se realiza mediante el usode parmetros o argumentos. Un parmetro es una variable que el procedi-miento o funcin recibe como dato de entrada y que puede usar para cambiarsu comportamiento sobre la base del valor recibido (usando, por ejemplo, unasentencia condicional).

    Los parmetros del argumento pueden ser de entrada o de salida. Los de en-trada son los que el programa o mdulo que llama le pasa al subprograma,mientras que los parmetros de salida son aquellos que el procedimiento ofuncin utiliza para devolver informacin a quien lo llam. Es importante noconfundir un parmetro de salida con el resultado de una funcin: los par-metros de salida pueden ser usados tanto en procedimientos como en funcio-nes, y se puede utilizar la cantidad que sea necesaria, mientras que el valor deresultado slo se puede usar en las funciones, y no puede haber ms de unopor funcin.

    Para ilustrar el uso de funciones, retomemos el ejemplo del algoritmo de Eucli-des y convirtmoslo en una funcin (en pseudocdigo):

    Funcion MCM(A,B)

    Mientras A > 0 hacer:

    Si A > B

    A := A B

    Si no

    B := B A

    Devolver A

    En este caso, la funcin se llama MCM y posee dos parmetros de entrada, detipo numrico, A y B. La funcin MCM consiste de una nica sentencia de re-peticin que hace restas sucesivas entre A y B y, finalmente, devuelve el valorde A como resultado de la funcin.

    Para entender el uso de una funcin, vamos a utilizar la funcin MCM del ejem-plo anterior dentro de un procedimiento:

    03_IntrodProg.qxd 23/7/07 20:41 Page 38

  • 39

    MODULARIZACIN

    Procedimiento MostrarMCM()

    Pedir un numero y guardarlo en V1

    Pedir un numero y guardarlo en V2

    M := MCM(V1, V2)

    Mostrar valor de M

    En el ejemplo, se pide al usuario que ingrese un nmero y se lo almacena en lavariable V1. Se hace lo mismo con la variable V2. Luego, a la variable M se leasigna el resultado de la funcin MCM llamada con los valores V1 y V2 (los par-metros A y B del ejemplo). Por ltimo, se muestra el valor de la variable M.

    mbito de variablesEl mbito de una variable es el contexto o porcin de programa en el que la

    variable est definida, es conocida y accesible para ser usada. Si bien cada lengua-je de programacin tiene sus propias reglas de mbito (es decir, las reglas que de-finen dnde es accesible una variable definida en algn punto de un programa),los subprogramas delimitan el mbito de las variables.

    Si el mbito de una variable incluye slo un subprograma, entonces se dice quees una variable local (local al procedimiento o funcin), mientras que si abarcatodos los mdulos, la variable ser global. Una variable local slo existe mientrasse ejecuta el subprograma que la contiene, mientras que una variable global exis-te durante toda la ejecucin, y su valor puede consultarse o modificarse desdecualquier punto del programa o subprogramas.

    Algunos lenguajes de programacin como Pascal permiten escribir programasdentro de subprogramas, lo cual agrega niveles extras de visibilidad o mbitode las variables, ya que una variable local a un procedimiento puede ser acce-

    USO DE PARMETROS DE ENTRADA Y DE SALIDA

    Si bien un procedimiento puede tenerparmetros de salida, esto suele noresultar en una buena prctica de pro-gramacin. A menos que no podamoshacer otra cosa, si necesitamos devol-

    ver un valor desde un subprograma,siempre es mejor usar una funcin.Esto dar un nico punto de salida alsubprograma, mejorando la claridad yla legibilidad del cdigo.

    03_IntrodProg.qxd 23/7/07 20:41 Page 39

  • 40

    ELEMENTOS DE PROGRAMACIN

    dida desde un procedimiento interno (Figura 1). En C# y Visual Basic .Net, lasreglas de mbito determinan que las variables pueden ser globales dentro deuna clase (ya veremos qu es una clase en el siguiente captulo), o locales a unprocedimiento o funcin.

    Programa principal

    Declarar variable A

    A:=2

    Llamar a B()

    Procedimiento (B)

    Declarar variable B1

    B1:=A*2

    Llamar a C()

    Procedimiento C()

    Declarar variable C1

    C1:=B1*3

    A:=C1+1

    Fin procedimiento C

    Fin procedimiento B

    Al ejecutar el programa, la variable A

    tendr el valor 13, como resultado de

    la asignacin global que se hace en el

    procedimiento C.

    La variable A es global al programa.

    La variable B1 es local al

    procedimiento B.

    La variable B1 es local al procedimiento

    B, pero como el procedimiento C

    est dentro de B, la variable B1 se

    convierte en global para C. La variable

    C1 es local al procedimiento C.

    Figura 1. Algunos lenguajes permiten definir procedimientosdentro de otros, extendiendo el mbito de las variables locales.

    Un punto importante por tener en cuenta es que el mbito de las variablesse ve reducido cuando hay un conflicto de nombres. En los casos en que seproduzca este conflicto, el mbito se resuelve asignando prioridad a la varia-ble que se encuentra definida ms adentro en el anidamiento de programa ysubprogramas. En estos casos, decimos que la variable de ms adentro ocultaa la de ms afuera. Esto significa que, si tenemos una variable visible desde unprocedimiento y dentro de ese procedimiento declaramos una variable con el

    03_IntrodProg.qxd 23/7/07 20:41 Page 40

  • 41

    MODULARIZACIN

    mismo nombre, esta ltima tendr prioridad sobre la global, y al asignarle unvalor, se asignar a la variable local.

    Programa principal

    Declarar variables A y B

    A:=2

    B:=3

    Llamar a P1(B)

    Procedimiento P1(A)

    Declarar variable B

    B:=A*2

    Imprimir B

    Mediante esta llamada se pasa el valor de

    B como parmetro A al procedimiento P1.

    El procedimiento P1 tiene un parmetro

    llamado A, que por estar en un nivel de

    anidamiento ms interno oculta a la

    variable A del programa principal.

    La variable B de P1 oculta a la variable B

    del programa principal, por lo que el

    procedimiento P1 imprimir el valor 6.

    Figura 2. En este ejemplo, se puede ver el conceptode ocultamiento con variables y con parmetros.

    Parmetros por valor y por referenciaExisten dos formas de pasar parmetros a un procedimiento o funcin: por valor

    o por referencia. Al pasar un parmetro por valor, tal como su nombre lo indica,lo que le estamos pasando al subprograma es el valor de la variable, es decir, que elsubprograma recibe una copia de la variable original con el valor de ella. Al pasar

    CUIDADO CON LAS VARIABLES GLOBALES!

    Muchas veces las variables globa-les son tentadoras, porque evitan lanecesidad de pasar parmetros deun subprograma a otro para utilizarel valor de una variable. Sin embar-go, en la prctica, el uso indiscrimi-

    nado de variables globales no es re-comendado porque dificulta elmantenimiento del programa, dadoque es difcil determinar en qumomento una variable global reci-bi algn valor.

    03_IntrodProg.qxd 23/7/07 20:41 Page 41

  • 42

    ELEMENTOS DE PROGRAMACIN

    un parmetro por referencia, lo que se le pasa al subprograma es la direccin de me-moria donde se encuentra el valor de la variable. Es decir, se le pasa una referenciaal valor. Dado que se pasa la direccin de memoria donde se encuentra el valor,cualquier asignacin que se le haga al parmetro se efectuar en realidad sobre lavariable original, ya que se escribe en la misma direccin de memoria.

    Muchos lenguajes de programacin (entre ellos Visual Basic .Net) no tienen elconcepto de parmetro de salida como parte del lenguaje, por lo que es necesa-rio utilizar parmetros por referencia para devolver un valor al programa o sub-programa que hizo la llamada.

    Procedimientos y funciones en C# y Visual Basic .NetObviamente, los dos lenguajes de .Net provistos por Microsoft proveen meca-

    nismos para definir subprogramas.

    En C#, el concepto de procedimiento no existe como tal, sino que todo sonfunciones. Sin embargo, es posible definir procedimientos como funciones queno devuelven un resultado, utilizando el tipo de dato void (que es un tipo de da-tos nulo). En Visual Basic .Net, los procedimientos se definen mediante la pala-bra clave Sub. Vemoslo con ejemplos.

    // C#

    void HolaMundo()

    {

    Console.WriteLine(Hola Mundo);

    }

    VB.Net

    Sub HolaMundo()

    Console.WriteLine(Hola Mundo)

    End Sub

    En el caso de C#, el procedimiento (que en realidad es una funcin) comienzacon el tipo de dato devuelto, void, seguido del nombre del procedimiento con lalista de parmetros entre parntesis (que en el ejemplo est vaca). La secuenciade sentencias que compone el procedimiento en C# est delimitado por las lla-

    03_IntrodProg.qxd 23/7/07 20:41 Page 42

  • 43

    MODULARIZACIN

    ves de apertura y cierre (los caracteres { y }). Por otro lado, en VB.Net, la defini-cin del procedimiento comienza con la palabra clave Sub, seguida del nombredel procedimiento y la lista de parmetros. A diferencia de C#, en Visual Basic.Net no se utilizan caracteres para marcar el comienzo de las sentencias del pro-cedimiento, pero s se utiliza End Sub para marcar el fin.

    La forma de definir una funcin en C# es igual que en el ejemplo anterior,reemplazando la palabra void por el tipo de dato que se necesite devolver (porejemplo, int para enteros). En VB.Net, la definicin de una funcin es sustan-cialmente diferente, ya que debe utilizarse la palabra reservada Function en lu-gar de Sub, y se le agrega al final el tipo de dato de salida. Adems, como con losprocedimientos, en VB.Net hay que marcar el fin de la funcin con End Func-tion. Como requisito extra, en ambos lenguajes es obligatorio colocar la palabrareturn para devolver el resultado de la funcin.

    // C#

    int Sumar(int a, int b)

    {

    return a + b;

    }

    VB.Net

    Function Sumar(a, b as Integer) As Integer

    Return a + b

    End Function

    LAS DLLS EN WINDOWS

    El sistema operativo Windows estformado por unas cuantas decenas deDLLs. Un detalle interesante sobre es-to es que esas DLLs poseen las fun-ciones y procedimientos que Windowsutiliza para hacer todo lo que hace, yestn lo suficientemente documenta-

    das como para que podamos utilizar-las en nuestros programas cuandonecesitemos hacer algo que el len-guaje no tiene previsto. Este conjuntode DLLs se denomina API (ApplicationProgrammer Interface o Interfaz parael programador de aplicaciones).

    03_IntrodProg.qxd 23/7/07 20:41 Page 43

  • 44

    ELEMENTOS DE PROGRAMACIN

    LIBRERAS> Una de las grandes ventajas de la modularizacin reside en que los mdulospueden utilizarse en distintos lugares. Para ello, resulta muy comn organizarlosen libreras. Una librera o biblioteca es un conjunto de subprogramas compi-lados en un nico archivo.

    En algunos lenguajes (sobre todo los ms viejos), al compilar un programa se ge-nera un archivo denominado programa objeto, que es el cdigo mquina genera-do a partir del cdigo fuente del programa, pero sin incluir el cdigo de las libre-ras utilizadas. Luego, en un segundo paso denominado enlace (linking) se combi-na el programa objeto con las libreras para producir un nico archivo ejecutable.

    En los lenguajes de programacin que permiten compilar cdigo para ejecutaren el sistema operativo Windows, es muy comn el uso de libreras de enlace di-nmico (los conocidos archivos DLL, acrnimo de dynamic link library). Elenlace dinmico consiste en saltear el paso de enlace durante la compilacin pa-ra hacerlo durante la ejecucin de un programa. As, mientras un programa seejecuta, si necesita cdigo que se encuentra en una librera, se coloca sta en me-moria, y se transfiere el control al subprograma necesario dentro de la librera.

    Figura 3. En .Net podemos crear libreras de clases,que se comportarn como libreras de enlace dinmico.

    03_IntrodProg.qxd 23/7/07 20:41 Page 44

  • 45

    ARREGLOS Y MATRICES

    ARREGLOS Y MATRICES> Las estructuras de datos son conjuntos de datos relacionados y organizados dealguna manera (la forma de organizarlos depende justamente de la estructura usa-da). Desde un punto de vista ms formal, las estructuras de datos son tipos de da-tos (complejos), ya que determinan los valores que pueden contener y las operacio-nes que se les pueden aplicar. De acuerdo a cmo se administra la memoria paraalmacenar la informacin, las estructuras de datos se pueden clasificar en estticasy dinmicas. Las estructuras estticas ocupan una cantidad fija de memoria duran-te toda su vida. El tamao queda establecido al momento de definir la estructura,es decir, cuando definimos una variable del tipo de la estructura de datos. Las es-tructuras dinmicas tienen un tamao inicial, pero pueden crecer durante la ejecu-cin, a medida que se incrementa la cantidad de datos que almacenan.

    ARREGLOSLos arreglos o vectores (Arrays) son estructuras de datos que permiten almacenar

    una coleccin de datos del mismo tipo, de manera que pueden ser accedidos en for-ma directa. Dicho de otra manera, los arreglos son una sucesin contigua de n da-tos (donde n es el tamao del arreglo), cada uno con un ndice determinado por laposicin. As, es posible acceder a un elemento del arreglo mediante su ndice. Unarreglo tiene un nico nombre, y ste abarca a todos los elementos que contiene.

    El arreglo es una secuencia de datos contiguos

    en memoria.

    A[0]

    Luego del arreglo pueden seguir datos

    de cualquier tipo.

    Figura 4. Los elementos de un arreglo ocupan posiciones contiguas de memoria.

    50 0 80 30 55 27 10 Prez tue

    A[1] A[6]

    03_IntrodProg.qxd 23/7/07 20:41 Page 45

  • 46

    ELEMENTOS DE PROGRAMACIN

    Normalmente, los arreglos son estructuras estticas de datos, pero algunos len-guajes de programacin permiten cambiarles el tamao mientras se ejecutan.

    Para entender la utilidad de los arreglos, pensemos que necesitamos almacenar elregistro de lluvias de cada mes para una ciudad. Sin usar arreglos, deberamos tenerdoce variables para contener el registro pluvial de los doce meses del ao. Esta alter-nativa presenta algunas desventajas: es tediosa para programar, ya que hay que de-clarar cada una de las variables con un nombre diferente. Adems, se hace imposi-ble recorrerlas mediante una estructura de repeticin. Por ltimo, si queremos hacerque el usuario ingrese el nmero de mes y mostrar las lluvias de ese mes, deberamoshacer un select case para mostrar la variable correspondiente al mes ingresado.

    Si en cambio utilizamos un arreglo, tendremos los doce valores bajo un mis-mo nombre de variable y podremos acceder al registro pluvial del n-simo mesdirectamente leyendo el elemento del arreglo ubicado en la posicin n. Supon-gamos que la variable se denomina lluvias; entonces, podemos escribir un al-goritmo como el que sigue para mostrar el registro de lluvias de un mes selec-cionado por el usuario:

    // Pseudocdigo:

    Procedimiento MostrarRegistroPluvial

    Leer un entero y guardarlo en la variable mes

    Mostrar el valor de lluvias[mes]

    Aqu vemos una notacin sintctica que hasta ahora no habamos visto: llu-vias[mes]. Esta expresin significa: el dato que se encuentra en la posicin mes

    EL PRIMER ELEMENTO

    Cada lenguaje de programacin tie-ne diferentes posturas a la hora dedefinir las dimensiones de un arre-glo, como as tambin de definircul es el ndice del primer elemen-to. Lenguajes como Delphi permitendefinir los ndices de un arreglo co-menzando con cualquier nmero

    (por ejemplo, podemos indicar quelos ndices van del 50 al 100). Otroslenguajes permiten definir el tama-o del arreglo, y el primer elementoqueda fijado por una convencin dediseo. En .Net, todos los ndices dearreglos y colecciones comienzansiempre en cero.

    03_IntrodProg.qxd 23/7/07 20:41 Page 46

  • 47

    ARREGLOS Y MATRICES

    dentro del arreglo (el valor que est dentro de los corchetes representa el ndiceal que se quiere acceder). En el ejemplo, hemos usado una variable como ndi-ce del arreglo, pero se puede usar tambin un valor constante, por ejemplo llu-vias[2] para acceder a las lluvias de febrero.

    Arreglos en .NetObviamente, los lenguajes de .Net proveen soporte para la creacin y uso de

    arreglos. En C#, los arreglos son estticos, mientras que, en Visual Basic .Net,pueden ser dinmicos. En ambos lenguajes, los arreglos se definen declarando sutamao y el tipo de los elementos. El primer ndice es siempre el cero.

    // C# - Defino un arreglo de 2 enteros

    int[] arreglo = new int[2];

    arreglo[0] = 1;

    arreglo[1] = 20;

    VB.Net Defino un arreglo de 2 enteros

    Dim arreglo(2) as Integer

    Arreglo(0) = 1

    Arreglo(1) = 2

    MATRICESSi bien las matrices tienen un origen en la matemtica, en el contexto de la pro-

    gramacin son estructuras de datos que permiten organizar la informacin en fi-las y columnas. Cada elemento de una matriz puede ser accedido por un par dendices (la fila y la columna). Al igual que en los arreglos, los elementos de unamatriz deben ser todos del mismo tipo de datos.

    ESTRUCTURAS DE DATOS MS COMPLEJAS

    Los arreglos y matrices son estructu-ras de datos bsicas. En muchas oca-siones, necesitamos trabajar con es-tructuras ms complejas. En .Net, dis-ponemos de tipos de datos para mane-jar estructuras como listas, pilas o co-

    las, entre otras. Una pila es similar aun arreglo, en donde slo podemos co-locar elementos al principio y sacar delmismo lugar. En una cola, slo pode-mos ubicar elementos al final y quitarelementos del comienzo.

    03_IntrodProg.qxd 23/7/07 20:41 Page 47

  • 73

    14

    0

    4

    1

    49

    99

    0

    18

    2

    17

    48

    ELEMENTOS DE PROGRAMACIN

    Figura 5. Una matriz est organizada en filas y columnas. Cada elemento se accedemediante un ndice compuesto por el nmero de fila y por el nmero de columna.

    Columna

    Elemento (3,4)

    Fila

    Desde el punto de vista de su almacenamiento en memoria, la matriz puede servista como un arreglo de filas, donde cada fila es un arreglo de elementos. Vistode esta manera, una matriz es, en definitiva, un arreglo de elementos de tipo dedato arreglo. Es decir, un arreglo bidimensional.

    A la hora de recorrer una matriz, se debe prestar atencin a no confundir los ndi-ces de los elementos, teniendo bien presente en qu columna y en qu fila est cadauno de los que necesitamos acceder. Dada su estructura de dos dimensiones, la for-ma de recorrer una matriz es mediante dos estructuras repetitivas anidadas, una pa-ra recorrer las filas y la otra para recorrer las columnas. Dependiendo del orden enque se quiera hacer el recorrido, se iterar primero sobre las filas y luego sobre las co-lumnas, o primero sobre las columnas y luego sobre las filas. Para saber si hemos im-plementado correctamente el recorrido, podemos tomar una matriz de ejemplo y se-

    FXCOP

    Luego del surgimiento de .Net, Micro-soft public documentos con estnda-res de codificacin y buenas prcticasde programacin, con el objetivo deque todos los programadores escribie-ran cdigo de la misma manera. Exis-te un programa llamado FxCop, dispo-

    nible en www.gotdotnet.com/Team/FxCop/. Este programa analiza en-samblados ya compilados de .Net y ge-nera una lista con las violaciones a losestndares definidos por Microsoft.Actualmente, FxCop fue incorporadoen algunas ediciones de Visual Studio.

    03_IntrodProg.qxd 23/7/07 20:41 Page 48

  • 49

    ARREGLOS Y MATRICES

    guir con lpiz y papel cada uno de los pasos del algoritmo, verificando el resultadoobtenido (esto se conoce como Prueba de Escritorio).

    Matrices en .NetLa definicin de matrices en los lenguajes de .Net que estamos estudiando resul-

    ta muy similar a la definicin de arreglos, con el agregado de la segunda dimensin.

    // C# - Defino una matriz de 2 filas y 3 columnas

    int[,] matriz = new int[2,3];

    matriz [0,1] = 1;

    matriz [0,2] = 20;

    VB.Net Defino una matriz de 2 filas y 3 columnas

    Dim matriz (2,3) as Integer

    matriz (0,1) = 1

    matriz (0,2) = 2

    En C#, existe una forma alternativa de definir las matrices, basada en la idea deuna matriz como un arreglo de arreglos:

    // C# - Defino una matriz de 2 filas y 3 columnas

    int[][] mat = new int[2][]{new int[3],new int[3]};

    mat [0][1] = 1;

    mat [0][2] = 20;

    MS ALL DE LAS DOS DIMENSIONES

    Como vimos, una matriz es un arre-glo de arreglos, lo cual puede versecomo un arreglo de dos dimensio-nes. Los lenguajes de programacinpermiten definir arreglos con la can-tidad de dimensiones que necesite-mos. Por ejemplo, si necesitamos

    almacenar los registros de lluvia decada mes, de los ltimos 20 aos pa-ra 10 ciudades distintas, podemosdefinir un arreglo de 10x20x12 (10ciudades por 20 aos por 12 mesesal ao). En este caso, la estructurase conoce como Cubo.

    03_IntrodProg.qxd 23/7/07 20:41 Page 49

  • 50

    ELEMENTOS DE PROGRAMACIN

    EL ESTILO DE PROGRAMACIN> Una de las premisas fundamentales de la programacin consiste en saber quelos programas no se escriben una vez y quedan as para siempre. Cuando se escri-be un programa, es normal tener que volver sobre sus instrucciones para hacer unamodificacin o corregir un error. Y es comn que la persona que deba modificarel programa no sea la misma que lo escribi. Sin embargo, dada la complejidadinherente a todo programa, leer el cdigo fuente ya escrito y tratar de entenderlopara hacer la modificacin que necesitamos, puede ser toda una odisea.

    Para que la tarea de mantenimiento del software sea un poco ms sencilla, esnecesario que, como programadores, tengamos el hbito de escribir el cdigo dela manera ms prolija posible y que logremos un estilo estndar. Para lograr unbuen estilo de programacin, debemos tener en cuenta algunos consejos.

    TABULACIONESLas sentencias compuestas pueden estar formadas a su vez por otras senten-

    cias compuestas, as se obtienen anidamientos en el cdigo del programa. Parapoder identificar dnde comienza y dnde termina cada nivel de anidamiento,es muy til tabular hacia la derecha cada sentencia que est dentro de otra (esdecir, cada nuevo nivel de anidamiento). Veamos la diferencia entre tabular yno tabular con un ejemplo:

    ARREGLOS

    Visual Basic .Net permite cambiar eltamao de los arreglos. Para ello, pro-vee la palabra clave Redim. Hay quetener en cuenta, sin embargo, que elRedim destruye el arreglo original ycrea uno nuevo, con la consiguienteprdida de los valores que contena.Para evitarlo, se puede utilizar RedimPreserve, que luego de crear el arre-glo, copia los elementos del viejo.

    MODULARIZACIN Y OVERLAYSEn pocas en que la memoria de lascomputadoras era escasa, muchasveces cargar todo el programa eraimposible. La solucin consista encolocar los mdulos en archivos se-parados llamados overlays. Cuandose necesitaba ejecutar un mduloque estaba en un overlay, se descar-gaba otro de memoria y se cargaba elque tena el mdulo necesario.

    03_IntrodProg.qxd 23/7/07 20:41 Page 50

  • 51

    EL ESTILO DE PROGRAMACIN

    // C# - Forma incorrecta de anidar sentencias

    if(a>0) {

    for(int i=1;i

  • 52

    ELEMENTOS DE PROGRAMACIN

    Figura 6. El uso correcto de comentarios, nombres significativose indentacin favorecen la claridad del cdigo.

    COMENTARIOSMuchas veces, nos encontramos con que hemos escrito una expresin muy

    compleja. Al momento de escribirla, tenemos bien claro qu es lo que hace, por-que acabamos de idearla, pero luego de un tiempo, cuando volvemos a leerlapuede que no entendamos muy bien qu es lo que quisimos hacer. Para solucio-nar casos