Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar...

89
1

Transcript of Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar...

Page 1: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

1

Page 2: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

2

Page 3: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

3

Page 4: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

4

Page 5: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

5

Page 6: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

6

Las operaciones que debe realizar el hardware son especificadas con una lista de

instrucciones, llamadas programas, o software. El software se divide en dos grandes

grupos:

Software del sistema, y Software de aplicaciones.

•El software del sistema es el conjunto de programas indispensables para que la

máquina funcione. Estos programas son, básicamente, el Sistema Operativo, los editores

de texto, los compiladores de lenguajes de programación y los utilitarios.

•El sistema operativo dirige las operaciones globales de la computadora,

instruye a la computadora para ejecutar otros programas y controla el

almacenamiento y recuperación de archivos de discos duros. Gracias al sistema

operativo es posible que el programador pueda introducir y grabar nuevos

programas, así como instruir a la computadora para que los ejecute. Ejemplos de

sistemas operativos son: Microsoft Windows, MS-DOS, OS/2, Mac OS y UNIX.

•Los programas que realizan tareas concretas (por ejemplo facturación, contabilidad,

análisis estadístico, gestión de negocios, etc.) se denominan programas de aplicación.

Page 7: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

7

Los lenguajes utilizados para escribir programas de computadoras que puedan ser entendidos por ellas se

denominan Lenguajes de Programación. Éstos se clasifican en tres grandes categorías: máquina, bajo

nivel (ensamblador, o assembler) y alto nivel. Los lenguajes de máquina son aquellos cuyas instrucciones

son directamente entendibles por la computadora, y no necesitan traducción posterior para que el CPU

pueda comprender y ejecutar el programa. La programación en lenguaje de máquina es difícil, ya que

implica escribir directamente en un sistema binario (ceros y unos), por eso se necesitan lenguajes que

permitan simplificar ese proceso. Los lenguajes de bajo nivel fueron diseñados con ese fin. Éstos son

dependientes de la arquitectura física de la computadora y de un conjunto específico de instrucciones para

el CPU, y los programas escritos en ellos deben ser traducidos a lenguaje máquina para poder ser

ejecutados. Un lenguaje típico de bajo nivel es el lenguaje ensamblador (Assembler).

Page 8: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

8

Los lenguajes de programación de alto nivel son aquellos en los que las instrucciones o sentencias a la

computadora son escritas con palabras similares a los lenguajes humanos – en general lenguaje inglés – lo

que facilita la escritura y comprensión por parte del programador. Una propiedad de los lenguajes de alto

nivel es que son independientes de la máquina, esto es, las sentencias del programa no dependen del

diseño de hardware de una computadora específica. Los programas escritos en lenguajes de alto nivel, al

igual que los escritos en lenguajes de bajo nivel, no son entendibles directamente por la máquina, sino que

necesitan ser traducidos a instrucciones en lenguaje máquina que entiendan las computadoras. Los

programas que realizan esta traducción se llaman Compiladores, y los programas escritos en un lenguaje

de alto nivel se llaman Programas Fuente. El compilador traduce el Programa Fuente en un programa

llamado Programa Objeto. El proceso de traducción de un programa fuente a un programa objeto se

denomina Compilación.

Ejemplos de lenguajes de programación de alto nivel son: Basic, C, Pascal, C++, Cobol, Fortran, C#, Java

y Visual Basic.NET.

Existen diversos tipos de lenguajes de programación de alto nivel, según su evolución temporal y el uso

que se les quiera dar. Algunos ejemplos de tipos de lenguajes de alto nivel son:

-Estructurados (Basic, C, Pascal)

-Orientados a Objetos (C#,Visual Basic.NET, C++, Java)

-Declarativos (Lisp, Prolog)

-Funcionales (AML, CAML)

Page 9: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

9

El proceso de resolución de un problema con una computadora conduce a la escritura de un programa, y a su ejecución en la misma. Aunque el proceso de diseñar programas es, esencialmente, un proceso creativo, se pueden considerar una serie de fases o pasos comunes que generalmente deben seguir todos los programadores. Las fases de resolución de un problema con computadoras son:

-Análisis del problema

-Diseño del algoritmo solución

-Codificación

-Compilación y Ejecución

-Verificación

-Depuración

-Documentación

Las dos primeras fases conducen a un diseño detallado escrito en forma de algoritmo. Un algoritmo es un método para resolver un problema mediante una serie de pasos (instrucciones) precisos, definidos y finitos. Durante la tercer etapa (codificación) se implementa (poner en funcionamiento) el algoritmo en un código escrito en un lenguaje de programación, reflejando las ideas desarrolladas en la fase de análisis y diseño.

La fase de compilación y ejecución traduce y ejecuta el programa. En las fases de verificación y depuración el programador busca errores de las etapas anteriores y los elimina. Cuanto más tiempo se invierta en la fase de análisis y diseño, menor será el tiempo necesario para depurar el programa. Por último, debe realizarse la documentación del mismo.

Ejemplos de algoritmos son: instrucciones para andar en bicicleta, hacer una receta de cocina, obtener el máximo común divisor de dos números, etc. Los algoritmos se pueden expresar en fórmulas, diagramas de flujo y pseudocódigos.

Page 10: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

10

Un entorno de programación es un programa que contiene, además del compilador, utilitarios y herramientas. Estos elementos están integrados, de modo que pueden llamarse fácilmente unos a otros durante el proceso de programación. Por este motivo, a los entornos de programación frecuentemente se los identifica con la sigla IDE (en inglés, Integrated Development Envirnonment, o Entorno de programación integrado).

Un entorno de programación típico contiene:

-Un editor, que proporciona el medio para introducir el texto y los símbolos que constituyen el código fuente

-Un intérprete o un compilador, que convierte el código fuente en instrucciones que la computadora puede comprender y ejecutar.

-Un depurador (o debugger), que ayuda a analizar y corregir errores en tiempo de ejecución.

-Ayuda (manuales, tutoriales, ejemplos, etc.) integrada

El proceso de diseño, codificación, depuración y ejecución de un programa es mucho más fácil y rápido cuando se utiliza un buen entorno de programación.

Un ejemplo de entorno de programación es Microsoft Visual Studio 2005.

Page 11: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

11

Las diferencias piezas de información con las que un programa trabaja se conocen colectivamente como “datos”. Todos los datos tienen un “tipo” asociado con ellos, que determina la naturaleza del conjunto de valores que aquel puede tomar. Por ejemplo, un dato puede ser un simple caracter, tal como „B‟, un valor entero como 35, un número real como 1,4142 o una cadena de caracteres como “Hola Mundo”, entre otras cosas. Una operación de suma no tiene sentido con caracteres de texto, sólo con números. Por consiguiente, si el compilador detecta una operación de suma de dos caracteres normalmente producirá un error. Incluso entre tipos numéricos la operación de suma se almacena de modo distinto, ya que los números enteros y los reales se almacenan de formas distintas en memoria. A menos que el programa conozca los tipos de datos no puede ejecutar correctamente la operación de suma.

La asignación de tipos a los datos tiene dos objetivos principales:

1- Detectar errores de operaciones en los programas durante la fase de codificación.

2- Determinar cómo se ejecutarán las operaciones entre datos.

A los lenguajes que exigen que todos los datos utilizados deban tener sus tipos declarados explícitamente se los conoce como “fuertemente tipados”.

El tipo de un dato puede ser convertido bajo ciertas condiciones a otro tipo. Este mecanismo explícito de conversión de tipos de datos se suele denominar “CAST”.

Page 12: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

12

Todos los programas necesitan almacenar datos temporalmente para poder procesarlos y generar asi la salida esperada. Estos datos, a grandes rasgos, pueden clasificarse en dos grupos:

1 - A un dato cuyo valor no puede cambiar durante la ejecución de un programa se lo denomina Constante. Las constantes deben ser declaradas antes de su utilización y se deben tener un valor ya asignado al momento de la compilación del programa.

2 - Por su parte, los datos de un programa cuyo valor puede cambiar durante la ejecución del mismo se conocen como Variables. Una variable es, en realidad, una posición de memoria con nombre (Nombre de la Variable), y que contiene un valor (Valor de la Variable). Las variables se asemejan a cajas o buzones, donde cada una de las cuales tiene un número y contiene un valor. Existen tantos tipos de variables como tipos de datos diferentes.

Page 13: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

13

Las sentencias describen acciones algorítmicas que pueden ser ejecutadas. En general, las sentencias se clasifican en ejecutables (especifican, por ejemplo, operaciones de cálculos aritméticos y entradas/salidas de datos) y no ejecutables (no realizan acciones concretas ni afectan a la ejecución del programa, sino que ayudan a su legibilidad).

Cada sentencia ejecutable se traduce por el compilador en una o más instrucciones de lenguaje máquina, que se copian en el archivo objeto y posteriormente se ejecutan. Las declaraciones, por su parte, describen el propósito y el significado de cada identificador definido por el programador; no se traducen a instrucciones en lenguaje máquina y no aparecen en el archivo objeto.

Las sentencias se clasifican, según su tipo y número, en:

-Sentencias Simples: son sentencias que no contiene ninguna otra sentencia. El ejemplo más típico de sentencia simple es la sentencia de asignación, la cual se utiliza para almacenar un valor en una variable. La operación de asignación se suele representar en pseudocódigo con el símbolo „‟, para denotar que el valor situado a su derecha se almacena en la variable situada a la izquierda:

-Variable Valor

-En la mayoría de los lenguajes, el operador se sustituye por el “=”. Ej.: a = 2. (ATENCIÓN: la asignación sólo será válida si el valor es válido para el tipo de dato definido para la variable).

-Sentencias estructuradas: son sentencias compuestas de otras sentencias que se ejecutan en secuencia, condicionalmente o repetidamente.

Page 14: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

14

Las variables y constantes se pueden procesar utilizando operaciones y funciones adecuadas para sus tipos.

Se denomina expresión a un conjunto de variables y / o constantes unidas por operadores.

Si en una expresión existe más de una operación debe tenerse en cuenta que existen una serie de reglas para definir la prioridad en la que éstas se realizarán. Por este motivo es que se suelen utilizar los paréntesis para establecer la prioridad de aplicación de los operandos.

Page 15: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

15

Existen diversos tipos de operadores, por ejemplo:

-Aritméticos: son apropiados únicamente para tipos numéricos. Ejemplos de operadores aritméticos son “ + ”, “ - ”, “ * ” y “ / ”, los cuales permiten obtener el resultado de la suma, la resta, la multiplicación y la división de dos datos respectivamente.

-De relación: los operadores de relación ( o relacionales) se utilizan para expresar condiciones y describen una relación entre dos valores. Ejemplos de operadores relacionales son “ < ” (Menor que), “ >” (Mayor que), “ = ” (Igual a) y “ <> ” (Distinto a).

Los operadores aritméticos y los relacionales se utilizan de la siguiente forma: variable o constante operador variable o constante. Por ejemplo: a + b, c/d, a<b, c<>d, etc.

-Lógicos: estos operadores se utilizan con constantes lógicas de forma similar al modo en que los operadores aritméticos se utilizan con las constantes numéricas. Estos operadores trabajan con operandos que son expresiones lógicas. La operación and (y) combina dos condiciones simples y produce un resultado verdadero sólo si los dos operandos son verdaderos. La operación or (o) es verdadera si uno de los dos operandos es verdadero. La operación not (no) actúa sobre una sola condición simple u operando y simplemente niega (o invierte) su valor. Existen otros operadores lógicos además de los mencionados.

Page 16: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

16

El concepto de flujo de control a través de un programa se refiere al orden en que se ejecutan las acciones individuales de un programa. Aunque un flujo normal de un programa estructurado es lineal, existen métodos que permiten salir del flujo lineal a través del uso de las llamadas estructuras de control.

Las estructuras de control de un lenguaje de programación son métodos para especificar el orden en que las instrucciones de un algoritmo se ejecutarán. Estas estructuras son, por consiguiente, fundamentales en los lenguajes de programación y en los diseños de los algoritmos.

Existen dos tipos básicos de estructuras de control, que se explicarán a continuación:

-De Selección

-De Repetición o Iteración

Page 17: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

17

Con frecuencia nos enfrentamos a situaciones en las que se deben proporcionar instrucciones alternativas que pueden o no ejecutarse dependiendo de los datos de entrada, reflejando el cumplimiento o no de una determinada condición. La realización de acciones alternativas o decisiones se especifican utilizando condiciones que son verdaderas o falsas. Estas condiciones se llaman expresiones lógicas, o booleanas. Dado que las expresiones lógicas toman el valor verdadero o falso, se necesita una sentencia de control que dirija a la computadora a ejecutar una sentencia si la expresión es verdadera, y otra sentencia en caso de que sea falsa. En la mayoría de los lenguajes de programación de alto nivel esta evaluación se realiza mediante el uso de la estructura de control “if ”. En la figura podemos ver el pseudocódigo de la estructura if, que funciona de la siguiente manera:

1 – Se evalúa la expresión lógica

2 – Si la expresión toma el valor true (verdadero), se ejecutará la sentencia A y el control pasará a la sentencia inmediatamente siguiente.

3- Si la expresión toma el valor false (falso), entonces sólo se ejecutará la sentencia B y el control pasa de nuevo inmediatamente a la siguiente sentencia del programa. La cláusula sino es optativa.

Page 18: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

18

La sentencia Case se utiliza para elegir entre diferentes alternativas. Una sentencia case se compone de varias sentencias simples. Cuando case se ejecuta, una (y sólo una) de las sentencias simples se selecciona y ejecuta.

Reglas:

-La expresión selector se evalúa y se compara con las listas de constantes; las listas de constantes son listas de uno o más posibles valores de selector separados por comas. Sólo se ejecuta una sentencia.

-La cláusula sino es opcional, como en la sentencia if.

-Si el valor del selector no está comprendido en ninguna lista de constantes y no existe la cláusula sino, nada sucede y el programa sigue su flujo normal. Si el valor del selector no coincide con alguna constante se ejecutan las sentencias a continuación de la cláusula else.

-El selector debe ser un tipo ordinal (número entero, caracter, o booleano). Los números reales no pueden ser utilizados ya que no son ordinales.

-Todas las constantes Case deben ser únicas y de un tipo ordinal compatible con el tipo de selector.

Page 19: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

19

Las computadoras están especialmente preparadas para ejecutar tareas repetidamente. Los cálculos simples o la manipulación de pequeños conjuntos de datos se pueden realizar fácilmente a mano, pero las tareas grandes o repetitivas son realizadas con mayor eficiencia por una computadora. Las estructuras de control repetitivas son aquellas en las que una sentencia o grupos de sentencias se repiten muchas veces. Este conjunto de sentencias se denomina bucle, o loop. Las acciones que se repiten en un bucle constituyen el cuerpo del bucle, y cada repetición del cuerpo del bucle se denomina iteración.

Page 20: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

20

La estructura repetitiva while (mientras) es aquella en la que el número de iteraciones no se conoce por anticipado y el cuerpo del bucle se repite mientras se cumple una determinada condición. Por esta razón, a estos bucles se los conoce como bucles condicionales. Cuando la sentencia while se ejecuta, la primera cosa que sucede es la evaluación de la expresión lógica. Si se evalúa como falsa, ninguna acción se realiza y el programa sigue en la siguiente sentencia después del bucle. Si la expresión lógica se evalúa como verdadera, entonces se ejecuta el cuerpo del bucle y se evalúa de nuevo la expresión. Este proceso se repite mientras que la expresión lógica permanezca verdadera. Después de cada iteración la expresión lógica se evalúe y se verifica de nuevo; si cambia de verdadera a falsa la sentencia while finaliza. Mientras que la condición sea verdadera el bucle se ejecutará. Esto significa que el bucle se ejecutará indefinidamente a menos que algo en el interior del mismo modifique la condición haciendo que su valor pase a falso. Si la expresión nunca cambia de valor, entonces el bucle no termina nunca y se denomina bucle o loop infinito (en general, esta situación no es deseable).

Page 21: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

21

En numerosas ocasiones se puede necesitar un bucle que se ejecute un número determinado de veces, y cuyo número se conozca por anticipado. Para aplicaciones de este tipo se utiliza la sentencia for. Esta sentencia requiere que conozcamos por anticipado el número de veces que se ejecutarán las sentencias del interior del bucle. Si se desea que las sentencias controladas se ejecuten hasta que ocurra una determinada situación y no se conoce de antemano el número de repeticiones, entonces se deben utilizar sentencias del tipo while. Al ejecutarse la sentencia for la primera vez, el valor inicial se asigna a variable, denominada variable de control, y a continuación se ejecuta la sentencia del interior del bucle. Al llegar al final del bucle (fin_desde) se verifica si el valor final es mayor que el valor inicial; en caso negativo se incrementa el valor de la variable de control en una unidad y se vuelven a ejecutar todas las sentencias del interior del bucle hasta que la variable de control sea mayor que el valor final. Algunos lenguajes permite definir lo que se llama paso, que es la cantidad de unidades en las que se incrementará o decrementará la variable de control en cada iteración.

Page 22: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

22

Una estrategia para la resolución de problemas complejos con computadoras es la división o descomposición del problema en otros problemas más pequeños y fáciles de resolver. Estos subproblemas se implementan mediante módulos o subprogramas. Los subprogramas son una herramienta importante para el desarrollo de algoritmos y programas, de modo que normalmente un proyecto de programación se compone de un programa principal y un conjunto de subprogramas, con las llamadas a los mismos dentro del programa principal. Un subprograma realiza una tarea concreta que se describe con una serie de instrucciones y que, idealmente, debería ser independiente de otros subprogramas.

Los subprogramas de clasifican en procedimientos y funciones, que son unidades de programas diseñados para ejecutar una tarea específica.

Las funciones normalmente devuelven un solo valor a la unidad de programa (programa principal u otro subprograma) que los referencia. Los procedimientos pueden devolver cero, uno o varios valores.

Ambos están compuestos por un grupo de sentencias a las que se asigna un nombre (identificador) y constituyen una unidad de programa a la que se puede invocar desde el programa principal u otra función o procedimiento.

Page 23: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

23

Una de las características importantes y diferenciadoras de los subprogramas es la posibilidad de comunicación entre el programa principal y los procedimientos (o entre dos procedimientos). Esta comunicación se realiza a través de una lista de parámetros. Un parámetro es un medio para pasar información – valores a variables – del programa principal a un subprograma y viceversa. No es obligatorio que un subprograma utilice parámetros, ya que éstos no siempre son necesarios.

Un parámetro es, prácticamente, una variable cuyo valor debe ser o bien proporcionado por el programa principal al procedimiento o ser devuelto desde el procedimiento al programa principal. Por consiguiente, hay dos tipos de parámetros: parámetros de entrada y parámetros de salida. Los de entrada son aquellos cuyos valores deben ser proporcionados por el programa principal, mientras que los de salida son aquellos cuyos valores se calcularán en el procedimiento y se deben devolver al programa principal para su proceso posterior.

Page 24: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

24

En este ejemplo vemos la definición (declaración) de un procedimiento en pseudocódigo para calcular la suma de dos números enteros, los cuales son pasados al subprograma como parámetros de entrada. El procedimiento calcula la suma y la devuelve como un parámetro de salida.

Luego vemos como podemos utilizar el procedimiento invocándolo desde el programa principal u otro procedimiento. Nótese que los nombres de los parámetros en la definición (parámetro1 y parámetro2) no necesariamente tienen que ser los mismos que los utilizados en la invocación (a y b). Nótese también que el compilador chequeará previamente que el tipo de dato del parámetro de salida del procedimiento (en este caso un número entero) pueda ser asignado a la variable c según su tipo.

Al nombre del procedimiento junto con la lista ordenada de sus parámetros de entrada se la conoce como firma del procedimiento. En general, no puede haber dentro del mismo programa dos procedimientos con la misma firma.

Page 25: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

25

A primera vista, los procedimientos parecen dificultar la escritura de un programa. Sin embargo, no sólo no es así, sino que la organización de un programa en procedimientos lo hace más fácil de escribir y depurar. Las ventajas más sobresalientes de utilizar procedimientos son:

-El uso de procedimientos facilita el diseño descendente y modular, que permite descomponer un problema complejo en subproblemas hasta que éstos sean concretos y fáciles de resolver.

-Los procedimientos se pueden ejecutar más de una vez en un programa y en diferentes programas, ahorrando en consecuencia tiempo de programación. Un procedimiento, en esencia, se puede ver como una caja negra que ejecuta una tarea en particular en un programa, acepta entradas y produce ciertas salidas. Una vez que el procedimiento se ha escrito y comprobado, se puede utilizar en otros programas eliminando la duplicación innecesaria de código.

-El uso de procedimientos facilita la división de tareas de programación entre un equipo de programadores

-Los procedimientos pueden comprobarse individualmente y encapsularse en bibliotecas independientes.

Page 26: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

26

Las variables que intervienen en un programa con procedimientos pueden ser de dos tipos: variables locales y variables globales.

Una variable local es una variable que está declarada dentro de un subprograma, y se dice que es local al subprograma. Una variable local sólo está disponible durante el funcionamiento del mismo, y su valor se pierde una vez que el subprograma termina.

Las variables declaradas en el programa principal se denominan variables globales. A diferencia de las variables locales, cuyos valores se pueden utilizar solo dentro del subprograma en el que están declaradas, las variables globales pueden ser utilizadas en el programa principal y en todos los subprogramas.

Hay que tener especial precaución al trabajar con variables globales, ya que al ser recursos compartidos todos los subprogramas pueden tener acceso simultáneo a ellas y se pueden producir errores lógicos debidos a la concurrencia. Por lo general, es una buena práctica evitar el uso de variables globales desde subprogramas a menos que sea estrictamente necesario.

Las variables también pueden ser declaradas dentro de un bloque o estructura de control, y se comportarán como variables locales únicamente dentro de dicho bloque o estructura.

Page 27: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

27

En la mayoría de los lenguajes de programación de alto nivel es posible guardar un subprograma o un conjunto de subprogramas como un archivo independiente al cual se denomina genéricamente biblioteca (del inglés library). Las bibliotecas pueden luego ser referenciadas dentro de múltiples programas para que éstos puedan hacer uso de los subprogramas incluidos en aquella.

La salida del proceso de compilación de un código fuente se denomina Programa Objeto, que es ni más ni menos que el código de máquina generado a partir del código fuente (SIN INCLUIR EL CODIGO DE LAS BIBLIOTECAS UTILIZADAS). El Programa Objeto es luego utilizado como entrada para que otro componente de software, llamado linker, lo asocie con los subprogramas que se encuentran en las bibliotecas referenciadas y produzca el llamado Programa Ejecutable. Este proceso se conoce comúnmente como Link-Edición.

Page 28: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

28

Una estructura de datos es una colección de datos organizados de un modo particular. Las estructuras de datos pueden ser de dos tipos:

-Estructuras de datos estáticas: son aquellas en las que se asigna una cantidad fija de memoria cuando se declara la variable.

-Estructuras de datos dinámicas: son aquellas cuya ocupación de memoria puede aumentar o disminuir en tiempo de ejecución.

Un array (o arreglo) es una estructura de datos en la que se almacena una colección de datos del mismo tipo (por ejemplo, los sueldos de los empleados de una empresa). Dicho de otra forma, un array es una lista de un número finito n de elementos del mismo tipo que se caracteriza por:

-Almacenar sus elementos en posiciones de memoria contiguas

-Tener un único nombre de variable (por ejemplo salarios) que representa a todos los elementos

-Permitir acceso directo o aleatorio a sus elementos individuales

Los arrays se clasifican en unidimensionales y multidimensionales.

Page 29: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

29

Un array de una dimensión (también conocido como vector) es un tipo de datos estructurado compuesto de un número de elementos finitos, tamaño fijo y elementos homogéneos. Finitos indica que hay un último elemento, tamaño fijo significa que el tamaño del array debe ser conocido en tiempo de compilación y homogéneo significa que todos sus elementos son del mismo tipo.

Los elementos del array se almacenan en posiciones contiguas de memoria, a cada una de las cuales se puede acceder directamente mediante un número entero denominado índice del array, que identifica la posición del elemento dentro del conjunto.

-Ejemplo:

-Salarios Nombre del Array

-Salarios[1] primer elemento del array

Page 30: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

30

Hasta ahora hemos visto como se puede manipular información con una sola columna o lista de entrada con los llamados vectores, o arrays de una dimensión. Sin embargo, en numerosas ocasiones es necesario trabajar con datos que tengan más de una dimensión (se representan por ejemplo como tablas de doble entradas, cubos, etc.).

Un array bidimensional (matriz o tabla) es un array con dos índices. Para localizar o almacenar un valor en el array se deben especificar dos posiciones (dos subíndices), uno para la fila y otro para la columna.

Page 31: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

31

El buen estilo de programación es, sin lugar a dudas, una de las características más importantes que debe tener un buen programador. Un programa con buen estilo es más fácil de leer, de corregir y de mantener. Aunque la experiencia proporciona el estilo, existen una serie de reglas que se recomiendan seguir desde el principio del aprendizaje de la programación.

-Comentarios: la legibilidad de los programas aumenta considerablemente utilizando comentarios. Un comentario es un texto explicativo más o menos largo, situado en el programa e ignorado por el compilador. Los comentarios son considerados parte del código fuente por más que sean ignorados en las etapas de compilación y ejecución, y tienen importancia primordial en las fases de análisis, puesta a punto y mantenimiento. Los comentarios son una parte fundamental de la documentación de un programa, ya que ayudan al programador y a otras personas a la comprensión del mismo. No es raro encontrar programas en los cuales los comentarios ocupan más lugar, incluso, que las propias instrucciones.

-Elección de nombres significativos para variables y procedimientos: las variables, constantes, nombres de subprogramas y nombres de programas deben ser significativos para orientar al usuario o a otros programadores sobre lo que representan: X, AS, JJ no son identificadores significativos.

-Identación: aunque no suele ser requerido por los compiladores de los lenguajes de alto nivel, es una práctica habitual realizar una identación (o tabulación) en cada uno de los bloques y unidades de programas fundamentales para mejorar la legibilidad del código fuente. -Espacios y Líneas en Blanco: con el mismo fin de mejorar le legibilidad y comprensibilidad del programa es recomendado utilizar espacios en blanco antes y después de un operador, así como también dejar una línea en blanco entre partes importantes o que estén lógicamente separadas.

Page 32: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

-Validación: los programas no pueden considerarse correctos hasta que han sido validados utilizando un rango amplio de datos de prueba para contemplar todas las posibles direcciones que el flujo de control puede tomar en tiempo de ejecución.

31

Page 33: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

32

Page 34: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

33

A lo largo de la historia se han ido desarrollando distintos lenguajes de

programación basados en distintos paradigmas o formas de estructurar y pensar

el desarrollo de software. A principios de la década de 1980 comenzó a surgir el

llamado paradigma de “Orientación a Objetos”, que proponía una forma

novedosa de comprender y modelar el mundo que nos rodea. Hoy, luego de

varias décadas, este paradigma es sin duda uno de los principales y más

importantes en la escena del desarrollo de software.

Page 35: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

34

La programación orientada a objetos entiende a la actividad de desarrollar software

basados en el paradigma de orientación a objetos. Dentro de este paradigma, la

programación es adquisición de conocimiento de la realidad que queremos modelar, en

pos de construir un modelo computacional de la misma. Asociamos entonces a entes de

la realidad, objetos del mundo computacional con el objetivo de construir un modelo de

simulación de la misma.

La programación orientada a objetos implica entre otros beneficios, gran capacidad de

reuso. Dado que en la realidad resolvemos problemas a través de que los diferentes

entes de la misma colaboren, una vez que hemos encontrado un mecanismo para

resolver un problema, utilizamos éste para alcanzar el mismo resultado existoso una y

otra vez. Dado que nuestro modelo computacional es una simulación de esta realidad, el

reuso se presenta en ambos sentidos.

El concepto de programación orientada a objetos (OOP) no es nuevo, lenguajes clásicos

como SmallTalk se basan en ella. Dado que la OOP. se basa en la idea natural de la

existencia de un mundo lleno de objetos y que la resolución del problema se realiza en

términos de objetos, un lenguaje se dice que es orientado a objetos, si los elementos

esenciales de construcción del software son objetos y mensajes.

Page 36: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

Podemos definir un objeto como un conjunto complejo de datos y programas que poseen

estructura y forman parte de una organización.

Esta definición especifica varias propiedades importantes de los objetos. En primer

lugar, un objeto no es un dato simple, sino que contiene en su interior cierto número de

componentes bién estructurados. En segundo lugar, cada objeto no es un ente aislado,

sino que forma parte de una organización jerárquica o de otro tipo.

34

Page 37: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

35

En la actualidad, el paradigma de orientación a objetos es sin lugar a dudas el más

utilizado por las empresas de todo el mundo a la hora de encarar desarrollos de

aplicaciones de software, ya que permite representar de manera relativamente simple

modelos y realidades muy complejas y esto hace que el software sea más fácil de

programar, comprender y mantener. Por otra parte, luego de más de 20 años de

investigación y desarrollo sobre Orientación a Objetos pareciera ser que la industria se

ha dado cuenta que el paradigma está lo suficientemente maduro como para dar soporte

a las aplicaciones más importantes del mundo actual.

Page 38: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

36

Page 39: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

37

Page 40: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

38

Page 41: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

39

Page 42: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

40

Pensar en términos de objetos es muy parecido a cómo se hace en la vida real. Por

ejemplo, pensar en un coche para tratar de construir un modelo orientado a objetos. Se

diría que el coche es el elemento principal que tiene una serie de características, como

podrían ser el color, el modelo o la marca. Además tiene una serie de funcionalidades

asociadas, como pueden ser ponerse en marcha, parar o estacionar.

En un esquema POO el coche sería el objeto, las propiedades serían las características

como el color o el modelo y los métodos serían las funcionalidades asociadas como

ponerse en marcha o parar.

Los programas Orientados a objetos utilizan muchos objetos para realizar las acciones

que se desean realizar y ellos mismos también son objetos. Es decir, el taller de coches

será un objeto que utilizará objetos coche, herramienta, mecánico, recambios, etc.

Page 43: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

41

Page 44: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

42

Según las definiciones formales de James Rumbaugh y Grady Booch (dos de las

principales autoridades de la orientación a objetos en la actualidad, y coautores de

UML, el lenguaje de modelado universal para objetos), un objeto es una abstracción de

la realidad que tiene un significado concreto y claro para el problema que se está

modelando. Un ejemplo de una entidad física representada como un objeto conceptual

puede ser “Un Auto”.

Ahora bien, todos los objetos tienen 3 características principales:

-Estado: representa la definición de atributos internos del objeto, sus características. Por

ejemplo, un auto tiene un cierto número de puertas, un cierto número de ruedas, un

volante, un motor, pedales, etc.

-Comportamiento: representa la definición del comportamiento del objeto, las acciones

que éste puede realizar. Por ejemplo, un auto puede “arrancar”, “frenar”, “doblar”,

“acelerar”, etc.

-Identidad: Cada objeto tiene una identidad única, incluso si su estado es idéntico al de

otro objeto

Page 45: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

43

Page 46: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

44

Page 47: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

45

El concepto de identidad se refiere al hecho de que cada objeto es único en el

mundo, por más que su conjunto de atributos y sus valores sean exactamente

iguales a los de otros objetos. Por ejemplo, dos autos del mismo modelo, color,

motor, salidos de la misma línea de producción el mismo día no dejan de ser dos

autos diferentes, por más que su conjunto de atributos y sus valores sean iguales.

La única posibilidad de que dos objetos sean iguales es que sean el mismo

objeto.

Page 48: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

46

Las clases son declaraciones de objetos, también se podrían definir como abstracciones

de objetos. Esto quiere decir que la definición de un objeto es la clase. Cuando

programamos un objeto y definimos sus características y funcionalidades en realidad lo

que estamos haciendo es programar una clase.

La clasificación se basa en un comportamiento y atributos comunes. Permite crear un

vocabulario estandarizado para comunicarse y pensar dentro del equipo de trabajo.

Page 49: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

47

Una clase es una construcción estática que describe un comportamiento común y

atributos (que toman distintos estados). Su formalización es a través de una estructura

de datos que incluye datos y funciones, llamadas métodos. Los métodos son los que

definen el comportamiento.

Page 50: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

48

Toda clase tiene, de manera implícita o explicita, dos métodos. El constructor y el

destructor.

El constructor es llamado cuado la clase comienza a ocupar un lugar en memoria, es

decir, cuando comienza a ser utilizada, al ser instanciada. Se encarga de inicializar

valores, e incluso muchas veces de llamar a otros constructores de otras clases.

El destructor es un método que se llama al finalizar la vida de la instancia de la clase,

para liberar recursos.

Cualquiera de los dos métodos tienen que formar parte de las clases, existen

constructores y destructores por defecto, para las clases mas simples. En clases mas

complejas, el desarrollador deberá implementar estos métodos. Muchas veces, los

constructores reciben parámetros con los valores con los que la clase debe inicializarse.

Las llamadas a constructores y destructores pueden ser implícitas o explicitas,

dependiendo de la clase, la aplicación, etc.

Page 51: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

49

Page 52: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

50

Page 53: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

51

La abstracción de datos permite no preocuparse de los detalles no esenciales. Existe en

casi todos los lenguajes de programación. Las estructuras de datos y los tipos de datos

son un ejemplo de abstracción. Los procedimientos y funciones son otro ejemplo.

Es la capacidad de un objeto de cumplir sus funciones independientemente del contexto

en el que se lo utilice; o sea, un objeto “cliente” siempre expondrá sus mismas

propiedades y dará los mismos resultados a través de sus eventos, sin importar el ámbito

en el cual se lo haya creado. Es poder generalizar un objeto como tipo de dato, con sus

características y comportamientos comunes.

Page 54: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

52

Otro de los pilares de la orientación a objetos es el encapsulamiento. Para entender este

principio veamos un ejemplo práctico:

Como todos ustedes se imaginarán, no es necesario ser mecánico de automóviles para

poder manejar uno. Si el comprender cómo es el funcionamiento interno del motor, la

dirección, los frenos, los cilindros, etc. fuera requisito para poder manejar un automóvil,

serían muchos menos los conductores certificados y sería mucho más difícil aprender a

manejar. Es más, si a cualquier automotriz se le ocurriera cambiar el funcionamiento

interno de alguna de estas cosas, probablemente todos los conductores tendrían que

volver a aprender como funciona el nuevo componente interno para poder seguir

manejando sin problemas. Por suerte esto no es así, ya que la complejidad interna del

funcionamiento de un automóvil está escondida de los conductores (usuarios). Para

poder interactuar con el automóvil, éste nos expone una interfaz sencilla y definida, que

no cambia nunca por más que cambien internamente el funcionamiento de sus

componentes. Esta interfaz está compuesta por el volante, los pedales, la palanca de

cambios, el asiento, etc. De esta forma decimos que el automóvil ha encapsulado su

complejidad interna.

Page 55: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

53

Esta característica es la que denota la capacidad del objeto de responder a peticiones a

través de sus métodos sin la necesidad de exponer los medios utilizados para llegar a

brindar estos resultados. O sea, el método Acelerar() del objeto “auto”, siempre

aumentará la velocidad, sin necesidad de tener conocimiento de cuáles son los recursos

que ejecuta para llegar a brindar este resultado.

Page 56: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

54

Los objetos deben comunicarse solo a través de su protocolo de modo que la

responsabilidad en administrar tanto el comportamiento como el respetar los invariantes

de clase sea solo del objeto que implementa dicho comportamiento. Esto además es una

condición necesaria para permitir el polimorfismo.

La utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que

las Clases se ven como cajas negras donde sólo se conoce el comportamiento pero no

los detalles internos, y esto es conveniente porque solo interesará conocer qué hace la

Clase pero no será necesario saber cómo lo hace.

Page 57: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

55

El encapsulamiento también es llamado “ocultamiento de la información”, esto asegura

que los objetos no pueden cambiar el estado interno de otros objetos de maneras

inesperadas; solamente los propios métodos internos del objeto pueden acceder a su

estado. Cada tipo de objeto expone una interfaz a otros objetos que especifica cómo

otros objetos pueden interactuar con él. Algunos lenguajes permiten un acceso directo a

los datos internos del objeto de una manera controlada y limitando el grado de

abstracción.

Page 58: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

56

La clase auto define una serie de atributos: Color, Color2, Instrumental, Asientos, etc.

Cada una de las instancias de esa clase, toma valores diferentes.

Page 59: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

57

Hay ciertos atributos que pueden ser comunes a todas las instancias de una clase, son

definidos como estáticos.

Page 60: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

58

Los métodos estáticos definidos en una clase, pueden ser invocados sin necesidad de

instanciar la clase. Solo accederán a datos estáticos. El llamar a métodos estáticos

generalmente resulta cómodo, sobre todo en tareas de inicialización de las clases, por

ejemplo.

Page 61: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

59

Page 62: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

60

La herencia es uno de los conceptos más cruciales en la POO. La herencia básicamente

consiste en que una clase puede heredar sus variables y métodos a varias subclases (la

clase que hereda es llamada superclase o clase padre). Esto significa que una subclase,

aparte de los atributos y métodos propios, tiene incorporados los atributos y métodos

heredados de la superclase. De esta manera se crea una jerarquía de herencia.

Relación “es un” significa que la clase hija (o heredera), es, además, lo mismo que su

padre. Es decir, un auto “es un” transporte, un caballo “es un” animal, etc.

Estos pueden compartir (y extender) su comportamiento sin tener que reimplementar su

comportamiento. Esto suele hacerse habitualmente agrupando los objetos en clases y las

clases en árboles o enrejados que reflejan un comportamiento común.

Page 63: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

61

Page 64: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

62

Page 65: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

63

Page 66: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

64

Vimos que cada vez que un objeto debe resolver un problema lo hace a través de

colaborar con objetos que cumplen el rol de servidores.

Estos servicios son brindados a través del protocolo que el objeto exporta. El protocolo

está definido en términos de mensajes compuestos de la “signatura” y el conjunto de

objetos argumento que el mismo recibe. El objeto que recibe un mensaje resuelve el

problema a partir de ejecutar un método.

Cuando los lenguajes orientados a objetos son fuertemente tipados, esto es que se

especifica el tipo de argumento de entrada y salida de los objetos en forma implicita o

explicita, podemos decidir para cada conjunto de tipos de argumento (o cantidad de

argumentos) de entrada un método diferente que resuelve dicho mensaje, el compilador

decide cual mpetodo aplica en funcion de esta información de tipos sobre los

argumentos. A esto se lo conoce como sobrecarga.

Cuando el objeto cliente desconoce la clase concreta asociada al objeto servidor,

permitiendonos intercambiar diferentes servidores que aplican diferentes métodos para

resolver un problema, estamos en presencia de polimorfismo.

Como ejemplos de sobrecarga estamos habituados a que el operador <<suma>> esté

presente en todos los lenguajes de programación. Sin embargo, los operadores <<suma

Page 67: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

de fracciones>> y <<suma de números complejos>> no existen en casi ningún

lenguaje de programación.

Los lenguajes OOP permiten definir un operador <<suma>> tal que reconozca que tipo

de objeto se le está aplicando, a través de operaciones de objetos. Previamente deberá

definir la fracción y el número complejo como una clase y la operación suma como una

operación de una clase.

Definiendo adecuadamente las operaciones suma de fracciones y suma de números

imaginarios, el operador suma devolverá, en el caso que los operandos sean fracciones,

una fracción y , en el caso de los números imaginarios, otros número imaginario.

64

Page 68: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

65

El término de polimorfismo también define la capacidad de que más de un objeto

puedan crearse usando la misma clase de base para lograr dos conceptos de objetos

diferentes, en este caso podemos citar el típico ejemplo de los teléfonos, los cuales se

basan en un teléfono base, con la capacidad de hacer ring y tener un auricular, para

luego obtener un teléfono digital, inalámbrico, con botonera de marcado y también,

tomando la misma base, construir un teléfono analógico y con disco de marcado.

Si en el momento de la compilación de un programa se conoce la clase concreta del

objeto que se usará, las llamadas a sus métodos quedarán fijadas mediante lo que se

conoce como "enlace estático o temprano" (early binding), si no, habrá de determinarse

la llamada adecuada en tiempo de ejecución, efectuándose entonces un "enlace

dinámico o tardío" (late binding).

Page 69: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

66

Los métodos abstractos son declarados pero no implementados. Si existe un método

abstracto entonces debemos declarar la clase como abstracta, y al declararla como tal no

se pueden crear instancias de ella. Sirven para definir conceptos incompletos, que deben

ser completados en las subclases de la clase abstracta. En el ejemplo, la clase transporte

no puede ser instanciada, salvo desde alguna clase heredera, que implemente los

métodos acelerar y frenar.

Page 70: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

67

Page 71: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

68

Page 72: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

69

Un framework, según su traducción literal es un marco de trabajo. Este marco de

trabajo, ofrece a quien lo utiliza, una serie de herramientas para facilitarle la realización

de determinada tarea.

Un framework puede estar compuesto por librerías de clases, documentación y ayuda,

ejemplos, tutoriales e incluso foros de discusión. Es posible que se utilicen varios

frameworks a la vez, o incluso que algunos sean soporte de otros.

Page 73: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

70

.NET Framework es un componente Windows que soporta el desarrollo y ejecucion de

aplicaciones Windows y Web Services. El propósito de este componente es proveer al

usuario con un entorno de programación orientada a objetos consistente, donde el

código pueda estar almacenado localmente o de manera remota.

Intenta minimizar los conflictos con el deploy y versionado de software y promueve la

ejecución de código segura. El esfuerzo es hacer que la experiencia del desarrollador

sea consistente entre una gran variedad de aplicaciones y plataformas y crear una

comunicación estándar 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

E

The CLR is the foundation upon which the .NET Framework has been built. The

runtime manages code at execution time and provides all the core services such as

memory management, thread management and remoting. It also enforces strict type

Page 74: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

safety and ensures code accuracy in order to provide security and robustness to the

applications. This capability to manage code at runtime is the distinguishing feature of

the CLR. All code that is managed by the CLR is known as managed code while other

codes are known as unmanaged code.

70

Page 75: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

71

El .NET Framework 2.0

El .NET Framework provee las herramientas necesarias en run-time y compile-time

para construir y ejecutar aplicaciones basadas en .NET

Plataforma

.NET Framework debe ejecutarse sobre un Sistema Operativo.

Application Services

El .NET Framework expone servicios de aplicaciones a través de clases de la .NET

Framework Classs Library.

Common Language Runtime 2.0

La Common Language Runtime simplifica el desarrollo de aplicaciones, provee un

entorno de ejecución robusto y seguro, soporta varios lenguajes y simplifica el

Page 76: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

despliegue y la administración. La CLR es un entorno administrado (managed), en el

cual los servicios comunes, como garbage collection y seguridad, son provistos

automáticamente.

.NET Framework Class Library 2.0

La librería de clases de .NET Framework expone características en tiempo de ejecución

y provee otros servicios útiles para todos los desarrolladores. Las clases simplifican el

desarrollo basado en .NET. Los desarrolladores pueden extenderlas creando sus propias

librerías de clases. Las librerías de clases base implementan el .NET Framework. Todas

las aplicaciones (web, windows, web services) acceden a las mismas clases base. Estas

están almacenadas en namespaces. Los diferentes lenguajes acceden a las mismas

librerías.

ADO.NET 2.0

ADO.NET provee soporte para modelos de programación desconectada. Además

proveen soporte para XML enriquecido.

ASP.NET 2.0

Microsoft ASP.NET es un framework de programación que está montado sobre la CLR.

ASP.NET puede ser utilizado sobre un servidor para construir poderosas aplicaciones

web. ASP.NET Web Forms provee un poderoso y sencillo método para construir

Interfaces de usuario (UI) dinámicas.

XML Web Services

Componentes Web programables que pueden ser compartidos entre aplicaciones, sobre

Internet o una intranet. El .NET Framework provee herramientas y clases para

desarrollo, testeo y distribución de XML Web Services.

User Interfaces

El .NET Framework soporta tres tipos de Interfaces de usuario: Web Forms, Windows

Forms, Aplicaciones de Consola.

71

Page 77: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

Lenguajes

Cualquier lenguaje que sea acorde a la Common Language Specification (CLS) puede

ejecutarse sobre la CLR. En .NET Framework, Microsoft provee Visual Basic, Visual

C++, Visual C#, Visual J#. Terceros pueden proveer nuevos lenguajes.

71

Page 78: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

72

El .NET Framework resuelve la comunicación entre distintas aplicaciones, permite la

reusabilidad de módulos, brinda la posibilidad a los desarrolladores de utilizar el

lenguaje en el que mas cómodos se sienten.

Page 79: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

73

Page 80: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

74

La Common Language Runtime es el corazón del .NET Framework. Los compiladores

y herramientas exponen funcionalidad en tiempo de ejecución y permiten escribir

código con el beneficio de un entorno de ejecución administrado. El código que se

desarrolla con un compilador de lenguaje que trabaja con el runtime se llama código

administrado (managed code). Esto permite beneficios como integración y manejo de

excepciones entre distintos lenguajes, seguridad mejorada, versionamiento y soporte

para despliegue. Además de un modelo simplificado para interacción de componentes y

servicios de debugging y profiling.

Para permitir al runtime proveer servicios al código administrado, los compiladores

deben emitir metadata (información adicional) que describe tipos, miembros y

referencias en el código. La metadata se almacena con el código. 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 métodos, generar

código nativo, mejorar la seguridad y definir las fronteras del contexto de ejecución.

CLR administra la memoria utilizada por las aplicaciones, evitando perdidas de

memoria que podrían estar originadas por errores en el código escrito. El entorno de

ejecución brinda además un entorno de ejecución que permitirá y administrará la

conversión de tipos de los valores con los que operan las aplicaciones, la inicialización

de las variables, el control de overflows, etc.

Page 81: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

Permite además que convivan diferentes versiones de una misma dll, sin que se generen

conflictos.

74

Page 82: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

75

La common language runtime simplifica el desarrollo de aplicaciones, brindando un entorno de ejecución seguro y robusto, con soporte para múltiples lenguajes, tal como se detalló en diapositivas anteriores. Este entorno se conoce generalmente como entorno administrado o managed environment, en el cual son provistos automáticamente los servicios comunes, como garbage collection y securuty.

A continuación se realiza una breve reseña de cada uno de los componentes que serán analizados mas en detalle a continuación.

Class loader

Administra metadata (información provista con los archivos, analizada mas adelante), carga y disponibilidad de las clases.

Microsoft intermediate language (MSIL) to native compiler

Convierte MSIL a código nativo (JIT)

Code manager

Administra la ejecución de código.

Garbage collector (GC)

Provee la administración automática del ciclo de vida de todos los objetos.

Security engine

Provee la seguridad basada en el origen de código y en el usuario que lo ejecuta.

Debug engine

Permite realizar el debug de la aplicación a partir de un trazado del código que esta siendo ejecutado.

Page 83: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

Type checker

Evita que se realicen casteos inseguros o se utilicen variables no inicializadas.

Exception manager

Provee una estructura de manejo de excepciones, la cual se integra con Windows Structured Exception Handling.

Thread support

Provee clases e interfaces para trabajar con programación multihilos.

COM marshaler

Provee interoperabilidad entre .NET y COM

Base Class Library (BCL) support

Integra el código con el runtime que soporta BCL

75

Page 84: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

76

CTS define como la forma en la que los tipos deben ser declarados, utilizados y administrados en el runtime. Además es una parte del runtime para el soporte en la integración de varios lenguajes.

El sistema de tipos comunes realiza las siguientes funciones:

-Establecer un framework para soporte de integración de múltiples lenguajes, seguridad de tipos y alta performance en la ejecución de código.

-Provee un modelo orientado a objetos que soporta la implementación de varios lenguajes de programación.

-Define las reglas que debe seguir un lenguaje, lo que asegura que distintos lenguajes puedan interactuar sin problemas.

Clasificación de tipos

CTS soporta dos categorías generales de tipos, cada una de las cuales se divide en subcategorías:

Value types: Directamente contienen sus datos. Las instancias de los value types son alocadas en la stack o de manera inline en una estructura. Pueden ser incorporados (implementados por el runtime), definidos por el usuario o enumeraciones.

Reference types: almacenan una referencia a una dirección de memoria con un valor, y son alocados en la heap. Los Reference types pueden tipos auto-descriptivos, punteros, o interfaces.

Todos los tipos derivan de System.Object, que es el tipo base.

Page 85: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

77

Cuando se compila código soportado en .NET Framework, el compilador convierte el

código fuente en Lengua intermedio de Microsoft (MSIL), que es un conjunto de

instrucciones independiente de la CPU que se pueden convertir de forma eficaz en

código nativo.

MSIL incluye instrucciones para cargar, almacenar, inicializar y llamar a métodos en los

objetos, así como instrucciones para operaciones lógicas y aritméticas, flujo de control,

acceso directo a la memoria, control de excepciones y otras operaciones.

Antes de poder ejecutar código, se debe convertir MSIL al código específico 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, también genera información adicional sobre el

código. Esta información describe los tipos que aparecen en el código, incluidas las

definiciones de los tipos, las firmas de los miembros de tipos, los miembros a los que se

Page 86: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

hace referencia en el código y otros datos que el motor de tiempo de ejecución utiliza en

tiempo de ejecución.

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 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

código MSIL o código nativo así como metadata, permite al sistema operativo reconocer

imágenes de Common Language Runtime.

La presencia de metadatos junto con el Lenguaje intermedio de Microsoft (MSIL)

permite crear códigos autodescriptivos, con lo cual las bibliotecas de tipos y el Lenguaje

de definición de interfaces (IDL) son innecesarios.

El motor de tiempo de ejecución localiza y extrae los metadatos del archivo cuando son

necesarios durante la ejecución.

77

Page 87: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

78

Page 88: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

79

Page 89: Blog Julián Enrique Cely Cárdenas | Otro sitio más de ... · Las operaciones que debe realizar el hardware son especificadas con una lista de instrucciones, llamadas programas,

80