martes, 26 de marzo de 2013

UNIDAD 2 - 4TO. AÑO


UNIDAD 2
VARIABLES Y CONSTANTES

 CONSTANTES
Una constante es un dato cuyo valor no puede cambiar durante la ejecución del programa. Recibe un valor en el momento de la compilación y este permanece inalterado durante todo el programa.
Las constantes se declaran en una sección que comienza con la palabra reservada const. Después de declarar una constante ya se puede en el cuerpo principal del programa. Tienen varios usos: ser miembro en una expresión, en una comparación, asignar su valor a una variable, etc.
const
Pi = 3.141592;
Min = 0;
Max = 99;
Saludo = 'Hola';

VARIABLES

Una variable es un espacio e memoria al que se le pone un nombre, y su valor puede cambiar durante la ejecución de un programa.
Toda variable pertenece a un tipo de dato concreto. En la declaración de una variable se debe indicar el tipo al que pertenece. Así tendremos variables enteras, reales, booleanas, etc. Por otro lado, distinguimos tres partes fundamentales en la vida de una variable:
  • Declaración
  • Iniciación
  • Utilización
Declaración de variables


Esta es la primera fase en la vida de cualquier variable. La declaración se realiza en la sección que comienza con la palabra var.
Nota: Toda variable que vaya a ser utilizada en Pascal tiene que ser previamente declarada.
Iniciación de variables


Esto no es más que darle un valor inicial a una variable. Así como lo primero que se hace con una variable es declararla, lo siguiente tiene que ser iniciarla. Esto se hace para evitar posibles errores en tiempo de ejecución, pues una variable tiene un valor indeterminado después de declararla. Principalmente, existen dos maneras de otorgar valores iniciales a variables:
  • Mediante una sentencia de asignación
  • Mediante uno de los procedimientos de entrada de datos (read o readln)
Veamos un ejemplo que reúne los dos casos: 
   begin
      ...
     i:=1;
     readln(n);
     while i < n do begin
        (* cuerpo del bucle *)
        i := i + 1
     end;
      ...
   end.
         

Utilización de variables


Una vez declarada e iniciada una variable, es el momento de utilizarla. Esta es la parte que presenta un mayor abanico de posibilidades que iremos viendo a lo largo del curso.

DIFERENCIAS ENTRE AMBAS

Después de haber visto cada una por separado, pasemos a explicar las diferencias que existen entre constantes y variables. A primera vista pudieran parecer conceptos similares, pero realmente son cosas muy distintas. Y esta distinción viene dada por la posibilidad que tienen las variables para cambiar de valor.
Principales diferencias:
  • Las constantes ya reciben un valor inicial en su declaración
  • Las variables primero se declaran, luego se inician, y luego se usan
  • Las constantes, una vez declaradas mantienen su valor durante toda la ejecución del programa
  • En cambio, las variables pueden cambiar su valor tantas veces como deseen

INTRODUCCIÓN A LOS TIPOS DE DATOS

El tipo de un dato es el conjunto de valores que puede tomar durante el programa. Si se le intenta dar un valor fuera del conjunto se producirá un error.
La asignación de tipos a los datos tiene dos objetivos principales:
  • Por un lado, detectar errores en las operaciones
  • Por el otro, determinar cómo ejecutar estas operaciones
De Pascal se dice que es un lenguaje fuertemente tipeado. Esto quiere decir que todos los datos deben tener un tipo declarado explícitamente, y además que existen ciertas restricciones en las expresiones en cuanto a los tipos de datos que en ellas intervienen.
Una ventaja de los lenguajes fuertemente tipeados es que se gasta mucho menos esfuerzo en depurar (corregir) los programas gracias a la gran cantidad de errores que detecta el compilador.
Los tipos de datos, como casi todos los objetos de Pascal, se pueden declarar. La declaración de tipos ya se comentó en la unidad anterior.

CLASIFICACIONES EN LOS TIPOS DE DATOS

En Pascal existen gran variedad y cantidad de tipos de datos. Pero en este curso sólo se trataran los básicos para que puedas ir construyendo tus primeros programas.
Existen muchas clasificaciones para los tipos de datos, y dependiendo de la fuente que mires, te mostrarán una u otra. A continuación tienes una de las posibles clasificaciones:
Tipos simples

Como su nombre indica son los tipos básicos en Pascal. Son los más sencillos y los más fáciles de aprender. Por todo esto, serán en los que nos centremos.

Los tipos simples más básicos son: entero, lógico, carácter y real. Y la mayoría de los lenguajes de programación los soportan, no como ocurre con los estructurados que pueden variar de un lenguaje a otro.
Tipos estructurados

Mientras que una variable de un tipo simple sólo referencia a un elemento, los estructurados se refieren a colecciones de elementos.

Las colecciones de elementos que aparecen al hablar de tipos estructurados son muy variadas: tenemos colecciones ordenadas que se representan mediante el tipo array (vector), colecciones sin orden mediante el tipo conjunto, e incluso colecciones que contienen otros tipos, son los llamados registros.

LOS TIPOS BÁSICOS QUE NOS INTERESAN

Después de ver una de las posibles clasificaciones para los tipos de datos, pasemos a ver los que nos interesan: los tipos simples. Realmente de los tipos simples veremos los más básicos, que son: integer, boolean, char y real. Además, también hablaremos un poco de las cadenas de caracteres, los llamados strings.
El tipo integer (entero)


Como ya habrás leído el tipo de datos entero es un tipo simple, y dentro de estos, es ordinal. Al declarar una variable de tipo entero, estás creando una variable numérica que puede tomar valores positivos o negativos, y sin parte decimal.

El tipo boolean (lógico)


El tipo de datos lógico es el que te permite usar variables que disponen sólo de dos posibles valores: cierto o falso. Debido a esto, su utilidad salta a la vista, y no es otra que variables de chequeo. Nos sirven para mantener el estado de un objeto mediante dos valores:
  • si/no
  • cierto/falso
  • funciona/no funciona
  • on/off
  • etc.



El tipo real (real)


Como ya has visto, Pascal soporta el conjunto entero de números. Pero no es el único, también te permite trabajar con números pertenecientes al conjunto real.
El tipo de datos real es el que se corresponde con los números reales. Este es un tipo importante para los cálculos. Por ejemplo en los estadísticos, ya que se caracterizan por tratar fundamentalmente con valores decimales.
Nota: Aunque pueda que estés acostumbrado a escribir con coma los decimales, te advierto que en Pascal y en todos los lenguajes de programación se escribe con un punto. Por ejemplo: 3.1416
A continuación tienes un ejemplo en el que se utiliza el tipo real. En el puedes ver las dos formas de declarar una variable real, y también el uso de una constante real. Por si tienes curiosidad, el resultado de ejecutar el programa compilado es:
 Los tipos char y string (carácter y cadena)


Con el tipo carácter puedes tener objetos que representen una letra, un número, etc. Es decir, puedes usar variables o constantes que representen un valor alfanumérico. Pero ojo, cada variable sólo podrá almacenar un carácter.
Sin embargo, con las cadenas de caracteres (strings) puedes contener en una sola variable más de un carácter. Por ejemplo, puedes tener en una variable tu nombre.

PRÁCTICA 2
VARIABLES Y CONSTANTES


Ejercicio 1: ¿Qué diferencia existe entre una variable y una constante? ¿Quién establece esa diferencia?

Ejercicio 2: ¿Qué es una asignación? ¿Qué tipos de asignaciones existen? ¿Cuál es la diferencia entre ellos?

Ejercicio 3: ¿Qué es un contador? ¿En qué se diferencia de un acumulador? ¿Por qué son necesarios ambos conceptos?

Ejercicio 4: Para cada uno de los siguientes casos, designar una variable, decir de qué tipo es y ejemplificar con tres datos:
a)     Clubes de fútbol metropolitanos.
b)     Superficies de canchas de fútbol porteñas.
c)      Nombres de actores famosos.
d)     Edades de un grupo de niños.
e)     Pesos de los bebés al nacer en una determinada maternidad.
f)        Temperaturas máximas de cada día del mes de enero de 1998.
g)     Alturas de las mamás de los chicos del Colegio.
h)      Colores preferidos de los chicos de la Parroquia.
i)        Número que calzan las alumnas mujeres de 2do. año.
j)        Cantidad de alumnos rubios que hay en 6to. grado.

Ejercicio 5: Suponiendo la siguiente declaración de variables
           A: integer;
           B: integer;
           C: real:
           D: real;
           E: string;
           F: string;
           G: boolean;
           H: boolean;
           RES1:integer;
           RES2: real;
           RES3:string;
           RES4: boolean;
Decir si las siguientes asignaciones son correctas o no. Justificar
a)     RES1:= A+B
b)     RES2:= A+B
c)      RES3:= E+F;
d)     RES1:= A/B;
e)     RES4:= G and H;
f)        RES4:= G*H;
g)     RES2:= G+D;
h)      RES1:= C*D;
i)        RES2:= A/B

Ejercicio 6: Realizar un programa Pascal que pregunte al usuario su año de nacimiento y le informe cuántos años cumple en el corriente.

Ejercicio 7: Realizar un programa Pascal que, dadas las cantidades de alumnos de cada curso del colegio, devuelva la cantidad total de alumnos.

 


LOS PROCEDIMIENTOS DE SALIDA DE DATOS: WRITE Y WRITELN

Un programa por simple que sea, va a tener que mostrar cierta información de salida. Esto se consigue en Pascal mediante los procedimientos write y writeln. En este apartado, nos centraremos en el estudio de ellos.
Veamos como es la sintaxis de los procedimientos write y writeln, es decir, ¿cuál es la manera correcta de escribirlos?: 
write (ítem, ítem, ...);
writeln (ítem, ítem, ...);
Cada uno de estos ítems puede ser:
  • un valor literal
  • una constante con nombre
  • una variable
  • una llamada a una función
Nota: Un función especial que tiene writeln es como espaciador entre líneas. Así, llamando al procedimiento sin ningún parámetro produciremos un salto de línea.
En el siguiente ejemplo puedes observar llamadas a ambos procedimientos que resumen un poco todo esto que hemos mencionado: 
program Prueba_write;
const
   iva_factor = 0.16;
var
   num_udes : integer;
   total, precio_udad : real;
begin
   precio_udad := 198;
   num_udes := 4;
   total := num_udes * precio_udad;
   
   write  ('El precio sin IVA de',num_udes:3,' unidades es');
   writeln(total:8:0,' pesos);
   writeln; 
   writeln;  (* separamos 2 lineas *)
 
   total := total + total * iva_factor; 
 
   write  ('El precio con IVA de',num_udes:3,' unidades es');
   writeln(total:8:2,' pesos)
end.
                
Salida del programa:
El precio sin iva de  4 unidades es     792 pesos
 
 
El precio con iva de  4 unidades es  918.72 pesos
            
A que adivino cuál es la pregunta del millón para ti en este momento...
¿Cuál es la diferencia entre write y writeln?
Es algo muy sencillo que casi suena a tontería. Se trata de que el procedimiento writeln pasa el cursor a la siguiente línea después de escribir los ítems, mientras que write lo deja después del último carácter.

FORMATOS EN LA SALIDA DE DATOS

En una llamada a uno de los procedimientos write, además de incluir ítems, también podemos especificar de qué manera se mostrarán en la pantalla estos ítems. Son los llamados formatos de salida.
Estos formatos no son gran cosa, pero te permitirán jugar un poco con la apariencia que presentarán tus datos. Podrás especificar el número de posiciones para el campo de escritura. Y para los valores reales, el número de decimales a mostrar.
La sintaxis de ambos formatos se muestra a continuación.
writeln(ítem: anchura ...)
writeln(ítem_real: anchura: dígitos ...)
anchura: valor entero que indica la anchura total del campo de escritura digitos: valor entero que indica el número de decimales a mostrar

LOS PROCEDIMIENTOS DE ENTRADA

En este apartado trataremos la entrada de datos, también conocida como lectura de datos. En Pascal existen dos procedimientos que nos permiten leer datos de la entrada estándar (el teclado) son read y readln.
A continuación puedes echarle un vistazo a la sintaxis de estos procedimientos: 
read (variable1, variable2, ...);
readln (variable1,variable2, ...);
A diferencia de los procedimientos write, con read y readln sólo puedes usar variables como parámetros. Esto es lógico ya que las variables pueden cambiar su valor en el cuerpo del programa. Los tipos de datos permitidos para estas variables son: enteros, reales, caracteres o cadenas de caracteres.
¿Cómo funcionan read y readln?
  • Ambos procedimientos esperan a que pulses la tecla ENTER antes de asignar valores a variables
  • Si intentas leer más de una variable en una llamada, tendrás que teclearlas en el orden en el que aparecen en el procedimiento
  • Además, si no quieres tener problemas, lo mejor será que dejes uno o más espacios entre los datos que teclees.
  • La principal diferencia entre ambas es que después de leer los datos, read deja el cursor a continuación del último carácter, mientras que readln lo pasa al comienzo de la siguiente línea.
En el siguiente ejemplo se utilizan varias llamadas a read y readln. Es un ejemplo típico de entrada/salida. En él se solicitan datos al usuario y éste tiene que introducirlos por teclado. A continuación del código tienes una de las posibles entradas correctas. 
program Datos_Personales;
var
   Nombre   : string[15];
   Ap1, Ap2 : string[20];
   Edad     : integer;
 
begin
   write('Introduce nombre: ');
   readln(Nombre);
   write('Primer apellido : ');
   readln(Ap1);
   write('Segundo apellido: ');
   readln(Ap2);
   write('Introduce edad  : ');
   readln(Edad);
end.
       
Una posible entrada correcta
Introduce nombre: Benito
Primer apellido : Santos
Segundo apellido: Feijoo
Introduce edad : 21


PRÁCTICA 3
ALGORITMOS


  1. Se leen dos números enteros. Informar la suma, la resta, la multiplicación y la división de ambos.
  2. Se leen dos números reales. Informar la suma de sus cuadrados.
  3. Se leen dos números enteros. Calcular la raíz cuadrada del primero y restársela al triple del segundo. Informar el resultado.
  4. Se leen cuatro números enteros. Sumar los dos primeros, dividir esa suma por el tercero y multiplicar este resultado por el cuarto. Informar el resultado.
  5. Informar el promedio de cinco números leídos por teclado.
  6. Dados dos números enteros, sumarlos, dividir esta suma por 10 y mostrar por pantalla el cuadrado de este último número obtenido.
  7. Dados dos números cualesquiera, elevar al cuadrado el primero de ellos y multiplicar por 5 el segundo. Mostrar la suma de los dos resultados obtenidos anteriormente.
  8. Dados los tres lados de un triángulo, hallar el perímetro.
  9. Dadas la base y la altura de un triángulo, hallar el área.
  10. Dados los lados de un rectángulo, calcular el perímetro, la superficie y la diagonal.
  11. Dado un valor en kilómetros, expresarlo en metros.
  12. Calcular el sueldo de un empleado conociendo la cantidad de horas trabajadas y el valor que gana por hora.
  13. Se lee el precio de costo de un producto. Se desea conocer el precio de venta (con una recarga del 30%) y el IVA (20% sobre el precio de venta) que paga el consumidor.
  14. Dado un valor que representa la temperatura en grados Fahrenheit, mostrar la misma temperatura en grados centígrados. La fórmula de conversión es:                       C = 5/9 (F-32).
  15. En un curso de Ciencias de la Computación, la calificación final del estudiante se determina a partir del rendimiento en tres aspectos del trabajo cuatrimestral. Existe una calificación de exámenes parciales, que cuenta con 30 % del total; la calificación de trabajo de taller con 20 % del total; y el examen final con el 50 % restante. Se leen las calificaciones y se pide informar la nota final.
  16. Una compañía de ventas de automóviles paga, a su personal de la sección de ventas, un salario de 1000 pesos, más una comisión de 20 pesos por automóvil vendido, más 5 % del valor de venta. Diseñar un algoritmo para calcular el salario de un vendedor en un mes dado, conociendo el número de automóviles vendidos y el precio de cada uno de estos.

jueves, 14 de marzo de 2013

UNIDAD 1 - 5to. año


UNIDAD 1
PROGRAMACIÓN ORIENTADA A OBJETOS

1.- CONCEPTOS BÁSICOS

Con la Programación Orientada a Objetos (POO) tenemos que aprender a pensar las cosas de una manera distinta para escribir nuestros programas en términos de objetos, propiedades, métodos y otras cosas que veremos rápidamente para aclarar conceptos y dar una pequeña base que permita soltarnos un poco con este tipo de programación.
Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez los mismos problemas. Para conseguir que los esfuerzos de los programadores puedan ser utilizados por otras personas se creó la POO, que es una serie de normas para realizar las cosas de manera que otras personas puedan utilizarlas y adelantar su trabajo, es decir, hacer que el código sea reutilizable.
La POO no es difícil pero es una manera especial de pensar. Aunque podamos hacer los programas de formas distintas, no todas ellas son correctas, lo difícil no es programar orientado a objetos sino programar bien. Programar bien es importante porque así no podemos aprovechar todas las ventajas de la POO.

Cómo se piensa en objetos

Pensar en términos de objetos es muy parecido a cómo lo haríamos en la vida real. Por ejemplo vamos a pensar en un coche para tratar de modelizarlo en un esquema de POO. Diríamos 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.
Por poner otro ejemplo vamos a ver cómo modelizaríamos en un esquema POO una fracción, es decir, esa estructura matemática que tiene un numerador y un denominador que divide al numerador, por ejemplo 3/2.
La fracción será el objeto y tendrá dos propiedades, el numerador y el denominador. Luego podría tener varios métodos como simplificarse, sumarse con otra fracción o número, restarse con otra fracción, etc.
Estos objetos se podrán utilizar en los programas, por ejemplo en un programa de matemáticas harás uso de objetos fracción y en un programa que gestione un taller de coches utilizarás objetos coche. 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.

Clases en POO

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. En los ejemplos anteriores, un coche en particular es un objeto, mientras que todos esos objetos pertenecen a la clase coche.

Propiedades en clases

Las propiedades o atributos son las características de los objetos. Cuando definimos una propiedad normalmente especificamos su nombre y su tipo. Nos podemos hacer a la idea de que las propiedades son algo así como variables donde almacenamos datos relacionados con los objetos.

Métodos en las clases

Son las funcionalidades asociadas a los objetos. Cuando estamos programando las clases las llamamos métodos. Los métodos son como funciones o procedimientos que están asociadas a un objeto, es decir, acciones que el objeto es capaz de ejecutar.

Objetos en POO

Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se creará. Esta acción de crear un objeto a partir de una clase se llama instanciar (que viene de una mala traducción de la palabra instance que en inglés significa ejemplar). Por ejemplo, un objeto de la clase fracción es por ejemplo 3/5. El concepto o definición de fracción sería la clase, pero cuando ya estamos hablando de una fracción en concreto 4/7, 8/1000 o cualquier otra, la llamamos objeto.

Estados en objetos

Cuando tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando tenemos un coche la propiedad color tomará un valor en concreto, como por ejemplo rojo o gris metalizado. El valor concreto de las propiedades de un objeto se llama estado.
Para acceder a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador punto.
Supongamos que CocheDeMiVecino es un objeto que pertenece a la clase Coche. El CocheDeMiVecino es azul, es decir, la propiedad Color del CocheDeMiVecino es azul. Entonces decimos:
CocheDeMiVecino.Color = azul
El objeto es CocheDeMiVecino, luego colocamos el operador punto y por último el nombre de la propiedad a la que deseamos acceder. En este ejemplo estamos cambiando el valor del estado de la propiedad del objeto a azul con una simple asignación.

Mensajes en objetos

Un mensaje en un objeto es la acción de efectuar una llamada a un método. Por ejemplo, cuando le decimos a un objeto de la clase Coche que se ponga en marcha estamos pasándole el mensaje “Arrancar”.
Para mandar mensajes a los objetos utilizamos el operador punto, seguido del método que deseamos invocar.
CocheDeMiVecino.Arrancar
En este ejemplo pasamos el mensaje Arrancar, el cual va a buscar a la clase Coche para ver cómo se realiza.

2.- LOS TRES PILARES DE LA POO

Cualquier lenguaje basado en objetos debe cumplir estos tres requisitos:

  • HERENCIA: La herencia es la cualidad de crear clases que estén basadas en otras clases. La nueva clase heredará todas las propiedades y métodos de la clase de la que está derivada, además de poder modificar el comportamiento de los procedimientos que ha heredado, así como añadir otros nuevos. Supongamos que tenemos una clase Gato que está derivada de la clase Animal. Gato hereda de Animal todas las características comunes a esa clase, además de añadirle algunas características particulares a su condición felina. Podríamos tener otra clase Perro, que también heredaría las propiedades y métodos de Animal. Aunque las clases Gato y Perro son claramente distintas, ambas pertenecen o se derivan de la clase Animal y en ese sentido comparten muchas características.

  • ENCAPSULACIÓN: La encapsulación es la capacidad de separar la implementación de la interfaz del código de una clase, es decir, sabemos cuáles son las propiedades de los objetos, cuáles son sus métodos y qué hacen, pero no nos importa cómo lo hacen. Siguiendo el ejemplo anterior, sabemos que un objeto de la clase Coche tiene como método Arrancar; si queremos utilizar ese método, sólo tenemos que invocarlo para lo cual basta con conocer su nombre pero no nos importa en qué consiste.

  • POLIMORFISMO: El polimorfismo se refiere a la posibilidad de definir múltiples clases con funcionalidad diferente, pero con métodos o propiedades denominados de forma idéntica que pueden utilizarse de manera intercambiable. Por ejemplo, Arrancar puede ser un método de la clase Coche, pero también un método de la clase Moto, y si tenemos dos objetos EsteCoche y EstaMoto, es posible que nos dé lo mismo utilizar el método EsteCoche.Arrancar que EstaMoto.Arrancar

Es bueno tener en cuenta que cuando definimos una clase estamos definiendo dos cosas diferentes: los datos que dicha clase puede manipular o contener (las propiedades) y la forma de acceder a esos datos y trabajar con ellos (los métodos). En cambio, cuando definimos un objeto (sería más exacto hablar de crear un objeto) estamos creando un objeto en particular que pertenece a esa clase. En otras palabras, un objeto es un caso real y concreto de una clase, que sólo describe en forma abstracta un conjunto de objetos.


3.- TRABAJAR CON OBJETOS EN VISUAL BASIC

Para definir una clase, se utiliza la palabra Class y basta con darle un nombre a la clase. Cuando termino de definir todo lo que involucra a la clase, cierro la definición con la palabra End.
   
         Class Coche
      
         End Class

Es decir, todo lo que esté entre Class Coche y End Class, será la definición de la clase Coche. Allí determinaremos sus propiedades (valores que puede tomar) y sus métodos (acciones que puede ejecutar)

Veamos cómo podemos definir algunas propiedades y métodos de la clase Coche:
    
        Class Coche
                        Public Marca as string
                        Public Color as string
                        Public CantidadDePuertas as integer

                        Public Sub Arrancar ()
                                    <aquí se introducen todos los pasos que hacen que un auto
                                   pueda arrancar>
                        End Sub
        End Class

Nótese que las propiedades Marca, Color y CantidadDePuertas y el método Arrancar se definen utilizando la palabra Public, de modo que puedan ser accedidos desde otros códigos.
Vamos ahora a crear un objeto perteneciente a esa clase: primero lo definimos diciendo qué tipo de variable es; Dim en Visual equivale a Var en Pascal, y As vendría a ser los :.

            Dim CocheDeMiVecino As Coche

Y después lo creamos

            CocheDeMiVecino = New Coche()

Si queremos definir una clase que va a pertenecer a otra (como el caso de Gato que pertenece a la clase Animal) podemos hacer que herede todas sus propiedades y métodos. Esto lo hacemos utilizando la palabra Inherits

            Class Gato
                        Inherits Animal
                        <aquí van todas las definiciones propias de la clase Gato que otros
                              elementos de la clase Animal no tienen>
            End Class

Finalmente vamos a decir que un módulo es un archivo en el que se almacenan los códigos correspondientes a las clases que va a utilizar el sistema. Un sistema podría estar conformado por varios módulos, los que a su vez podrían estar conformados por varias clases.


4.- PARÁMETROS DE UN MÉTODO

Los métodos de una clase pueden ser de dos tipos: procedimientos o funciones. Un procedimiento es un conjunto de instrucciones que realizan una acción. Se declara de la siguiente manera

           Sub < nombre del procedimiento> (<lista de parámetros>)
                        <aquí van las instrucciones que realizan la acción>
            End Sub

Una función, además de hacer lo mismo que un procedimiento, puede devolver un valor y termina siendo usada como una variable. Se declara:

            Function <Nombre de la función> (<lista de parámetros>) As <tipo de dato>
                        <aquí van las instrucciones que realizan la acción>
            End Function

Supongamos que tengo un procedimiento que se llama Suma y que recibe dos valores, los cuales suma y devuelve el resultado en un tercer valor. Quedaría como sigue:

            Sub Suma (ByVal Valor1 As Integer, ByVal Valor2 As Integer, ByRef Resultado As Integer)
                        Resultado = Valor1 + Valor2
            End Sub

Valor1 y Valor2 son las variables donde el procedimiento va a guardar los dos números que tiene que sumar. Resultado es la variable donde el procedimiento va a guardar la suma. Valor1 y Valor2 se denominan los parámetros de entrada del procedimiento (para indicarlo se coloca ByVal); mientras que Resultado es el parámetro de salida (por eso está precedido por la expresión ByRef). Así, el procedimiento recibe como entrada dos números que suma y los coloca en una variable que devuelve.

Si esto mismo lo hiciera una función en lugar de un procedimiento, la suma puede devolverse en la misma función

            Function Suma (ByVal Valor1 As Integer, ByVal Valor2 As Integer) As Integer
                        Suma = Valor1 + Valor2
            End Function

Como vemos, en este caso los dos valores se suman y se guardan en la misma función. Desaparece el parámetro de salida y se declara a la misma función Suma como una variable de tipo Integer capaz de devolver el resultado de la suma.

Los parámetros de entrada son variables capaces de guardar valores que reciben para poder procesarlos. Por eso se dice que son parámetros pasados por valor, y todo cambio que se produzca en ellos dentro del procedimiento, no va a salir de ahí. En cambio, los parámetros de salida son variables que después van a seguir siendo usadas por otras porciones de código; por lo tanto es necesario que el parámetro pase la variable entera: su dirección de memoria y su contenido. A este tipo de parámetros se los denomina pasados por referencia.
Dicho de otra manera: los parámetros indicados con ByVal se pasan por valor, es decir, se hace una copia del contenido de la variable o constante y es esa copia la que se pasa al procedimiento. Por otro lado, los parámetros indicados con ByRef se pasan por referencia, es decir se pasa al procedimiento una referencia a la posición de memoria en la que está el contenido de la variable en cuestión, por tano cualquier cambio efectuado a la variable dentro del procedimiento afectará a la variable indicada al llamar al procedimiento. Demás está decir que esta cuestión de los parámetros vale tanto para funciones como para procedimientos.


5.- ÁMBITO DE LAS VARIABLES

El ámbito de una variable se refiere a la porción de código para la cual esa variable puede ser utilizada.
Diferenciamos tres ámbitos distintos:

  • Global: la variable puede ser utilizada por cualquier otra clase de cualquier otro lugar del sistema. Estas son las variables que normalmente llamamos propiedades de las clases. Se declaran utilizando la palabra Public inmediatamente después de denominar a la clase

Class <Nombre de la Clase>
Public <Variable Global> As <Tipo>

<aquí va el resto del código correspondiente a la definición de
la clase>
                       
End Class

  • Privada: la variable puede ser utilizada sólo por la clase donde está declarada. Se declaran con la palabra Private inmediatamente después de denominar a la clase

Class <Nombre de la Clase>
Private <Variable Privada> As <Tipo>

<aquí va el resto del código correspondiente a la definición de
la clase>
                       
End Class

  • Local: la variable puede ser utilizada sólo en el método en el cual se define. Se utiliza la palabra Dim dentro del método

Class <Nombre de la Clase>

Sub <Nombre del método>

             Dim <Variable Local>
             <aquí va el resto del código correspondiente a la
definición del método>
                                    End Sub

                        End Class

Salvo las propiedades que obviamente deben ser variables globales, en la medida de lo posible hay que declarar a todas las variables lo más localmente posibles. Es decir, si se puede se declara local; si es necesario, puede declararse privada; y en última instancia, sólo si es imprescindible, se declara global.


PRÁCTICA 1

1.                    ¿Qué ventajas presenta la técnica de POO con respecto a la programación estructurada?
2.                  ¿Por qué la técnica de POO recibe ese nombre?
3.                  ¿Qué es una clase? ¿Qué es un objeto? ¿Cuál es la diferencia entre ambos?
4.                  ¿Qué son las propiedades de un objeto? ¿A qué equivalen en la tecnología de programación estructurada?
5.                  ¿Cómo me refiero a la propiedad de un objeto?
6.                  ¿Dónde se declaran? ¿De qué manera? ¿Por qué?
7.                  ¿A qué se denomina estado de un objeto?
8.                  ¿Qué es un mensaje para un objeto?
9.                  ¿Qué es un método?
10.              ¿Qué es definir una clase? ¿Qué diferencias presenta con crear un objeto?
11.              ¿Qué es la encapsulación  y cuál es su función?
12.              ¿Qué es la herencia? ¿Qué ventajas presenta?
13.              ¿A qué llamamos polimorfismo?
14.             Definir, según la sintaxis del Visual 2010, una clase Colegio que tiene cinco propiedades: Nombre, Especialidad, CantidadDeAlumnos, ValorDeLaCuota, RequiereUniforme (sí o no); y tres métodos: Inicializar (se encarga de establecer valores iniciales en “Colegio”, “Título”, 0, 0, “No”, respectivamente para cada propiedad), IngresosMensuales (calcula la cantidad de dinero que debe ingresar a la escuela por mes) y IngresoRealPorcentual (dada la cantidad de alumnos morosos, devuelve el porcentaje de dinero real que ingresa al nivel con respecto al total que debería percibir si todos abonaran) ¿Qué tipo de método convendría en cada caso? ¿Por qué?
15.             Definir una clase Nivel que hereda todas las propiedades y métodos de la clase Colegio y agrega dos nuevas propiedades Tipo (Jardín, Primaria, Secundaria) y CantidadDeDivisiones; y un nuevo método PromedioDeAprobados (dada la cantidad total de alumnos aprobados, devuelve el promedio de aprobados por división)
16.             En un formulario FormColegios crear dos objetos distintos que pertenezcan a la clase Colegio: CualquierColegio tendrá los valores iniciales de la clase, y MiColegio, los valores de tu escuela. Mostrar un cartel que diga “Situación de riesgo” en el caso en que el porcentaje de ingresos reales sea inferior al 70%.
17.             En el mismo formulario anterior, crear dos objetos distintos que pertenezcan a esa clase: NivelPrimario para la Primaria y NivelSecundario para la Secundaria. Inicializar las propiedades según los datos de tu colegio. Mostrar en un mensaje cuál es el promedio de alumnos aprobados según el nivel.
18.             Para estos cuatro últimos ejercicios, realizar un diccionario de variables: un listado, objeto por objeto, de todas las variables involucradas, especificando tipo y ámbito.