PLANTEL 6 “VICENTE GUERRERO” SUBDIRECCIÓN ACADÉMICA

Anuncio
PLANTEL 6 “VICENTE GUERRERO”
SUBDIRECCIÓN ACADÉMICA
ACADEMIA DE TECNOLOGÍAS DE LA INFORMACIÓN Y COMUNICACIÓN
CAPACITACIÓN EN INFORMÁTICA
ASIGNATURA DE LÓGICA COMPUTACIONAL Y PROGRAMACIÓN
GUÍA DE ESTUDIO PARA PRESENTAR
EL EXAMEN DE ACREDITACIÓN ESPECIAL
PERÍODO 2010-B
Profr. José Alejandro Albarrán Guzmán
NOVIEMBRE DE 2010
Presentación
En el marco del Plan de Estudios del Colegio de Bachilleres, la Capacitación en Informática tiene
como finalidad brindarte un acercamiento al campo laboral, a través de desarrollar procesos de
trabajo tales como uso de aplicaciones de tipo general o específico, diseño de sistemas y bases de
datos, así como el manejo de redes y la lógica computacional para plantear soluciones a
problemas relacionados con la informática.
Al egresar de esta capacitación podrás operar como el enlace entre usuarios de sistemas de
información y computadoras personales o conectadas en red, utilizando programas de aplicación
general o específica. De igual modo, podrás implementar sistemas elementales de información
utilizando técnicas de análisis y diseño de sistemas, bases de datos relacionales y herramientas de
programación.
La presente guía de estudios de la asignatura “Lógica Computacional y Programación” se ha
elaborado con el propósito de brindarte apoyo en la preparación del examen de acreditación
especial.
La guía se compone de varias secciones donde se abordan los conceptos generales que son
requeridos para la asignatura. Se cubren los temas relacionados con las tres metodologías
reconocidas hoy en día para la elaboración de programas de cómputo, siendo éstas la
Metodología Lineal, la Metodología Estructurada y la Metodología Orientada a Objetos; sobre esta
última, se incluye como anexo un artículo elaborado por Luis R. Izquierdo sobre la programación
orientada a objetos, con el propósito de ahondar sobre el tema. Una sección es considerada para
la programación en Visual Basic. Finalmente en la sección 6, se incluyen una serie de ejercicios y
reactivos que abarcan los temas desarrollados en el curso con la finalidad de que ejercites y
apliques lo aprendido contestando dichos reactivos.
Esperamos que la Guía te sea de utilidad para sustentar el examen correspondiente.
2
Introducción
La Informática ha avanzado de manera muy importante en los últimos años, de tal forma que las
computadoras de hoy son portátiles con baterías recargables de larga duración. A la par de esta
evolución del hardware ha evolucionado también el software, definiéndose aplicaciones con
interfaces cada vez más amigables con el usuario. Esta evolución se ha dado al tratar de
acercarnos cada vez más a los procesos que se realizan en nuestra vida cotidiana para resolver
problemas de cualquier índole.
La asignatura de Lógica Computacional y Programación es vital para entender que la elaboración
del software requiere que el programador tenga un pensamiento lógico, razonado y sistemático,
para plasmar dichos procesos de uso cotidiano en sentencias entendibles por la computadora y,
por ende, la utilización de ésta como un medio electrónico para realizar tareas.
La asignatura de Lógica Computacional y Programación pretende brindarte los elementos teóricosprácticos de las metodologías de programación, para desarrollar formas de pensamiento lógicas
que requiere esta disciplina, por lo cual se considera una de las asignaturas básicas de la
Capacitación.
La informática nace como una solución para resolver problemas, de tal forma que se definen
lenguajes de programación para escribir instrucciones que la computadora pueda entender. En un
principio los lenguajes de programación llamados de «bajo nivel» se acercaban mucho al lenguaje
nativo de las computadoras, basado en el código binario y que se conoce como lenguaje máquina,
tal es el caso del lenguaje ensamblador; posteriormente fueron evolucionando dichos lenguajes a
un lenguaje más cercano al humano como lo es el idioma inglés lo que requiere de un traductor a
lenguaje máquina, dichos lenguajes se conocen como lenguajes de programación de «alto nivel».
A partir de esta evolución es como surgen las diferentes metodologías de programación,
empezando por la programación lineal, la cual resuelve problemas simples de una forma
secuencial. Con el paso del tiempo se ha visto que esta metodología no siempre permite generar
programas grandes o complejos de una forma organizada, ya que el programador puede perder la
secuencia lógica del programa al revisar los códigos generados para resolver dichos problemas.
Es así como surge la propuesta de una nueva metodología orientada a resolver problemas
grandes de una forma estructurada, al segmentar un problema en problemas más simples,
programando soluciones específicas para cada segmento o módulo. De esta forma la
programación estructurada permitió por primera vez realizar grandes programas de cómputo
organizados y estructurados, fáciles de leer y corregir, esta metodología sigue vigente hasta
nuestros días.
Al empezar a implementarse aplicaciones de tipo gráfico, diseñadas en lenguaje de programación
lineal o estructurada, se ve la necesidad de evolucionar las metodologías de programación a un
lenguaje de programación que permita generar objetos gráficos, que realicen tareas específicas sin
perder de vista la modularidad de los procesos. Es así como surge la programación orientada a
objetos, la cual se fundamenta en la metodología estructurada.
3
1. CONCEPTOS GENERALES
Para empezar a estudiar el tema de Lógica Computacional es necesario conocer previamente su
utilidad, la cual es que adquieras habilidades para resolver problemas informáticos utilizando la
computadora, a través de desarrollar un pensamiento lógico, sistemático y razonado que te
permita proponer soluciones al elaborar algoritmos elementales, utilizando las diferentes
metodologías que existen para su desarrollo.
En nuestra vida cotidiana, cualquier actividad que realizamos la podemos describir con una serie
de acciones, tareas o pasos. Igualmente, siempre estamos valorando si dicha actividad va a lograr
lo que nosotros queremos, a partir de ir tomando decisiones durante el desarrollo de la misma, sin
perder de vista qué es lo que queremos lograr y qué requerimos para lograrla.
De esta misma forma podemos ver un proceso informático, el cual nace a partir de un problema
que requiera del uso de la computadora. Para resolverlo se deberá desarrollar un algoritmo, el cual
no es más que un conjunto de actividades o procesos formados por una serie de instrucciones o
tareas organizadas de forma lógica, que nos permiten alcanzar un resultado o resolver un
problema.
Muchas veces aplicamos el algoritmo de manera inadvertida, inconsciente o automática, ya que
son tantas las veces que se ha aplicado que difícilmente nos ponemos a enumerar los pasos para
alcanzar el objetivo, y por lo tanto lo hacemos en forma automática.
Por otra parte, existe una gran cantidad de problemas que requieren de un análisis profundo y de
un pensamiento flexible y estructurado para su solución, como es el caso de la programación,
donde convergen técnicas y herramientas metodológicas que permiten llevar a cabo la
construcción de algoritmos eficientes y por consiguiente la resolución del problema.
Para poder llegar a la solución de un problema deben considerarse las siguientes etapas:
Las características que los algoritmos deben reunir son:
a) Precisión. Los pasos a seguir deben ser claros y correctos.
b) Determinístico. Dado un conjunto de datos de entrada idénticos, debe arrojar siempre los
mismos resultados.
c) Finitud. El algoritmo, independiente de la complejidad del mismo, siempre debe ser de
longitud finita.
4
Para ejemplificar lo que se ha expuesto, considera el siguiente “laberinto” en donde solamente se
pude entrar por el lado señalado por la letra E y el objetivo es salir por el lado marcado con la letra
S, para realizar los movimientos dentro del laberinto solamente se pueden utilizar los que se
indican en el recuadro de movimientos válidos:
E
Movimientos
válidos












S
A continuación se presenta una solución al problema propuesto, observa con cuidado:
E







Movimientos
válidos




























S
Si colocamos cada uno de los movimientos en una sola línea obtenemos la siguiente secuencia de
movimientos o instrucciones:

que representa justamente a un algoritmo, es decir, un conjunto de pasos o instrucciones que
resuelven un problema.
5
Por otro lado, no es la única solución, considera el siguiente caso:
E







Movimientos
válidos


































S
Colocando los movimientos en una sola línea como en el caso anterior se obtiene:

que representa otro algoritmo que resuelve el mismo problema anterior. Finalmente, considera la
siguiente solución:
E











Movimientos
válidos
















































S
Acomodando nuevamente los movimientos en una sola línea obtenemos:


6
que también representa otra solución al problema dado, aunque sea más larga y rebuscada
comparada con las anteriores. Todos estos casos son soluciones válidas.
En los problemas de la vida real, las situaciones anteriores se asemejan mucho, es decir, los
problemas pueden tener varias soluciones válidas y unas soluciones pueden ser mejores que
otras. En este sentido se procurará la solución óptima.
Otra manera de elaborar algoritmos es enunciado los pasos. Por ejemplo, considera las
actividades que realizas seguramente todas las mañanas desde que te levantas y asistes a la
escuela o al trabajo:
1. Levantarse
2. Dirigirse al baño
3. Desvestirse
4. Bañarse
5. Secarse
6. Vestirse
7. Dirigirse a la cocina
8. Prepararse el desayuno
9. Desayunar
10. Lavar los trastes
11. Tomar las cosas necesarias para la escuela o el trabajo
12. Dirigirse al lugar para tomar el transporte
13. Solicitar la parada al transporte
14. Subirse al transporte
15. Esperar a que el transporte llegue al lugar de destino
16. Solicitar la parada del transporte
17. Bajarse del transporte
18. Dirigirse al lugar de destino escuela o trabajo
19. Entrar a la escuela o lugar de trabajo
Te puedes dar cuenta que existe una variedad de formas para elaborar los algoritmos siempre y
cuando cumpla con las características señaladas al principio de esta sección. De esta forma una
receta de cocina por ejemplo, también es un algoritmo. Existen algoritmos gráficos como los que
se desarrollan utilizando diagramas de flujos entre otros.
Históricamente hablando, el desarrollo de los algoritmos ha pasado por diferentes etapas
evolutivas llamadas metodologías, dentro de las cuales, hasta hoy se reconocen ampliamente tres
etapas, es decir tres metodologías:
 Metodología Lineal
 Metodología Estructurada
 Metodología Orientada a Objetos
y que se revisarán a continuación.
7
2. METODOLOGÍA LINEAL
De las tres metodologías es la más simple y natural ya que permite escribir algoritmos de una
forma secuencial, es decir, cada instrucción se ejecuta hasta que la anterior se haya realizado.
Visto gráficamente su representación sería la siguiente:
De esta manera los ejemplos tratados en la sección anterior corresponden a esta metodología.
La herramienta más común para representar este tipo de algoritmo basado en una metodología
lineal es el diagrama de flujo, que no es más que la representación gráfica por medio de símbolos.
Si el diagrama de flujo está completo y correcto, el paso del mismo a un lenguaje de programación
es relativamente simple y directo.
Actualmente la metodología lineal se aplica en la solución de problemas pequeños, donde es
suficiente la definición de los pasos en forma secuencial.
Por ejemplo, considera la solución de la ecuación lienal:
Ecuación lineal Solución
Solución
ax + b = 0
x = -b / a
Algoritmo:
1. Solicitar el valor de a y b
2. Calcular el valor de –b/2a
3. Asignar a x el valor calculado en el paso 2
4. Termina el algoritmo
Considera ahora el caso para la ecuación de segundo grado:
8
Algoritmo:
1. Solicitar los valores de a, b y c
2. Calcular el valor de b2 – 4ac
3. Si b2 – 4ac es negativo, la ecuación no tiene solución. Ir al Paso 6
4. Si b2 – 4ac es igual a 0, la ecuación tiene una sola solución. Ir al Paso 8
5. Si b2 – 4ac es mayor que cero, la ecuación tiene dos soluciones. Ir al Paso 11
6. Como no existen las raíces cuadras de números negativos, entonces no hay soluciones
7. Ir al Paso 16
8. Calcular el valor de –b/2a
9. Asignar a x el valor calculado en el paso 8
10. Ir al Paso 16
11. Calcular la raíz cuadrada de b2 – 4ac
12. Calcular la solución 1 sumando la raíz cuadrada del paso 11 a -b y dividiendo entre 2a
13. Asignar a x el valor calculado en el paso 12
14. Calcular la solución 2 restando la raíz cuadrada del paso 11 a –b y dividiendo entre 2a
15. Asignar a x el valor calculado en el paso 14
16. Termina el algoritmo
9
3. METODOLOGÍA ESTRUCTURADA
La metodología de programación estructurada se basa en cuatro técnicas fundamentales que se
interrelacionan de manera estrecha:




Técnica de segmentación
Técnica Top-Down
Estructuras de control
Pseudocódigo
que revisamos a continuación.
Técnica de Segmentación
Esta técnica plantea que un problema se puede dividir en problemas más pequeños (módulos) y
más simples de resolver, de tal forma que la suma de las soluciones de cada problema sea el
resultado de la solución total de éste.
Cada problema o módulo se representa mediante un rectángulo con un nombre que lo identifica y
se relaciona con las funciones que realiza:
Módulo A
Esta metodología permite desarrollar algoritmos a través de módulos, los cuales realizan tareas
bien definidas.
10
Aplicando esta técnica a los ejemplos anteriores podríamos obtener los siguientes módulos:
Calcula
Raíz
Cuadrada
Solicita
Datos
Actividades
en casa
Aseo
personal
Transporte
Asigna
Valores
Desayuno
De esta forma, el módulo se define una sola vez y se llama tantas veces como sea necesario,
mediante el nombre que lo identifica.
Técnica Top-Down
Esta técnica se relaciona con la de segmentación, ya que establece la división de un problema en
varios de menor tamaño que se representan mediante módulos que se vinculan de manera
jerárquica formando una estructura de árbol invertido como se ilustra en la siguiente figura:
La técnica Top-Down establece dos tipos de módulos a saber: los módulos y los módulos control.
En el primer caso, son módulos que contienen las instrucciones para que cumplan con el propósito
por lo que fueron diseñados. En el caso de los módulos control su función es la de controlar la
secuencia y orden en que deberán ejecutarse los módulos a los cuales controla.
El diagrama de Top-Down, se lee de arriba hacia abajo y de izquierda a derecha, la relación de los
módulos es jerárquica, es decir, el módulo padre puede hacer uso de los módulos hijos pero no
viceversa.
11
Entenderemos por módulo padre al módulo inmediato superior al módulo actual y por módulo hijo
al módulo inmediato inferior del módulo actual.
Una característica adicional de la técnica Top-Down, es la definición del Módulo Raíz también
conocido como Módulo Principal y corresponde al módulo control que se define al principio del
árbol jerárquico como se aprecia en la figura anterior y del cual emanan las primeras
ramificaciones necesarias que aglutinan y unen a los módulos que forman la estructura total.
Considerando que muchos de los procesos que se llevan a cabo en la vida real, se componen de
tres etapas fundamentales a saber:
Inicio - Proceso - Cierre
Es que se define el Diagrama Top-Down básico que es aplicable a muchos de los problemas que
se presentan en la realidad:
Para los ejemplos relacionados con la solución de las ecuaciones matemáticas, el diagrama TopDown que podrían desarrollarse son los siguientes:
Ecuación lineal
12
Ecuación cuadrática
Para el caso del algoritmo que describe las actividades por la mañana para ir a la escuela o al
trabajo, el diagrama Top-Down podría ser el siguiente:
13
Estructuras de Control
Las estructuras de control se utilizan para controlar la secuencia y el flujo de ejecución de
instrucciones o módulos por lo que son de fundamental importancia en el desarrollo de los
algoritmos.
Se definen tres tipos de estructuras de control cuya representación gráfica se presenta a
continuación:
Estructura secuencial:
Estructura condicional o de selección:
Estructura iterativa o de repetición:
La estructura secuencial se caracteriza porque las instrucciones o los módulos se ejecutarán uno
tras el otro, es decir uno a uno.
En el caso de la estructura condicional, se podrá ejecutar el módulo A o el módulo B, es decir, uno
o el otro pero no los dos, dependiendo del resultado de la condición. De otra forma, si la condición
es verdadera entonces se ejecutará el módulo A, de lo contrario se ejecutará el módulo B.
En relación con la estructura iterativa, el módulo se ejecutará tantas veces mientras la condición
sea verdadera como se puede apreciar en el diagrama. Lo anterior considera la posibilidad de que
el módulo no se ejecute ni una vez, si es que la condición desde un inicio resulte ser falsa.
14
Cabe señalar que en la estructura condicional e iterativa la condición se refiere a una pregunta
cuyo resultado deberá ser verdadero o falso. Por ejemplo, considera la siguiente pregunta: ¿la
edad de la persona es mayor que 18 años? Cuya respuesta dependerá de la edad que tenga la
persona; es decir, si tiene 25 años, entonces la respuesta será verdadera; por el contrario, si la
persona tiene 15años, entonces la respuesta será falsa. Otro ejemplo puede ser el siguiente: ¿el
sueldo es mayor que $5,000.00? Donde nuevamente, el resultado dependerá del valor que tenga
el sueldo. Si el sueldo es de $6,500.00, entonces la pregunta será verdadera. De otra forma,
digamos que el sueldo es de $3,500.00, entonces será falsa.
Cabe señalar en este momento que una condición tendrá la siguiente estructura:
Operando 1
Tipo de relación
Operando 2
Donde Operando 1 y Operando 2 corresponde a los elementos que se relacionan mediante el tipo
de relación conforme la siguiente tabla:
Tipo de relación
=
>
>=
<
<=
<>
Significado
Igual que
Mayor que
Mayor o igual que
Menor
Menor o igual que
Diferente a
De esta manera una condición tal como: Estatura >= 1.80, significa preguntar si la estatura es
mayor o igual a 1.80 metros, otro ejemplo es el siguiente: Estatura < Limite, que equivale a
preguntar si la estatura es menor al Limite.
En este sentido, se establece que cualquier problema se puede resolver utilizando cualquiera de
las estructuras de control ya sea de manera individual o mediante una combinación de ellas, como
se puede observar en los siguientes ejemplos:
15
16
Pseudocódigo
El pseudocódigo es una valiosa herramienta para desarrollar la solución de un problema en
términos de la metodología estructurada en sus aspectos técnicos, utilizando un lenguaje escrito
en español y algunas palabras técnicas en inglés como apoyo en la identificación de las
estructuras de control y que no considera la rigurosidad técnica de los lenguajes de programación
como por ejemplo Pascal o Visual Basic.
Lo anterior facilita la elaboración de la solución del problema y permite que prácticamente
cualquier usuario pueda comprenderla sin necesidad de que conozca algún lenguaje de
programación o sea un experto en la elaboración de programas.
Para definir un módulo se utiliza la siguiente estructura:
MODULO: Nombre del módulo
BEGIN
Conjunto de instrucciones del módulo a ejecutar
END
En este caso, MODULO, BEGIN y END son palabras técnicas que se utilizan para identificar al
módulo así como el inicio (BEGIN) de las instrucciones y hasta donde llega (END).
Considera el siguiente ejemplo:
MODULO: Raíz
BEGIN
Solicita datos a, b y c
Control Calculo
Asigna valores
END
En el ejemplo se muestra la definición del módulo Raíz, en el cual se indica que se ejecuten los
módulos Solicita datos a, b y c primero, después el módulo Control Calculo y por último el módulo
Asigna valores.
17
En el ejemplo anterior, te puedes dar cuenta que para delimitar una estructura secuencial se hace
uso de las palabras en inglés BEGIN y END, cuya traducción al español es: INICIO y FIN como se
muestra en la siguiente estructura:
BEGIN
Conjunto de instrucciones a ejecutar
END
En el caso de la estructura de control condicional o de selección se utiliza la siguiente estructura
general:
IF condición THEN
Conjunto de instrucciones o módulos a ejecutar
cuando la condición es verdadera
ELSE
Conjunto de instrucciones o módulos a ejecutar
cuando la condición es falsa
ENDIF
En este caso, se utilizan en la estructura las palabras en inglés: IF, THEN, ELSE y ENDIF, para
delimitar las diferentes partes de la estructura de control. Si se hace una traducción se leería de la
siguiente manera: Si (IF) la condición es verdadera entonces (THEN) ejecuta las instrucciones que
están entre las palabras THEN y ELSE; de lo contario (ELSE), ejecuta las instrucciones que están
entre las palabras ELSE y ENDIF.
El siguiente ejemplo ilustra su aplicación:
IF Edad > 18 THEN
Despliega “Es mayor de edad”
ELSE
Despliega “Es menor de edad”
ENDIF
18
Al ejecutarse la instrucción dependiendo del valor de la condición (Edad > 18), entonces despliega
el texto: “Es mayor de edad”, de lo contrario despliega el texto: “Es menor de edad”.
La estructura condicional a menudo presenta también la siguiente forma:
IF condición THEN
Conjunto de instrucciones o módulos a ejecutar
cuando la condición es verdadera
ENDIF
Que se aplica cuando se desea que se ejecuten las instrucciones solamente cuando la condición
sea verdadera, de lo contrario no ejecuta nada.
En el caso de la estructura de control iterativa se utiliza la siguiente forma:
WHILE condición DO
Conjunto de instrucciones o módulos a ejecutar
mientras la condición es verdadera
ENDDO
Donde las palabras en inglés WHILE, DO y ENDDO delimitan las diferentes partes de la estructura
cuya traducción directa se leería de la siguiente forma: Mientras (WHILE) la condición sea
verdadera ejecuta (DO) el conjunto de instrucciones que están entre las palabras WHILE y
ENDDO. Un ejemplo de su aplicación es el siguiente caso:
WHILE Día de la semana <> Domingo DO
Despliega “El día de hoy es un día laborable”
ENDDO
Que despliega el texto “El día de hoy es un día laborable” mientras Día de la semana sea diferente
al Domingo.
19
Ejercicios de aplicación
Como se mencionó anteriormente, las cuatro técnicas se relacionan en la construcción de la
solución de un problema bajo la metodología estructurada.
A continuación resolvamos de manera conjunta el siguiente caso:
Caso I
A. Planteamiento del problema
Se requiere la elaboración de un programa que calcule el importe a pagar a los trabajadores de
una empresa de acuerdo al número de horas trabajadas, considerando que el pago por hora es la
misma para todos los trabajadores. Adicionalmente, se les aplicará un descuento del 15% por el
concepto de impuestos.
B. Propuesta de la solución
Para la definición de la solución se considera inicialmente que el pago por hora es el mismo para
todos los trabajadores, por lo que éste se solicita al principio de todo el proceso, posteriormente se
calcula el pago para cada trabajador considerando el total de horas trabajadas multiplicado por el
pago por hora, menos el 15% del pago total desplegándose los diferentes cálculos realizados.
El diagrama Top-Down que corresponde a esta solución es:
20
C. Pseudocódigo
Se presenta a continuación el pseudocódigo correspondiente a cada uno de los módulos de la
solución propuesta:
MÓDULO: Raíz
BEGIN
Solicita Pago X Hora
Control Calculo
END
MÓDULO: Solicita Pago X Hora
MÓDULO: Control Calculo
BEGIN
Despliega “Digita el pago por
hora”
Captura PagoXHora
END
BEGIN
WHILE Otro calculo de Pago DO
Solicita Horas trabajadas
Calcula Pago
Despliega Pago
END
MÓDULO: Solicita Horas
trabajadas
MÓDULO: Calcula Pago
MÓDULO: Despliega Calculos
BEGIN
Pago = (Horas-trabajadas)
(PahoXHora)
Impuesto = (Pago) (15%)
Pago Neto =Pago - Impuesto
END
BEGIN
Despliega Pago, Impuesto y
Pago Neto
END
BEGIN
Despliega “Digita el total de horas
trabajadas”
Captura Horas-trabajadas
END
Caso II
A. Planteamiento del problema
Una librería aplica una política de descuentos en el precio de sus libros de acuerdo con el color de
la etiqueta adherida al libro con el precio correspondiente conforme la siguiente tabla:
Color Etiqueta
Amarillo
Verde
Azul
Rojo
% Descuento
5
10
15
20
Se requiere la elaboración de un programa que calcule el importe a pagar por los clientes que
compran uno o más libros.
21
B. Propuesta de la solución
Para este caso, se debe considerar el acumulado del cálculo del importe a pagar de cada libro que
compra el cliente, por lo que este acumulado deberá estar en ceros al inicio del proceso, de lo
contrario se estará acumulando el importe de los libros de otros clientes. Por otro lado, también se
debe definir el tipo de descuento según el color de la etiqueta para el cálculo del importe en cada
libro.
El diagrama Top-Down que corresponde a esta solución es:
22
C. Pseudocódigo
Se presenta a continuación el pseudocódigo correspondiente a cada uno de los módulos de la
solución propuesta:
MÓDULO: Raíz
BEGIN
WHILE Otro Cliente DO
Inicializa totales
Control Calculo
Despliega Importe total
END
MÓDULO: Inicializa totales
MÓDULO: Control Calculo
MÓDULO: Despliega importe total
BEGIN
Importe Cliente = 0
END
BEGIN
WHILE Otro libro DO
Solicita Precio y Color
Define descuento
Acumula Pago
END
BEGIN
Despliega Importe Cliente
END
MÓDULO: Solicita Precio y Color
MÓDULO: Define descuento
MÓDULO: Acumula Pago
BEGIN
Despliega “Digita el Precio
Captura Precio
Despliega “Digita el Color de la
etiqueta”
Captura Color Etiqueta
END
BEGIN
IF Color Etiq = Amarillo THEN
Porc = 0.05
ENDIF
IF Color Etiq = Verde THEN
Porc = 0.10
ENDIF
IF Color Etiq = Azul THEN
Porc = 0.15
ELSE
Porc =0.20
ENDIF
BEGIN
Desc = Precio (Porc)
Importe Libro = Precio – Desc
Importe Cliente = Importe Cliente
+ Importe Libro
END
23
4. METODOLOGÍA ORIENTADA A OBJETOS
La metodología orientada a objetos se apoya en la programación estructurada y utiliza sus
técnicas para diseñar programas, se caracteriza por definir objetos con un determinado conjunto
de atributos y procedimientos que definen el comportamiento de los mismos.
Para entender mejor los conceptos relacionados con esta metodología lee el artículo publicado en
Internet por Luis R. Izquierdo y que reproducimos en el Anexo I de esta Guía.
24
5. PROGRAMACIÓN CON VISUAL BASIC
Visual Basic es un lenguaje de programación de alto nivel que incorpora elementos para
desarrollar programas conforme la metodología orientada a objetos. En este sentido, Visual Basic
ofrece la posibilidad de desarrollar aplicaciones para ambientes en modo de texto (tipo consola),
Windows (modo gráfico) e Internet (páginas web).
En particular nos enfocaremos al desarrollo de programas del tipo consola realizando los
siguientes pasos:
 Entrar a la aplicación de Visual Basic
 Seleccionar la opción “Nuevo Proyecto” de la pestaña “Proyectos” de la Página de Inicio
 Asignar como nombre del proyecto en el cuadro de diálogo “Nuevo Proyecto”:
“Consola1_Número del Equipo_Grupo”
 Seleccionar la pestaña “Module1.vb” del área de trabajo
 Aparecerá en el área de trabajo la estructura básica de un programa en Visual Basic
Module Module1
Sub Main()
End Sub
End Module
 Capturar el programa
 Ejecutar el programa con la tecla F5 o el botón con la punta de flecha derecha.
Para introducir los programas deberás tomar en cuenta las siguientes instrucciones que reconoce
Visual Basic:
Acción
Sintaxis
Despliega un texto
Console.Write (“Texto”)
Despliega un texto y pasa a la siguiente línea
Console.WriteLine (“Texto”)
Despliega una línea en blanco
Console.WriteLine()
Define una variable numérica
Dim Nombre_Variable as integer
Define una variable de caracteres
Dim Nombre_Variable as string
Despliega el contenido de una variable
Console.Write (Nombre_Variable)
Despliega el contenido de una variable y pasa a
la siguiente línea
Console.WriteLine (Nombre_Variable)
Lee del teclado
Console.ReadLine()
Asigna a una variable desde el teclado
Nombre_Variable = Console.ReadLine()
Asigna un valor a una variable
Nombre_Variable = Valor
Multiplicación de dos valores
Valor1 * Valor2
25
Captura los siguientes programas, ejecútalos y observa con cuidado los resultados que se pueden
observar en la pantalla.
Programa 1.
Sub Main()
Console.WriteLine("Hola estoy capturando desde el teclado")
Console.WriteLine()
Console.WriteLine("Esta es otra línea nueva.")
Console.WriteLine()
Console.WriteLine("Mi nombre es: ")
Console.ReadLine()
End Sub
Programa 2.
Sub Main()
Console.WriteLine("Esta es la primera línea")
Console.WriteLine("Ahora ponemos una línea vacía")
Console.WriteLine()
Console.WriteLine("A continuación escribimos un número")
Console.WriteLine(5891)
Console.WriteLine("Operaciones con números 500 + 150")
Console.WriteLine(500 + 150)
Console.WriteLine()
Console.WriteLine("Resultado de la expresión lógica: 5 > 2")
Console.WriteLine(5 > 2)
Console.ReadLine()
End Sub
Programa 3.
Sub Main()
Dim Nombre As String
Dim Numero As Integer
Nombre = "Luis"
Numero = 15
Console.Write("He visto a ")
Console.Write(Nombre)
Console.Write(" transportando ")
Console.Write(Numero)
Console.WriteLine(" cajas")
Console.ReadLine()
End Sub
Programa 4.
Sub Main()
Dim LineaTexto As String
Console.WriteLine("Introducir un texto")
LineaTexto = Console.ReadLine()
Console.WriteLine()
Console.WriteLine("El usuario ha escrito la siguiente línea:")
Console.WriteLine(LineaTexto)
Console.ReadLine()
End Sub
26
Para capturar los siguientes programas debes tomar en cuenta los siguientes elementos:
Acción
Despliega el contenido de una variable y pasa a
la siguiente línea
Sintaxis
Console.WriteLine (Nombre_Variable)
Lee del teclado
Console.ReadLine()
Asigna a una variable desde el teclado
Nombre_Variable = Console.ReadLine()
Asigna un valor a una variable
Nombre_Variable = Valor
Multiplicación de dos valores
Valor1 * Valor2
Ejecuta un conjunto de instrucciones hasta que
la condición sea falsa.
(Estructura de control DOWHILE)
Ejecuta las instrucciones que están después del
THEN y antes del Else si la condición es
verdadera, de lo contrario se ejecutan las
instrucciones que están después del ELSE y
antes del End If.
(Estructura de control condicional)
While condición
Código
End While
If condicion Then
Código A
Else
Código B
End If
Programa 5
Sub Main()
Dim Resp As String
Dim Radio As Integer
Resp = "s"
While Resp = "s"
Console.WriteLine("")
Console.WriteLine("******************************")
Console.WriteLine("")
Console.WriteLine("CALCULO DEL AREA DE UN CIRCULO")
Console.WriteLine("")
Console.Write("Radio del círculo: ")
Radio = Console.ReadLine()
Console.WriteLine("")
Console.Write("El area del circulo es: ")
Console.WriteLine(3.1416 * Radio * Radio)
Console.WriteLine("")
Console.Write("¿Deseas hacer otro cálculo? (s/n): ")
Resp = Console.ReadLine()
End While
End Sub
27
Programa 6:
Sub Main()
Dim Resp As String
Dim Radio As Integer
Dim Base As Integer
Dim Altura As Integer
Resp = "s"
While Resp = "s"
Console.WriteLine("")
Console.WriteLine("**********************************************")
Console.WriteLine("")
Console.WriteLine("CALCULO DEL AREA DE UN CIRCULO O UN TRIANGULO")
Console.WriteLine("")
Console.Write("¿La figura es un círculo? (s/n): ")
Resp = Console.ReadLine()
If Resp = "s" Then
Console.WriteLine("")
Console.WriteLine("La figura elegida es un círculo")
Console.WriteLine("")
Console.Write("Radio del círculo: ")
Radio = Console.ReadLine()
Console.WriteLine("")
Console.Write("El area del circulo es: ")
Console.WriteLine(3.1416 * Radio * Radio)
Else
Console.WriteLine("")
Console.WriteLine("La figura elegida es un triángulo")
Console.WriteLine("")
Console.Write("Base del triángulo: ")
Base = Console.ReadLine()
Console.WriteLine("")
Console.Write("Altura del triángulo: ")
Altura = Console.ReadLine()
Console.WriteLine("")
Console.Write("El area del triangulo es: ")
Console.WriteLine(0.5 * Base * Altura)
End If
Console.WriteLine("")
Console.Write("¿Deseas hacer otro cálculo? (s/n): ")
Resp = Console.ReadLine()
End While
End Sub
28
Finalmente captura el programa 7 que incluye el uso de los módulos y observa su gran parecido con la
estructura del pseudocódigo.
Programa 7
Module Module1
Dim Resp As Char
Dim CveTrab As String
Dim NumHrsTrab As Integer
Dim NumCar As Integer
Dim PrCar As Char
Dim Nivel As String
Dim PagoXHora As Integer
Dim Pago As Integer
Dim Impuesto As Integer
Dim Porc As Integer
Dim PagoNeto As Integer
Sub Main()
Resp = "s"
While Resp = "s"
SolicitaDatos()
ControlCalculo()
DespliegaPago()
Console.WriteLine()
Console.Write("¿Deseas hacer otro cálculo? (s/n): ")
Resp = Console.ReadLine()
End While
End Sub
Sub SolicitaDatos()
Console.WriteLine("*******************************************")
Console.WriteLine()
Console.Write("Digita la Clave del Trabajador: ")
CveTrab = Console.ReadLine()
Console.WriteLine()
Console.Write("Número de horas trabajadas: ")
NumHrsTrab = Console.ReadLine()
End Sub
Sub ControlCalculo()
IdentifNivel()
IdentifPagoXHora()
CalculaPago()
IdentifImpuesto()
CalculaPagoNeto()
End Sub
Sub IdentifNivel()
NumCar = Asc(CveTrab)
PrCar = Chr(NumCar)
If PrCar = "B" Then
Nivel = "Basico"
End If
If PrCar = "T" Then
Nivel = "Tecnico"
End If
29
If PrCar = "P" Then
Nivel = "Profesional"
End If
End Sub
Sub IdentifPagoXHora()
If Nivel = "Basico" Then
PagoXHora = 100
End If
If Nivel = "Tecnico" Then
PagoXHora = 150
End If
If Nivel = "Profesional" Then
PagoXHora = 200
End If
End Sub
Sub CalculaPago()
Pago = NumHrsTrab * PagoXHora
End Sub
Sub IdentifImpuesto()
If Pago > 5000 Then
Porc = 25
End If
If Pago > 3000 Then
Porc = 20
End If
If Pago > 1000 Then
Porc = 15
Else
Porc = 10
End If
End Sub
Sub CalculaPagoNeto()
Impuesto = Pago * Porc / 100
PagoNeto = Pago - Impuesto
End Sub
Sub DespliegaPago()
Console.WriteLine()
Console.Write("Pago del trabajador: ")
Console.WriteLine(Pago)
Console.Write("Impuesto: ")
Console.WriteLine(Impuesto)
Console.Write("Pago Neto del trabajador: ")
Console.WriteLine(PagoNeto)
End Sub
End Module
30
6. EJERCICIOS PARA DESARROLLAR
A. Dado el siguiente laberinto encuentra tres rutas que te permitan llegar a la salida.
¿Cuál de los tres algoritmos es el óptimo y explica por qué?
E
Movimientos
válidos












S
Algoritmo: ______________________________________________________________________
E
Movimientos
válidos












S
Algoritmo: ______________________________________________________________________
31
E
Movimientos
válidos












S
Algoritmo: ______________________________________________________________________
B. Elabora el algoritmo de acuerdo con la metodología lineal para las siguientes dos situaciones:
I. Elabora el algoritmo lineal para calcular el área del trapecio:
.
II. Desarrolla el algoritmo que describe los pasos que sigues cuando consultas una
información en Google en un café Internet.
32
C. Dados los valores que se indican en la siguiente tabla, define si las condiciones son verdaderas
o falsas:
a
b
c
1
2
2
2
1
3
2
3
2
3
3
1
3
1
3
2
2
2
Operando
1
2 a + b -c
a – b + 4c
5
a+b–2c
a–b-c
a–b-c
Tipo de
relación
=
<=
>=
<>
<
>
Operando
2
0
3 a -2c
2 a + 3 b +c
2a+b-c
b – 4ac
b – 4ac
Resultado
(V/F)
D. Elabora el pseudocódigo que resuelve los dos problemas que se presentan a continuación:
I El cálculo de las soluciones de la ecuación de segundo grado cuyo diagrama Top-Down se desarrolló
en la página 13 de esta Guía.
II Calcular el pago que se debe hacer a los empleados de una fábrica de acuerdo al número de horas
trabajadas, si se considera que el pago por hora es de acuerdo a su nivel de especialización que se
conoce por la primera letra de su clave conforme la siguiente tabla:
Nivel de
especialización
Básico
Técnico
Profesional
Pago
por
hora
100
150
200
Clave del
trabajador
B000
T000
P000
E. Una vez que hayas leído el artículo del Anexo I contesta las siguientes preguntas que se
relacionan con la metodología orientada a objetos:
 ¿Cómo surge la metodología orientada a los objetos?
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________
 ¿Qué es la metodología orientada a los objetos?
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________
33
 ¿Qué son los objetos?
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________
 ¿A qué se refiere la identidad de los objetos?
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________
 ¿A qué se refieren las propiedades de los objetos?
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________
 ¿A qué se refieren los métodos de los objetos?
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________
 Da un ejemplo de un objeto señalando su identidad, algunas de sus propiedades y métodos
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________
 ¿Qué son los mensajes entre los objetos?
____________________________________________________________________________________
____________________________________________________________________________________
 ¿Cuáles son las tres partes de las que se forman los mensajes?
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________
34
 ¿A qué se refieren las clases de objetos?
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________
 ¿Qué es una instancia de una clase?
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________
 Da un ejemplo de una clase de objetos y menciona tres instancias de esa clase.
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________
 ¿A qué se refiere la herencia entre los objetos?
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________
 ¿Qué es una superclases y una subclase en los objetos?
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________
 Da un ejemplo de una superclase y subclase de objetos.
____________________________________________________________________________________
____________________________________________________________________________________
____________________________________________________________________________________
35
ANEXO I
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS
Luis R. Izquierdo
INTRODUCCIÓN
Es importante aclarar desde un principio la diferencia que existe entre programación orientada a
objetos y un lenguaje orientado a objetos.
La programación orientada a objetos es una “filosofía”, un modelo de programación, con su teoría
y su metodología, que conviene conocer y estudiar antes de nada. Un lenguaje orientado a objetos
es un lenguaje de programación que permite el diseño de aplicaciones orientadas a objetos. Dicho
esto, lo normal es que toda persona que vaya a desarrollar aplicaciones orientadas a objetos
aprenda primero la “filosofía” (o adquiera la forma de pensar) y después el lenguaje, porque
“filosofía” sólo hay una y lenguajes muchos. En este documento veremos brevemente los
conceptos básicos de la programación orientada a objetos desde un punto de vista global, sin
particularizar para ningún lenguaje de programación específico.
UNA FORMA NUEVA DE PENSAR
Es muy importante destacar que cuando hacemos referencia a la programación orientada a
objetos no estamos hablando de unas cuantas características nuevas añadidas a un lenguaje de
programación. Estamos hablando de una nueva forma de pensar acerca del proceso de
descomposición de problemas y de desarrollo de soluciones de programación.
La programación orientada a objetos surge en la historia como un intento para dominar la
complejidad que, de forma innata, posee el software. Tradicionalmente, la forma de enfrentarse a
esta complejidad ha sido empleando lo que llamamos programación estructurada, que consiste en
descomponer el problema objeto de resolución en subproblemas y más subproblemas hasta llegar
a acciones muy simples y fáciles de codificar. Se trata de descomponer el problema en acciones,
en verbos. En el ejemplo de un programa que resuelva ecuaciones de segundo grado,
descomponíamos el problema en las siguientes acciones: primero, pedir el valor de los
coeficientes a, b y c; después, calcular el valor del discriminante; y por último, en función del signo
del discriminante, calcular ninguna, una o dos raíces.
Como podemos ver, descomponíamos el problema en acciones, en verbos; por ejemplo el verbo
pedir, el verbo hallar, el verbo comprobar, el verbo calcular… La programación orientada a objetos
es otra forma de descomponer problemas. Este nuevo método de descomposición es la
descomposición en objetos; vamos a fijarnos no en lo que hay que hacer en el problema, sino en
cuál es el escenario real del mismo, y vamos a intentar simular ese escenario en nuestro
programa.
Los lenguajes de programación tradicionales no orientados a objetos, como C, Pascal, BASIC, o
Modula-2, basan su funcionamiento en el concepto de procedimiento o función. Una función es
simplemente un conjunto de instrucciones que operan sobre unos argumentos y producen un
resultado. De este modo, un programa no es más que una sucesión de llamadas a funciones, ya
sean éstas del sistema operativo, proporcionadas por el propio lenguaje, o desarrolladas por el
mismo usuario.
36
En el caso de los lenguajes orientados a objetos, como es el caso de C++ y Java, el elemento
básico no es la función, sino un ente denominado precisamente objeto. Un objeto es la
representación en un programa de un concepto, y contiene toda la información necesaria para
abstraerlo: datos que describen sus atributos y operaciones que pueden realizarse sobre los
mismos.
La programación orientada a objetos es una nueva forma de pensar, una manera distinta de
enfocar los problemas. Ahí radica la dificultad de aprender un lenguaje totalmente orientado a
objetos, como es Java, sin conocer previamente los pilares de la programación orientada a
objetos. Hecha esta importante aclaración, conviene destacar que Java, más que un lenguaje
orientado a objetos, es un lenguaje de objetos. Java incorpora el uso de la orientación a objetos
como uno de los pilares básicos y fundamentales del lenguaje. Esto constituye una importante
diferencia con respecto a C++. C++ está pensado para su utilización como lenguaje orientado a
objetos, pero también es cierto que con C++ se puede escribir código sin haber oído nada de la
programación orientada a objetos. Esta situación no se da en Java, dotado desde las primeras
etapas de su diseño de esta filosofía, y donde no cabe obviar la orientación a objetos para el
desarrollo de programas, por sencillos que éstos sean. Al contrario que en C++, en Java nada se
puede hacer sin usar al menos un objeto.
UN PRIMER EJEMPLO
Si nos detenemos a pensar sobre cómo se nos plantea un problema cualquiera en la realidad
podremos ver que lo que hay en la realidad son entidades (otros nombres que podríamos usar
para describir lo que aquí llamo entidades son “agentes” u “objetos”). Estas entidades poseen un
conjunto de propiedades o atributos, y un conjunto de métodos mediante los cuales muestran su
comportamiento. Y no sólo eso, también podremos descubrir, a poco que nos fijemos, todo un
conjunto de interrelaciones entre las entidades, guiadas por el intercambio de mensajes; las
entidades del problema responden a estos mensajes mediante la ejecución de ciertas acciones. El
siguiente ejemplo, aunque pueda parecer un poco extraño, creo que aclarará algunos conceptos y
nos servirá como introducción para desarrollarlos con profundidad.
Imaginemos la siguiente situación: un domingo por la tarde estoy en casa viendo la televisión, y de
repente mi madre siente un fuerte dolor de cabeza; como es natural, lo primero que hago es tratar
de encontrar una caja de aspirinas.
Lo que acabo de describir es una situación que probablemente no resulte muy extraña a muchos
de nosotros. Vamos a verla en clave de objetos: el objeto hijo ha recibido un mensaje procedente
del objeto madre. El objeto hijo responde al mensaje o evento ocurrido mediante una acción:
buscar aspirinas. La madre no tiene que decirle al hijo dónde debe buscar, es responsabilidad del
hijo resolver el problema como considere más oportuno. Al objeto madre le basta con haber
emitido un mensaje. Continuemos con la historia.
El hijo no encuentra aspirinas en el botiquín y decide acudir a la farmacia de guardia más cercana
para comprar aspirinas. En la farmacia es atendido por una señorita que le pregunta qué desea, a
lo que el hijo responde: "una caja de aspirinas, por favor". La farmacéutica desaparece para
regresar al poco tiempo con una caja de aspirinas en la mano. El hijo paga el importe, se despide y
vuelve a su casa. Allí le da un comprimido a su madre, la cual al cabo de un rato comienza a
experimentar una notable mejoría hasta la completa desaparición del dolor de cabeza.
El hijo, como objeto responsable de un cometido, sabe lo que debe hacer hasta conseguir una
aspirina. Para ello entra en relación con un nuevo objeto, la farmacéutica, quien responde al
mensaje o evento de petición del objeto hijo con la búsqueda de la aspirina. El objeto farmacéutica
37
es ahora el responsable de la búsqueda de la aspirina. El objeto farmacéutica lanza un mensaje al
objeto hijo solicitando el pago del importe, y el objeto hijo responde a tal evento con la acción de
pagar.
Como hemos podido ver, en esta situación nos hemos encontrado con objetos que se
diferenciaban de los demás por un conjunto de características o propiedades, y por un conjunto de
acciones que realizaban en respuesta a unos eventos que se originaban en otros objetos o en el
entorno.
También podemos darnos cuenta de que, aunque todos los objetos tienen propiedades distintas,
como el color del cabello, el grado de simpatía o el peso, todos tienen un conjunto de atributos en
común por ser ejemplos de una entidad superior llamada “ser humano”. A este patrón de objetos
(en nuestro caso “ser humano”) lo llamaremos clase.
Con este ejemplo espero que se entienda que los objetos son instancias o casos concretos de las
clases, que no son más que plantillas que definen las variables y los métodos comunes a todos los
objetos de un cierto tipo. La clase “ser humano” tendrá, entre sus muchas variables miembro o
variables que la componen: color del cabello, color de los ojos, estatura, peso, fecha de
nacimiento, etc. A partir de una clase se podrán generar todos los objetos que se deseen
especificando valores particulares para cada una de las variables definida por la clase. Así,
encontraremos el objeto farmacéutica, cuyo color de cabello es rubio, color de ojos azul, estatura
175 cm., peso 50 Kg., y así sucesivamente.
A continuación veremos con más detalle qué son los objetos, las clases, los mensajes y otros
conceptos básicos de la programación orientada a objetos.
¿QUÉ ES UN OBJETO?
Un objeto no es más que un conjunto de variables (o datos) y métodos (o funciones) relacionados
entre sí. Los objetos en programación se usan para modelar objetos o entidades del mundo real (el
objeto hijo, madre, o farmacéutica, por ejemplo). Un objeto es, por tanto, la representación en un
programa de un concepto, y contiene toda la información necesaria para abstraerlo: datos que
describen sus atributos y operaciones que pueden realizarse sobre los mismos. La siguiente figura
muestra una representación visual de un objeto.
Representación visual de un objeto
38
Los atributos del objeto (estado) y lo que el objeto puede hacer (comportamiento) están
expresados por las variables y los métodos que componen el objeto respectivamente. Por ejemplo,
un objeto que modelase una bicicleta en el mundo real tendría variables que indicararían el estado
actual de la bicicleta: su velocidad es de 20 km/h, su cadencia de pedaleo 90 r.p.m. y su marcha
actual es la 5ª. Estas variables se conocen formalmente como variables instancia o variables
miembro porque contienen el estado de un objeto bicicleta particular y, en programación orientada
a objetos, un objeto particular se denomina una instancia.
Además de estas variables, el objeto bicicleta podría tener métodos para frenar, cambiar la
cadencia de pedaleo, y cambiar de marcha (la bicicleta no tendría que tener un método para
cambiar su velocidad pues ésta es función de la cadencia de pedaleo, la marcha en la que está y
de si los frenos están siendo utilizados o no, entre otros muchos factores). Estos métodos se
denominan formalmente métodos instancia o métodos miembro, ya que cambian el estado de una
instancia u objeto bicicleta particular. La siguiente figura muestra una bicicleta modelada como un
objeto:
El diagrama del objeto bicicleta muestra las variables objeto en el núcleo o centro del objeto y los
métodos rodeando el núcleo y protegiéndolo de otros objetos del programa.
Este hecho de empaquetar o proteger las variables miembro con los métodos miembro se
denomina encapsulación. Este dibujo conceptual que muestra el núcleo de variables miembro del
objeto protegido por una membrana protectora de métodos o funciones miembro es la
representación ideal de un objeto y es el ideal que los programadores de objetos suelen buscar.
Sin embargo, debemos matizarlo. A menudo, por razones prácticas, es posible que un objeto
desee exponer alguna de sus variables miembro, o proteger otras de sus propios métodos o
funciones miembro. Por ejemplo, Java permite establecer 4 niveles de protección de las variables y
de las funciones miembro para casos como éste. Los niveles de protección determinan qué objetos
y clases pueden acceder a qué variables o a qué métodos.
De cualquier forma, el hecho de encapsular las variables y las funciones miembro relacionadas
proporciona dos importantes beneficios a los programadores de aplicaciones:
 Capacidad de crear módulos: El código fuente de un objeto puede escribirse y mantenerse
independiente del código fuente del resto de los objetos. De esta forma, un objeto puede
pasarse fácilmente de una parte a otra del programa. Podemos dejar nuestra bicicleta a un
amigo, y ésta seguirá funcionando.
39
 Protección de información: Un objeto tendrá una interfaz pública perfectamente definida
que otros objetos podrán usar para comunicarse con él. De esta forma, los objetos pueden
mantener información privada y pueden cambiar el modo de operar de sus funciones
miembros sin que esto afecte a otros objetos que usen estas funciones miembro. Es decir,
no necesitamos entender cómo funciona el mecanismo de cambio de marcha para hacer
uso de él.
¿QUÉ ES UN MENSAJE?
Normalmente un único objeto por sí solo no es muy útil. En general, un objeto aparece como un
componente más de un programa o una aplicación que contiene otros muchos objetos. Es
precisamente haciendo uso de esta interacción como los programadores consiguen una
funcionalidad de mayor orden y modelar comportamientos mucho más complejos. Una bicicleta (a
partir de ahora particularizaremos) colgada de un gancho en el garaje no es más que una
estructura de aleación de titanio y un poco de goma. Por sí sola, tu bicicleta (por poner una
bicicleta en concreto) es incapaz de desarrollar ninguna actividad. Tu bicicleta es realmente útil en
tanto que otro objeto (tú) interactúa con ella (pedalea).
Los objetos de un programa interactúan y se comunican entre ellos por medio de mensajes.
En ocasiones, el objeto que recibe el mensaje necesita más información para saber exactamente
lo que tiene que hacer; por ejemplo, cuando se desea cambiar la marcha de una bicicleta, se debe
indicar la marcha a la que se quiere cambiar. Esta información se pasa junto con el mensaje en
forma de parámetro.
La siguiente figura muestra las tres partes que componen un mensaje:
1. El objeto al cual se manda el mensaje (TuBicicleta).
2. El método o función miembro que debe ejecutar (CambiarDeMarcha).
3. Los parámetros que necesita ese método (Marcha)
40
Estas tres partes del mensaje (objeto destinatario, método y parámetros) son suficiente
información para que el objeto que recibe el mensaje ejecute el método o la función miembro
solicitada. Los mensajes proporcionan dos ventajas importantes:
 El comportamiento de un objeto está completamente determinado (a excepción del acceso
directo a variables miembro públicas) por sus métodos, así que los mensajes representan
todas las posibles interacciones que pueden realizarse entre objetos.
 Los objetos no necesitan formar parte del mismo proceso, ni siquiera residir en un mismo
ordenador para mandarse mensajes entre ellos (y de esta forma interactuar).
¿QUÉ ES UNA CLASE?
Normalmente en el mundo real existen varios objetos de un mismo tipo, o como diremos
enseguida, de una misma clase. Por ejemplo, mi bicicleta es una de las muchas bicicletas que
existen en el mundo. Usando la terminología de la programación orientada a objetos, diremos que
mi bicicleta es una instancia de la clase de objetos conocida como bicicletas. Todas las bicicletas
tienen algunos estados o atributos (color, marcha actual, cadencia actual, dos ruedas) y algunos
métodos (cambiar de marcha, frenar) en común. Sin embargo, el estado particular de cada
bicicleta es independiente del estado de las demás bicicletas. La particularización de estos
atributos puede ser diferente. Es decir, una bicicleta podrá ser azul, y otra roja, pero ambas tienen
en común el hecho de tener una variable “color”. De este modo podemos definir una plantilla de
variables y métodos para todas las bicicletas. Las plantillas para crear objetos son denominadas
clases.
Una clase es una plantilla que define las variables y los métodos que son comunes para todos los
objetos de un cierto tipo.
En nuestro ejemplo, la clase bicicleta definiría variables miembro comunes a todas las bicicletas,
como la marcha actual, la cadencia actual, etc. Esta clase también debe declarar e implementar
los métodos o funciones miembro que permiten al ciclista cambiar de marcha, frenar, y cambiar la
cadencia de pedaleo, como se muestra en la siguiente figura:
41
Después de haber creado la clase bicicleta, podemos crear cualquier número de objetos bicicleta a
partir de la clase. Cuando creamos una instancia de una clase, el sistema reserva suficiente
memoria para el objeto con todas sus variables miembro. Cada instancia tiene su propia copia de
las variables miembro definidas en la clase.
HERENCIA
Una vez que hemos visto el concepto de clase y el de objeto, estamos en condiciones de introducir
otra de las características básicas de la programación orientada a objetos: el uso de la herencia.
El mecanismo de herencia permite definir nuevas clases partiendo de otras ya existentes. Las
clases que derivan de otras heredan automáticamente todo su comportamiento, pero además
pueden introducir características particulares propias que las diferencian.
Como hemos visto, los objetos se definen a partir de clases. Con el mero hecho de conocer a qué
clase pertenece un objeto, ya se sabe bastante sobre él. Puede que no sepamos lo que es la
“Espada”, pero si nos dicen que es una bicicleta, ya sabremos que tiene dos ruedas, manillar,
pedales...
La programación orientada a objetos va más allá, permitiéndonos definir clases a partir de otras
clases ya construidas. Por ejemplo, las bicicletas de montaña, las de carretera y los tándems son
todos, en definitiva, bicicletas. En términos de programación orientada a objetos, son subclases o
clases derivadas de la clase bicicleta. Análogamente, la clase bicicleta es la clase base o
superclase de las bicicletas de montaña, las de carretera y los tándems. Esta relación se muestra
en la siguiente figura.
42
Cada subclase hereda los estados (en forma de declaración de variables) de la superclase de la
cual deriva. Las bicicletas de montaña, las de carretera y los tándems comparten algunos estados:
cadencia, velocidad... Además, cada subclase hereda los métodos de su superclase.
Las bicicletas de montaña, las de carretera y los tándems comparten algunos comportamientos:
frenar y cambiar la cadencia de pedaleo, por ejemplo.
Sin embargo, las clases derivadas no se encuentran limitadas por los estados y comportamientos
que heredan de su superclase. Muy al contrario, estas subclases pueden añadir variables y
métodos a aquellas que han heredado. Los tándems tienen dos asientos y dos manillares; algunas
bicicletas de montaña tienen una catalina adicional con un conjunto de marchas con relaciones de
transmisión mucho más cortas. Las clases derivadas pueden incluso sobrescribir los métodos
heredados y proporcionar implementaciones más especializadas para esos métodos. Por ejemplo,
si nuestra bicicleta de montaña tuviera una catalina extra, podríamos sobrescribir el método
“CambiarDeMarcha” para poder usar esas nuevas marchas.
Además, no estamos limitados a un único nivel de herencia. El árbol de herencias o jerarquía de
clases puede ser tan extenso como necesitemos. Los métodos y las variables miembro se
heredarán hacia abajo a través de todos los niveles de la jerarquía. Normalmente, cuanto más
abajo está una clase en la jerarquía de clases, más especializado es su comportamiento. En
nuestro ejemplo, podríamos hacer que la clase bicicleta derivase de una superclase de vehículos.
La herencia es una herramienta clave para abordar la resolución de un problema de forma
organizada, pues permite definir una relación jerárquica entre todos los conceptos que se están
manejando. Es posible emplear esta técnica para descomponer un problema de cierta magnitud en
un conjunto de problemas subordinados a él. La resolución del problema original se consigue
cuando se han resuelto cada uno de los problemas subordinados, que a su vez pueden contener
otros. Por consiguiente, la capacidad de descomponer un problema o concepto en un conjunto de
objetos relacionados entre sí cuyo comportamiento es fácilmente identificable puede ser
extraordinariamente útil para el desarrollo de programas informáticos.
43
La herencia proporciona las siguientes ventajas:
 Las clases derivadas o subclases proporcionan comportamientos especializados a partir de
los elementos comunes que hereda de la clase base. A través del mecanismo de herencia
los programadores pueden reutilizar el código de la superclase tantas veces como sea
necesario.
 Los programadores pueden implementar las llamadas superclases abstractas, que definen
comportamientos genéricos. Las clases abstractas definen e implementan parcialmente
comportamientos, pero gran parte de estos comportamientos no se definen ni se
implementan totalmente. De esta forma, otros programadores pueden hacer uso de estas
superclases detallando esos comportamientos con subclases especializadas. El propósito
de una clase abstracta es servir de modelo base para la creación de otras clases
derivadas, pero cuya implantación depende de las características particulares de cada una
de ellas. Un ejemplo de clase abstracta podría ser en nuestro caso la clase vehículos. Esta
clase sería una clase base genérica, a partir de la cual podríamos ir creando todo tipo de
clases derivadas.
44
Descargar