Está en la página 1de 91

1. Conceptos básicos del modelo orientado a objetos.

Modelo orientado a objetos


El modelo orientado a objetos es el modelo teórico que usa la mayoría de los
programas actuales. La programación orientada a objetos hunde sus raíces en los
años sesenta (en los que aparecieron los primeros lenguajes de este tipo,
llamados “Simula I” y “Simula 67”, desarrollados en el Centro Noruego de
Computación, en Oslo). En los primeros 70, aparece “Smalltalk”, un lenguaje
fundamental en la historia de la orientación a objetos.
Sin embargo, no es hasta la segunda mitad de los años 80 cuando la orientación
de objetos se generaliza, convirtiéndose en el estándar predominante en los años
90, de la mano de lenguajes como C++ y Java. El triunfo de la programación
orientada a objetos ha sido impulsado por la enorme difusión de otras tecnologías
(como la interfaz gráfica o las arquitecturas distribuidas) que son más fáciles de
implementar mediante este tipo de desarrollo que mediante una programación
tradicional.
La orientación a objetos es modelar los programas de una forma parecida a cómo
percibimos la realidad.
La programación orientada a objetos intenta modelar estos objetos reales con
estructuras de programa, llamadas “objetos de software” o, simplemente,
“objetos”. Cada uno de estos objetos de software, está compuesto por una serie
de características (llamadas “atributos”) y una serie de acciones (llamadas
“métodos”), al igual que un objeto de la vida real.
Los mecanismos básicos de orientación a objetos son: objetos, mensajes y
métodos, clases e instancias y herencia

1
1.1 Reconocimiento de objetos y clases en el mundo real y la interacción
entre ellos.
Un objeto es una representación detallada, concreta y particular de un algo. Tal
representación determina su identidad, su estado y su comportamiento particular
en un momento dado.
La Identidad de un objeto le permite ser distinguido de entre otros y esto se da
gracias a la dirección de memoria, son distintos si ocupan distintas direcciones de
memoria. El estado de un objeto es el conjunto de valores concretos que lo
caracterizan en un momento dado, como peso, color, precio, etc.
El comportamiento define un conjunto de funciones que el objeto es capaz de
llevar a cabo. Tales funciones pueden estar relacionadas entre sí, modificar el
estado del objeto o invocar funcionalidades de otros objetos, entre muchas otras
cosas más.
El paradigma orientado a objetos
Durante muchos años el término Orientado a Objetos (OO) se usó para referirse a
un enfoque de desarrollo de software que usaba uno de los lenguajes orientados a
objetos (Ada 95, C++, Eiffel, Smalltalk, etc., la programación orientada a objetos
es un nuevo paradigma. La orientación a objetos fuerza a reconsiderar nuestro
pensamiento sobre la computación, sobre lo que significa realizar computación y
sobre cómo se estructura la información dentro de la computadora.
Existen cuatro clases de estilos de programación:
• Orientados a procedimientos: Algoritmos.
• Orientados a objetos: Clases y Objetos.
• Orientados a lógica: Expresado en cálculo de predicados.
• Orientados a reglas: Reglas if-then.

Orientación a Objetos
La orientación a objetos puede describirse como el conjunto de disciplinas que
desarrollan y modelizan software que facilitan la construcción de sistemas
complejos a partir de componentes.
El atractivo intuitivo de la orientación a objetos es que proporciona conceptos y
herramientas con las cuales se modela y representa el mundo real tan fielmente
como sea posible. Estos conceptos y herramientas orientados a objetos son
tecnologías que permiten que los problemas del mundo real sean expresados de
modo fácil y natural.

2
La orientación a objetos trata de cubrir las necesidades de los usuarios finales, así
como las propias de los desarrolladores de productos software. Estas tareas se
realizan mediante la modelización del mundo real. El soporte fundamental es el
modelo objeto.
Un objeto es la instancia de una clase.
Una clase es la representación abstracta de un concepto en el mundo real, y
proporciona la base a partir de la cual creamos instancias de objetos específicos.
Cada objeto es un elemento único de la clase en la que se basa. Si una clase es
como un molde, entonces un objeto es lo que se crea a partir del molde. La clase
es la definición de un elemento; el objeto es el elemento. El molde para una figura
de cerámica en particular, es como una clase; la figura es el objeto.
Todos los objetos están compuestos de tres cosas:
 Interfaz  Implementación  Estado
Interfaz
La Interfaz es el conjunto de métodos, propiedades, eventos y atributos que se
declaran como públicos en su alcance y que pueden invocar los programas
escritos para usar nuestro objeto.
Implementación
Al código dentro de los métodos se le llama Implementación. Algunas veces
también se le llama comportamiento, ya que este código es el que efectivamente
logra que el objeto haga un trabajo útil.
Es importante entender que las aplicaciones del cliente pueden utilizar nuestro
objeto aunque cambiemos la implementación, siempre que no cambiemos la
interfaz. Siempre que se mantengan sin cambio nuestro nombre de método, su
lista de parámetro y el tipo de datos de devolución, podremos cambiar la
implementación totalmente.
Estado
El estado o los datos de un objeto es lo que lo hace diferente de otros objetos de
la misma clase. El estado se describe a través de las variables del Miembro o de
la Instancia. Las variables del miembro son aquellas declaradas, de tal manera
que están disponibles para todo el código dentro de la clase. Por lo general, las
variables del miembro son Privadas en su alcance. Algunas veces, se les conoce
como variables de la instancia o como atributos. Observe que las propiedades no
son variables del Miembro, ya que son un tipo de método que funciona para
recuperar y establecer valores.

3
¿Qué es la clase?
Una Clase se define como la generalización de un objeto en particular. Es decir,
una clase representa a una familia de objetos concretos.
De lo anterior, podemos decir que una instancia de una clase es siempre un objeto
en particular.
Una clase es esencialmente un proyecto, a partir del cual puede crear objetos.
Una clase define las características de un objeto, incluyendo las propiedades que
definen los tipos de datos que ese objeto puede contener y los métodos que
describen el comportamiento del objeto. Estas características determinan la
manera en que otros objetos pueden acceder y trabajar con los datos que se
incluyen en el objeto.
Para definir una clase, se coloca la palabra clave Class antes del nombre de su
clase, y después se insertan los miembros de la clase (datos y métodos) entre la
definición del nombre de la clase y la instrucción End Class. Si incluye los
métodos, entonces el código de cada método también se debe incluir entre la
declaración del método y el final del mismo.
Una clase es un tipo definido por el usuario en contraposición a un tipo
proporcionado por el sistema. Al definir una clase, en realidad crea un nuevo tipo
en su aplicación.
Las propiedades más importantes de las clases son:
• Abstracción.
• Encapsulamiento.
• Modularidad.
• Jerarquía.
• Polimorfismo.
Si alguno de estos elementos no existe se dice que el modelo no es orientado a
objetos.

Interacción entre clase-objeto


Durante la ejecución de un programa, los diversos objetos que lo componen
han de interactuar entre sí para lograr una serie de objetivos comunes.
Existen varios tipos de relaciones que pueden unir a los diferentes objetos, pero
entre ellas destacan las relaciones de: asociación, todo/parte, y
generalización/especialización.

4
A.) Relaciones de Asociación
Serían relaciones generales, en las que un objeto realiza llamadas a los servicios
(métodos) de otro, interactuando de esta forma con él.
Representan las relaciones con menos riqueza semántica.
B.) Relaciones de Todo/Parte
Muchas veces una determinada entidad existe como conjunción de otras
entidades, como un conglomerado de ellas. La orientación al objeto recoge este
tipo de relaciones como dos conceptos; la agregación y la composición.
En este tipo de relaciones un objeto componente se integra en un objeto
compuesto. La diferencia entre agregación y composición es que mientras que la
composición se entiende que dura durante toda la vida del objeto componedor, en
la agregación no tiene por qué ser así.
C.) Relaciones de Generalización/Especialización
A veces sucede que dos clases tienen muchas de sus partes en común, lo que
normalmente se abstrae en la creación de una tercera clase (padre de las dos)
que reúne todas sus características comunes.
Este tipo de relaciones es característico de la programación orientada a objetos.
En realidad, la generalización y la especialización son diferentes perspectivas del
mismo concepto, la generalización es una perspectiva ascendente (bottom-up),
mientras que la especialización es una perspectiva descendente (top-down).

5
1.2 La abstracción y el encapsulamiento como un proceso natura.
En general un programa no es más que una descripción abstracta de un
procedimiento o fenómeno que existe o sucede en el mundo real. Los mecanismos
utilizados por los programadores para controlar la complejidad; entre todos ellos
se destaca la abstracción.
Programación y Abstracción: Los humanos hemos desarrollado una técnica
excepcionalmente potente para tratar la complejidad: abstraernos de ella.
Incapaces de dominar en su totalidad los objetos complejos, se ignoran los
detalles no esenciales, tratando en su lugar con el modelo ideal de objeto y
centrándonos en el estudio de sus aspectos esenciales.”
Abstracción: Es la capacidad para encapsular y aislar la información del diseño y
ejecución. Módulos Tipos Abstractos de Datos
La abstracción es crucial para comprender este complejo mundo, es esencial para
el funcionamiento de una mente humana normal y es una herramienta muy
potente para tratar la complejidad. Es la clave para diseñar buen software.
El método más idóneo para controlar la complejidad fue aumentar los niveles de
abstracción.
El procedimiento proporcionó la primera posibilidad de ocultación de información.
Un programador podía escribir un procedimiento o conjunto de procedimientos que
se utilizaban por otros programadores.
Encapsulamiento: es el proceso por el cual los datos que se deben enviar a
través de una red se deben colocar en paquetes que se puedan administrar y
rastrear. El encapsulado consiste pues en ocultar los detalles de implementación
de un objeto, pero a la vez se provee una interfaz pública por medio de sus
operaciones permitidas. Considerando lo anterior también se define el
encapsulado como la propiedad de los objetos de permitir el acceso a su estado
únicamente a través de su interfaz o de relaciones preestablecidas con otros
objetos.

6
1.3 La POO y la complejidad del software.
La programación Orientada a objetos (POO) es una forma especial de programar,
más cercana a como expresaríamos las cosas en la vida real que otros tipos de
programación.
Básicamente la POO permite a los programadores escribir software, de forma que
esté organizado en la misma manera que el problema que trata de modelizar. Los
lenguajes de programación convencionales son poco más que una lista de
acciones a realizar sobre un conjunto de datos en una determinada secuencia. Si
en algún punto del programa modificamos la estructura de los datos o la acción
realizada sobre ellos, el programa cambia.
La POO proporciona las siguientes ventajas sobre otros lenguajes de
programación:
**Uniformidad. Ya que la representación de los objetos lleva implica tanto el
análisis como el diseño y la codificación de los mismos.
**Comprensión. Tanto los datos que componen los objetos, como los
procedimientos que los manipulan, están agrupados en clases, que se
corresponden con las estructuras de información que el programa trata.
**Flexibilidad. Al tener relacionados los procedimientos que manipulan los datos
con los datos a tratar, cualquier cambio que se realice sobre ellos quedará
reflejado automáticamente en cualquier lugar donde estos datos aparezcan.
**Estabilidad. Dado que permite un tratamiento diferenciado de aquellos objetos
que permanecen constantes en el tiempo sobre aquellos que cambian con
frecuencia permite aislar las partes del programa que permanecen inalterables en
el tiempo.
**Reusabilidad. La noción de objeto permite que programas que traten las
mismas estructuras de información reutilicen las definiciones de objetos
empleadas en otros programas e incluso los procedimientos que los manipulan.
De esta forma, el desarrollo de un programa puede llegar a ser una simple
combinación de objetos ya definidos donde estos están relacionados de una
manera particular.
La Complejidad es un concepto que es considerado extremadamente relevante
para un sistema computacional, el cual ha sido abordado por varios
investigadores.
La Complejidad se define como una propiedad intrínseca de los artefactos y no
toma en cuenta la percepción de un observador externo.

7
1.4 Conceptos del ciclo de vida del software.
El ciclo de vida del software en el Proceso Unificado
Los programas pueden agruparse en fases porque globalmente contribuyen a
obtener un producto intermedio, necesario para continuar hacia el producto final y
facilitar la gestión del proyecto. Al conjunto de las fases empleadas se le denomina
“ciclo de vida”.
Las fases del ciclo de vida del software son: concepción, elaboración, construcción
y transición. La concepción es definir el alcance del proyecto y definir el caso de
uso. La elaboración es proyectar un plan, definir las características y cimentar la
arquitectura. La construcción es crear el producto y la transición es transferir el
producto a sus usuarios.
Las etapas del ciclo de vida de una aplicación de bases de datos son las
siguientes:
1. Planificación del proyecto.
2. Definición del sistema.
3. Recolección y análisis de los requisitos.
4. Diseño de la base de datos.
5. Selección del SGBD.
6. Diseño de la aplicación.
7. Prototipado.
8. Implementación.
9. Conversión y carga de datos.
10. Prueba.
11. Mantenimiento.
Estas etapas no son estrictamente secuénciales. De hecho hay que repetir
algunas de las etapas varias veces, haciendo lo que se conocen como ciclos de
realimentación. Por ejemplo, los problemas que se encuentran en la etapa del
diseño de la base de datos pueden requerir una recolección de requisitos adicional
y su posterior análisis.
1.4.1 Especificaciones de requerimientos.

8
Los requerimientos para un sistema de software determinan lo que hará el sistema
y definen las restricciones de su operación e implementación.
El proceso de ingeniería de requisitos puede ser descrito en 5 pasos distintos:
identificación de requisitos, Análisis de requisitos y negociación, Especificación de
requisitos, Modelizado del sistema, Validación y gestión de requisitos.
El termino requerimiento no se utiliza de forma consistente en la industria del
software. En algunos casos, un requerimiento se visualiza como una declaración
abstracta de alto nivel de un servicio que debe proveer el sistema o como una
restricción de éste. Por otro lado, es una definición matemática detallada y formal
de una función del sistema
Una vez recopilados los requisitos, el producto obtenido configura la base del
análisis de requisitos. Los requisitos se agrupan por categorías y se organizan en
subconjuntos, se estudia cada requisito en relación con el resto, se examinan los
requisitos en su consistencia, completitud y ambigüedad, y se clasifican en base a
las necesidades de los clientes/usuarios.
1.4.2 Análisis Orientado a Objetos.
Se considera como un análisis de actividades y consiste en la solución de
negocios para el usuario y se expresa con los casos de uso. El diseño lógico es la
solución del equipo de proyecto del negocio y consiste de las siguientes tareas:
Identificar los usuarios y sus roles Obtener datos de los usuarios, Evaluar la
información Documentar los escenarios de uso Validar con los usuarios Validar
contra la arquitectura de la empresa.
Es necesario determinar que elementos intervienen en el sistema a desarrollar, así
como su estructura, relaciones, evolución en el tiempo, detalle de sus
funcionalidades, que van a dar una descripción clara de qué sistema vamos a
construir, qué funcionalidades va a aportar y qué comportamiento va a tener. Para
ello se enfocará el sistema desde tres puntos de vista relacionados pero
diferentes:
• Funcional.
• Estático.
• Dinámico.

1.4.3 Diseño Orientado a Objetos.


Elaborar una especificación completa y validada de la arquitectura global
hardware-software, de la estructura de control y de la estructura de datos del
producto, así como un esquema de los manuales de usuarios y planes de test; de

9
las interfaces de relación, dimensionamiento y algoritmos claves de cada
componente de programa.

Implementación: Llegado este punto se empieza a codificar algoritmos y


estructuras de datos, definidos en las etapas anteriores, en el correspondiente
lenguaje de programación y/o para un determinado sistema gestor de bases de
datos.

Pruebas: El objetivo de estas pruebas es garantizar que el sistema ha sido


desarrollado correctamente, sin errores de diseño y/o programación. Es
conveniente que sean planteadas al menos tanto a nivel de cada módulo (aislado
del resto), como de integración del sistema

Validación: Esta etapa tiene como objetivo la verificación de que el sistema


desarrollado cumple con los requisitos expresados inicialmente por el cliente y que
han dado lugar al presente proyecto (para esta fase también es interesante contar
con los use cases, generados a través de las correspondientes fases previas, que
servirán de guía para la verificación de que el sistema cumple con lo descrito por
estos).

Mantenimiento y evolución: Finalmente la aplicación resultante se encuentra ya


en fase de producción (en funcionamiento para el cliente, cumpliendo ya los
objetivos para los que ha sido creada). A partir de este momento se entra en la
etapa de mantenimiento, que supondrá ya pequeñas operaciones tanto de
corrección como de mejora de la aplicación (mejora del rendimiento), así como
otras de mayor importancia, fruto de la propia evolución (nuevas opciones para el
usuario debidas a nuevas operaciones contempladas para el producto).

1.4.4 Programación Orientada a Objetos, conceptos y características.


La Programación Orientada a Objetos (POO) es una forma de enfocar la tarea de
programación. Los enfoques de la programación han cambiado drásticamente
desde la invención de las computadoras, la creciente complejidad de los
programas, antes se realizaban mediante una consola las instrucciones máquina
en binario. Esto funcionaba porque los programas sólo tenían unos pocos cientos
de instrucciones. Cuando crecieron los programas, se inventó el lenguaje
ensamblador para que el programador pudiera manejar programas más largos y
complejos usando una representación simbólica de las instrucciones máquina.

10
La Programación Orientada a Objetos toma las mejores ideas de la programación
estructurada la combina con nuevos y poderosos conceptos que animan o alientan
una nueva visión de la tarea de la programación.
La Programación Orientada a Objetos permite descomponer fácilmente un
problema en subgrupos de partes relacionadas. Entonces, puede traducir estos
subgrupos en unidades auto contenidas llamadas Objetos.

11
1.5 Elementos primordiales en el modelo de objetos.
La programación Orientada a Objetos trata de cumplir las necesidades de los
usuarios finales, estás tareas se realizan mediante la modelización del mundo real,
el soporte fundamental es el modelo objeto.
Los elementos más importantes de este modelo son:
*Abstracción
*Encapsulamiento
*Modularidad
*Jerarquía y Herencia
*Polimorfismo
1.5.1 Abstracción.
Mediante la abstracción la mente humana modeliza la realidad en forma de
objetos. Para ello busca parecida entre la realidad y la posible implementación de
objetos del programa que simulen el funcionamiento de los objetos reales.
Los seres humanos no pensamos en las cosas como un conjunto de cosas
menores; por ejemplo, no vemos un cuerpo humano como un conjunto de células.
Los humanos entendemos la realidad como objetos con comportamientos bien
definidos. No necesitamos conocer los detalles de porqué ni cómo funcionan las
cosas; simplemente solicitamos determinadas acciones en espera de una
respuesta; cuando una persona desea desplazarse, su cuerpo le responde
comenzando a caminar.
Pero la abstracción humana se gestiona de una manera jerárquica, dividiendo
sucesivamente sistemas complejos en conjuntos de subsistemas, para así
entender más fácilmente la realidad. Esta es la forma de pensar que la orientación
a objeto intenta cubrir.
1.5.2 Encapsulamiento.
El Encapsulamiento o encapsulación es la propiedad que permite asegurar que el
contenido de la información de un objeto está oculta al mundo exterior: el objeto A
no conoce lo que hace el objeto B, y viceversa. La encapsulación (también se
conoce como ocultación de la información), en esencia, es el proceso de ocultar
todos los secretos de un objeto que no contribuyen a sus características
esenciales.
La encapsulación permite la división de un programa en módulos. Estos módulos
se implementan mediante clases, de forma que una clase representa la
encapsulación de una abstracción. En la práctica, esto significa que cada clase
debe tener dos partes: una interfaz y una implementación. La interfaz de una clase

12
captura sólo su vista externa y la implementación contiene la representación de la
abstracción, así como los mecanismos que realizan el comportamiento adecuado.
Las clases proporcionan una de las formas más comunes para encapsular
elementos.
La encapsulación también le permite controlar la forma en que se utilizan los datos
y los procedimientos. Puede utilizar modificadores de acceso, como Private o
Protected, para evitar que los procedimientos externos ejecuten métodos de clase
o lean y modifiquen datos en propiedades y campos.
1.5.3 Modularidad.
La Modularidad es la propiedad que permite subdividir una aplicación en partes
más pequeñas (llamadas módulos), cada una de las cuales debe ser tan
independiente como sea posible de la aplicación en sí y de las restantes partes.
La modularización consiste en dividir un programa en módulos que se puedan
compilar por separado, pero que tienen conexiones con otros módulos. Al igual
que la encapsulación, los lenguajes soportan la Modularidad de diversas formas.
La Modularidad es la propiedad de un sistema que permite su descomposición en
un conjunto de módulos cohesivos y débilmente acoplados
El Módulo A depende del Módulo B si cualquier cambio en el Módulo B implica que
el Módulo A también tenga que ser modificado.
La dependencia a veces se conoce como acoplamiento. Un sistema con muchas
dependencias tiene fuerte acoplamiento. Los buenos sistemas tienen débil
acoplamiento, porque en ese caso los cambios en una parte del sistema son
menos probables de propagarse a través del sistema.
Los módulos correctos a menudo tienen la propiedad de que sus interfaces
proporcionan una abstracción de algún elemento conocido de manera intuitiva que
puede, no obstante, ser difícil de implementar. Este tipo de módulos se dice que
tienen una fuerte cohesión.
1.5.4 Jerarquía y herencia.
Jerarquía
La Jerarquía es una propiedad que permite la ordenación de las abstracciones.
Las dos jerarquías más importantes de un sistema complejo son: estructura de
clases (jerarquía “es-un” (sí-a): generalización/especialización) y estructura de
objetos (jerarquía “parte-de” (part-of): agregación).
Las jerarquías de generalización/especialización se conocen como herencia.
Básicamente, la herencia define una relación entre clases, en donde una clase

13
comparte la estructura o comportamiento definido en una o más clases (herencia
simple y herencia múltiple, respectivamente).
Herencia
La herencia es la última de las propiedades relativas a la OOP, Consiste en la
propagación de los atributos y las operaciones a través de distintas sub-clases
definidas a partir de una clase común.
La herencia nos permite crear estructuras jerárquicas de clases donde es posible
la creación de sub-clases que incluyan nuevas propiedades y atributos. Estas sub-
clases admiten la definición de nuevos atributos, así como crear, modificar o
inhabilitar propiedades.
1.5.5 Polimorfismo.
La quinta propiedad significativa de los lenguajes de programación orientada a
objetos es el polimorfismo.
Es la propiedad que indica, literalmente, la posibilidad de que una entidad tome
muchas formas. En términos prácticos, el polimorfismo permite referirse a objetos
de clases diferentes mediante el mismo elemento de programa y realizar la misma
operación de diferentes formas, según sea el objeto que se referencia en ese
momento.
El polimorfismo adquiere su máxima expresión en la derivación o extensión de
clases, es decir, cuando se obtiene una clase a partir de una clase ya existente,
mediante la propiedad de derivación de clases o herencia.
El polimorfismo requiere ligadura tardía o postergada (también llamada dinámica),
y esto sólo se puede producir en lenguajes de programación orientados a objetos.
Los lenguajes no orientados a objetos soportan ligadura temprana o anterior
(también llamada estática),

14
1.6 Historia de los paradigmas en el desarrollo del software.
Paradigmas: Representan un enfoque particular o filosofía para la construcción del
software. No es mejor uno que otro sino que cada uno tiene ventajas y
desventajas.
Algunos ejemplos de paradigmas de programación:
*El paradigma imperativo es considerado el más común y está representado, por
ejemplo, por el C o por BASIC.
*El paradigma funcional está representado por la familia de lenguajes LISP (en
particular Scheme, ML o Haskell.
*El paradigma lógico, un ejemplo es PROLOG.
*El paradigma orientado a objetos. Un lenguaje completamente orientado a
objetos es Smalltalk.
La representación orientada a objetos mejora la estructura de los datos y por lo
tanto se ha aplicado a diferentes paradigmas como Redes de Petri, Imperativo
Secuencial, Lógica de Predicados, Funcional, etc. No obstante, la manipulación no
queda fundamentalmente afectada y por lo tanto el paradigma inicial tampoco a
pesar de ser re-orientado a objetos.
Si bien puede seleccionarse la forma pura de estos paradigmas al momento de
programar, en la práctica es habitual que se mezclen, dando lugar a la
programación multiparadigma.
Actualmente el paradigma de programación más usado debido a múltiples
ventajas respecto a sus anteriores, es la programación orientada a objetos.
También hay situaciones donde un paradigma resulta más apropiado que otro.
Los más comunes son el desarrollo en cascada, el desarrollo en espiral, el
desarrollo por prototipos, el desarrollo incremental, el desarrollo en V y el
desarrollo orientado a objetos. También existen modelo híbridos, los cuales
combinan elementos de diferentes modelos según las necesidades existentes.
En Ingeniería de software el desarrollo en cascada es el enfoque metodológico
que ordena rigurosamente las etapas del ciclo de vida del software, de forma tal
que el inicio de cada etapa debe esperar a la finalización de la inmediatamente
anterior.
La palabra cascada sugiere, mediante la metáfora de la fuerza de la
gravedad, el esfuerzo necesario para introducir un cambio en las fases más
avanzadas de un proyecto. Si bien ha sido ampliamente criticado desde el ámbito
académico y la industria, sigue siendo el paradigma más seguido al día de hoy.

15
Se estudian todos los riesgos potenciales y se seleccionan una o varias
alternativas propuestas para reducir o eliminar los riesgos. Desarrollar, verificar y
validar (probar) Tareas de la actividad propia y se prueba. Planificar Revisamos
todo lo hecho, evaluándolo, y con ello decidimos si continuamos con las fases
siguientes y planificamos la próxima actividad.

16
1.7 Beneficios del modelo de objetos y de la POO sobre otros paradigmas.
En resumen, la programación orientada a objetos beneficia a los desarrolladores
debido a que: Los programas son fáciles de diseñar por que los objetos reflejan
elementos del mundo real.
Las aplicaciones son más sencillas para los usuarios debido a que los datos
innecesarios están ocultos.
Los objetos son unidades auto contenidas.
La productividad se incrementa debido a que puede reutilizar el código.
Los sistemas son fáciles de mantener y se adaptan a las cambiantes necesidades
de negocios.
Es más fácil crear nuevos tipos de objetos a partir de los ya existentes.
Simplifica los datos complejos.
Reduce la complejidad de la transacción.
Confiabilidad.
Robustez.
Capacidad de ampliación.

17
2. Técnicas básicas de modelado de objetos.
Cuando se escribe un programa en un lenguaje orientado a objetos, definimos una
plantilla o clase que describe las características y el comportamiento de un
conjunto de objetos similares. La clase automóvil describe las características
comunes de todos los automóviles: sus atributos y su comportamiento. Los
atributos o propiedades se refieren a la marca o fabricante, el color, las
dimensiones, si tienen dos, tres, cuatro o más puertas, la potencia, si utiliza como
combustible la gasolina o gasoil, etc. El comportamiento se refiere a la posibilidad
de desplazarse por una carretera, frenar, acelerar, cambiar de marcha, girar, etc.
Luego, tenemos automóviles concretos, por ejemplo el automóvil propio de una
determinada marca, color, potencia, etc, el automóvil del vecino de otra marca, de
otro color, etc, el automóvil de un amigo, etc.
Una clase es por tanto una pantilla implementada en software que describe un
conjunto de objetos con atributos y comportamiento similares.
Una instancia u objeto de una clase es una representación concreta y específica
de una clase y que reside en la memoria del ordenador.

2.1 Definición de clases, atributos, métodos y objetos.


Clases: En el contexto del análisis y el diseño, una clase es una categoría o grupo
de cosas que tienen atributos y comportamientos comunes.
La acción de agrupar los objetos de acuerdo a sus características comunes se
llama clasificación y es una habilidad que utilizamos los humanos para organizar el
conocimiento.
La clasificación puede verse como la acción de colocar cada objeto en un casillero
etiquetado exprofeso para alojar a todos los objetos de esa clase.
Se acostumbra que los nombres para las clases se escriban en singular con la
primera letra en mayúscula. Por ejemplo, los nombres para las clases de los
objetos del aula serían:

 Alumno
 Profesor
 Mesa
 Silla
 Pizarrón

18
También podemos observar que hay objetos compuestos de otros objetos. Por
ejemplo, la silla está compuesta de:
 4 patas
 1 respaldo
 1 asiento

A esta relación, donde un objeto está formado por otros objetos, se le llama
agregación.
Otra relación consiste en que, a partir de un objeto existente, se pueda crear otro
nuevo objeto, agregándole nuevos atributos o comportamientos. Por ejemplo,
agregándole una paleta a una silla obtenemos un mesabanco. Esta relación se
llama derivación.
En este caso, a partir de la clase Silla se ha formado una nueva clase llamada
Mesabanco.
Objetos: Un objeto es una instancia o caso particular de una clase.
Normalmente un objeto tiene una identidad personal que lo distingue de los demás
objetos. De esta forma, un objeto tiene estado, comportamiento e identidad.
El estado de un objeto lo constituyen todos los datos que encapsula en un
momento determinado. Un objeto tiene cierto número de elementos que se
conocen como atributos, cada uno de los cuales posee un valor.
El comportamiento es la manera en que actúa y reacciona un objeto, en función de
sus cambios de estado y el paso de mensajes.
La identidad nos dice que un objeto tiene una existencia continuada. Por ejemplo
los valores de los atributos de este objeto podrían cambiar, quizás como respuesta
a un mensaje, pero seguiría siendo el mismo objeto.
Atributos: Un atributo es una característica de un objeto. Por ejemplo, todos los
objetos de la clase Lavadora tienen atributos como: la marca, el modelo, el
número de serie y la capacidad.
Por ejemplo:
 miLavadora  Washmeister  7Kg
 Laudatorium  GL57774

Métodos: Método es un término utilizado en algunos lenguajes de programación


para referirse a algún comportamiento de los objetos de una clase.

19
2.2 El Modelo como resultado de la abstracción.
Modelo: Un modelo es una representación abstracta de una especificación, un
diseño o un sistema, desde un punto de vista de particular.
Objetivos:
1. Los modelos nos ayudan a visualizar cómo es o queremos que sea un sistema.
2. Los modelos nos permiten especificar la estructura o el comportamiento de un
sistema.
3. Los modelos nos proporcionan plantillas que nos guían en la construcción de un
sistema.
4. Los modelos documentan las decisiones que hemos adoptado.

Principios básicos del modelado


La elección de qué modelos crear tiene una profunda influencia sobre cómo se
acomete un problema y cómo se da forma a una solución.
Los modelos adecuados pueden arrojar mucha luz sobre los problemas de
desarrollo, ofreciendo una comprensión que simplemente no podríamos obtener
de otra manera. Los modelos erróneos desorientan, haciendo que uno se centre
en cuestiones irrelevantes.
Todo modelo puede ser expresado a diferentes niveles de precisión.
Los mejores tipos de modelos son aquéllos que permiten elegir el grado de detalle,
dependiendo de quién está viendo el sistema y por qué necesita verlo.
Los mejores modelos están ligados a la realidad.
Es mejor tener modelos que tengan una clara conexión con la realidad y, donde
esta conexión sea débil, saber exactamente cómo se apartan del mundo real esos
modelos.
Un único modelo no es suficiente. Cualquier sistema no virtual se aborda mejor a
través de un pequeño conjunto de modelos casi independientes.
La expresión clave aquí es "casi independiente". En este contexto significa tener
modelos que podemos construir y estudiar separadamente, pero aun así están
relacionados.

20
2.3 El UML como una herramienta de modelado de objetos.
El Lenguaje de Modelamiento Unificado (UML - Unified Modeling Language) es un
lenguaje gráfico para visualizar, especificar y documentar cada una de las partes
que comprende el desarrollo de software. UML entrega una forma de modelar
cosas conceptuales como lo son procesos de negocio y funciones de sistema,
además de cosas concretas como lo son escribir clases en un lenguaje
determinado, esquemas de base de datos y componentes de software reusables.
En UML existen de forma general dos tipos de diagramas:
 Diagramas estáticos (estos diagramas le interesan al cliente)
 Diagramas dinámicos (son de mayor utilidad al desarrollador del sistema)

UML representa la información de un sistema en forma gráfica y pretende ser un


estándar mundial de modelado.
Es importante especificar detalles importantes sobre UML:

 NO es una metodología.- debido a que no está determinado como una serie


de pasos a seguir o un reglamento definido.
 NO es un lenguaje, es más bien una herramienta de modelado.- en UML no
se ve código de programación, sino que es más general, eh ahí su
flexibilidad y practicidad.
Las representaciones en UML deben ser "simples", pero "potentes" o expresivas,
es decir, que lo representado en diagramas UML debe ser entendible para el
cliente, y además potente porque debe contener información importante que
pueda convencerlo y así poder desarrollar un proyecto.

21
2.4 Planteamiento del problema.
En el planteamiento del problema es donde el programador debe entender
comprender y analizar, el problema que se le presenta al cliente, el programador
después de analizar el problema debe encontrarle una solución que sea factible.
A continuación se muestra un ejemplo del planteamiento de un problema.
EJEMPLO:
En un video club detectamos un problema en su forma de organización y en su
inventario, pues es muy difícil manejar datos en hojas de papel y se hace
demasiado lenta la consulta de las películas, una consulta tan sencilla necesita un
determinado lapso de tiempo; a esto le sumamos que no se cuenta con el
suficiente personal para agilizar cualquier operación que se requiera en
determinado momento. Estos factores contribuyen a la atención lenta del cliente o
socio en el momento del cobro, dificultad de comunicación con el proveedor,
durante el proceso de renta o de compra de una película, los registros de los
socios se lleva de forma manual. Se determinó que el negocio se encuentra en
expansión recibiendo mayor demanda y mayor cantidad de clientes, por tanto
estará sujeto a futuras modificaciones en su control y a cambios estructurales
específicos.

2.4.1 Analizar el enunciado del problema.


El problema
La parte más difícil en el desarrollo de un sistema es comprender, con suficiente
grado de detalle, el problema a resolver.
La descripción inicial del problema, generalmente, suele ser incierta e insuficiente
para realizar un análisis adecuado de los requisitos de los usuarios.
El análisis de requisitos es complejo, principalmente porque: Diferentes usuarios
tienen distintas prioridades, a veces en conflicto.
Los usuarios no suelen tener una visión clara y fácilmente expresable de lo que
quieren. Por ejemplo, les resulta difícil distinguir entre lo que hace un sistema
existente y lo que tiene que hacer un sistema adecuado.
Es difícil imaginar un sistema del cual sólo se ha visto su descripción, por lo que
los usuarios pueden pensar que la descripción es correcta cuando en realidad falta
algo vital.
Los encargados de hablar con los desarrolladores pueden no tener experiencia
directa en el trabajo que realizan los usuarios del sistema. Como un primer intento,
se puede redactar una narrativa que describa el problema a resolver.

22
Ejemplo:
“El Tecnológico X nos ha contratado para desarrollar un sistema de software para
administrar su biblioteca.
La biblioteca utiliza un programa que data de 1960, escrito en un lenguaje
obsoleto. Con ese programa se llevan a cabo algunas tareas sencillas de gestión
de libros y la búsqueda de usuarios por medio de un índice de credenciales. Se
requiere construir un sistema que mantenga estos dos aspectos en línea”
Debido a que la información que arroja la narrativa anterior es muy escasa, se
hace una investigación más detallada para averiguar hechos que ayuden a
desarrollar un mejor sistema.
Libros, Revistas y Periódicos. La biblioteca tiene libros, revistas y periódicos.
Puede haber uno o más ejemplares de un libro. El primer ejemplar se marca como
“reserva”. Los ejemplares de libros se pueden prestar a domicilio, excepto los
marcados como “reserva”. El período de préstamo a domicilio puede variar de 1 a
3 días. Un usuario puede tener en préstamo a domicilio hasta tres libros
simultáneamente. Las revistas y los periódicos no se prestan a domicilio.
Consulta. Los usuarios pueden tomar los libros diréctamente de los anaqueles y
leerlos dentro de la biblioteca. Al final, deberán depositarlos en los carritos
dispuestos para tal efecto. Los empleados de la biblioteca se encargan de
acomodar los libros que se encuentren en los carritos.
Los usuarios leen las revistas y los periódicos en una sala especial.
Préstamos. Es muy importante que el sistema lleve un control de las fechas de
préstamo y devolución de los libros, de acuerdo al procedimiento reglamentado. El
sistema deberá informar si hay ejemplares disponibles de un libro para préstamo a
domicilio

23
2.4.2 Identificar funciones del sistema.
Consiste en describir por escrito a nivel técnico los procedimientos relacionados
con el programa y su modo de uso. También se debe documentar el programa
para que sea más entendible.
¿Para quiénes son la documentación?
 Usuarios (Digitadores)  Programadores
 Operadores  Analistas de sistemas
Documentos que se elaboran:
Manual de Usuario y Manual del Analista.
A los usuarios se les elabora un manual de referencia para que aprendan a utilizar
el programa. Esto se hace a través de capacitaciones y revisión de la
documentación del manual de usuario. El manual del usuario no está escrito a
nivel técnico sino al de los distintos usuarios previstos y explica en detalle cómo
usar el programa: descripción de las tareas que realiza el programa, instrucciones
necesarias para su instalación puesta en marcha y funcionamiento,
recomendaciones de uso, menús de opciones, método de entrada y salida de
datos, mensajes de error, recuperación de errores, etc.
A los operadores por si se presentan mensajes de error, sepan cómo responder a
ellos. Además que se encargan de darle soporte técnico al programa.
A los programadores a través del manual del analista para que recuerden
aspectos de la elaboración del programa o en caso que otras personas puedan
actualizarlo o modificarlo (darle mantenimiento) y no son necesariamente las
personas que lo diseñaron.
Es por ello, que la documentación debe contener algoritmos y flujogramas de los
diferentes módulos que lo constituyen y las relaciones que se establecen entre
ellos; listados del programa, corridas, descripción de variables que se emplean en
cada módulo, cuáles son comunes a diferentes módulos y cuáles locales;
descripción de los ficheros de cada módulo y todo lo que sea de importancia para
un programador.
A los analistas de sistemas que son las personas que deberán proporcionar toda
la información al programador. Estos se encargan de hacer una investigación
previa de cómo realizar el programa y documentar con las herramientas
necesarias para que el programador pueda desarrollar el sistema en algún
lenguaje de programación adecuado

24
2.5 Análisis.
El análisis de sistemas es la ciencia encargada del análisis de sistemas grandes y
complejos, y la interacción entre los mismos. Esta área se encuentra muy
relacionada con la investigación operativa. También se denomina análisis de
sistemas a una de las etapas de construcción de un sistema informático, que
consiste en relevar la información actual y proponer los rasgos generales de la
solución futura.
Los sistemas en relación con el análisis de sistemas están relacionados con
cualquier campo, tales como procesos industriales, administración, toma de
decisiones, procesos, protección al medio ambiente, etc. En 1953 los hermanos
Howard T. Odum y Eugene
Odum empezaron a aplicar una visión de sistemas a la ecología biológica,
basándose en los trabajos de Raymond Lindeman (1942) y Arthur Tansley (1935).
Los analistas de sistemas utilizan la metodología matemática para obtener los
detalles de los sistemas que están analizando.
En esta fase se pretende hacer un análisis detallado de los objetos que se
encontraran en la problemática, también se identifican con claridad los objetos y
sus atributos, así como también los métodos que serían los procesos que realiza
cada clase pues es el papel que juega cada objeto en la elaboración del sistema.
Más que nada es saber dicha problemática para discernir lo que necesitamos para
elaborar un buen sistema e implementarlo con eficacia y seguridad, satisfaciendo
las necesidades del lugar que necesito este tipo de tecnológica. Pues se busca
mayor calidad en el desarrollo de más y mejores softwares para sistematizar un
establecimiento de x venta.

2.5.1 Descubrir objetos en el dominio del problema.


Si se observa alrededor en una habitación, existen un conjunto de objetos físicos
que pueden ser fácilmente identificados, clasificados y definidos (en términos de
atributos y operaciones). Pero cuando se “observa” el espacio de un problema en
una aplicación de software, los objetos pueden ser más difíciles de identificar.
Se puede empezar a identificar objetos examinando el planteamiento del problema
o realizando un “análisis sintáctico gramatical” en la narrativa del sistema que se
va a construir. Los objetos se determinan subrayando cada nombre o cláusula
nominal e introduciéndola en una tabla simple.
Los sinónimos deben destacarse. Si se requiere del objeto que implemente una
solución, entonces éste formará parte del espacio de solución; en caso de que el
objeto se necesite solamente para describir una solución, éste forma parte del

25
espacio del problema. Los objetos se manifiestan de alguna de las formas
siguientes:

 Entidades Externas que producen o consumen información a usar por un


sistema computacional. Por ejemplo: otros sistemas, dispositivos, personas.
 Cosas que son parte del dominio de información del problema. Por ejemplo:
informes, presentaciones, cartas, señales.
 Ocurrencias o Sucesos que ocurren dentro del contexto de una operación
del sistema. Por ejemplo: una transferencia de propiedad o la terminación
de una serie de movimientos en un robot.
 Papeles o Roles desempeñados por personas que interactúan con el
sistema. Por ejemplo: director, ingeniero, vendedor.
 Unidades Organizacionales que son relevantes en una aplicación. Por
ejemplo: división, grupo, equipo.
 Lugares que establecen el contexto del problema y la función general del
sistema. Por ejemplo: planta de producción o muelle de carga.
 Estructuras que definen una clase de objetos o, en casos extremos, clases
relacionadas de objetos. Por ejemplo: sensores, vehículos de cuatro ruedas
o computadoras.
 La clasificación mostrada es una de las muchas que se han propuesto en la
literatura. También es importante destacar qué no son los objetos. En
general, un objeto nunca debe tener un “nombre procedimental imperativo”.
Coud y Yourdon sugieren seis características de selección a usar cada vez que un
analista considera si incluye o no un objeto potencial en el modelo de análisis:
Información retenida el objeto potencial será de utilidad durante el análisis
solamente si la información acerca de él debe recordarse para que el sistema
funciones.
Servicios necesarios el objeto potencial debe poseer un conjunto de operaciones
identificables que pueden cambiar de alguna manera el valor de sus atributos.
 Atributos múltiples durante el análisis de requisitos, se debe centrar la
atención en la información principal (un objeto con un solo atributo puede,
en efecto, ser útil durante el diseño, pero seguramente será mejor
presentado como un atributo de otro objeto durante la actividad de análisis).
 Atributos comunes puede definirse un conjunto de atributos para el objeto
potencial, los cuales son aplicables a todas las ocurrencias del objeto.
Operaciones comunes puede definirse un conjunto de operaciones para el objeto
potencial, las cuales son aplicables a todas las ocurrencias del objeto.

26
Requisitos esenciales entidades externas que aparecen en el espacio del
problema y producen o consumen información esencial para la producción de
cualquier solución para el sistema, serán casi siempre definidas como objetos en
el modelo de requisitos.
Para ser considerado un objeto válido a incluir en el modelo de requisitos, un
objeto potencial debe satisfacer todas (o casi todas) las características anteriores.
La decisión de incluir objetos potenciales en el modelo de análisis es algo
subjetivo, y una evaluación posterior puede llegar a descartar un objeto o re
incluirlo.
Sin embargo, el primer paso del Análisis Orientado a Objetos debe ser la
definición de objetos, y la consiguiente toma de decisiones (incluso subjetivas).

2.5.2 Identificar atributos de los objetos.


Los atributos describen un objeto que ha sido seleccionado para ser incluido en el
modelo de análisis. En esencia, son los atributos los que definen al objeto, los que
clarifican lo que representa el objeto en el contexto del espacio del problema. Por
ejemplo, si se tratara de construir un sistema de estadísticas para jugadores
profesionales de béisbol, los atributos del objeto Jugador serían muy diferentes de
los atributos del mismo objeto cuando se use dentro del contexto de un sistema de
pensiones para jugadores profesionales.
En el primero, atributos tales como nombre, posición, promedio de bateo,
porcentaje de estancia en el campo de juego, años jugados y partidos jugados
pueden ser relevantes. En el segundo caso, algunos de estos atributos serían
relevantes pero otros serían reemplazados (o potenciados) por atributos como
salario medio, crédito total, opciones elegidas para el plan de pensión, dirección
postal, etc.
Para desarrollar un conjunto significativo de atributos para un objeto, el analista
puede estudiar de nuevo la narrativa del proceso (o descripción del ámbito del
alcance) para el problema y seleccionar aquellos elementos que razonablemente
“pertenecen” al objeto.
Además, para cada objeto debe responderse el siguiente interrogante: ¿Qué
elementos (compuestos y/o simples) definen completamente al objeto en el
contexto del problema actual?”
Para ilustrar esto, se considerará el objeto Sistema definido para Hogar Seguro.
Anteriormente se indicó que el propietario puede configurar el sistema de
seguridad para reflejar la información acerca de los sensores, sobre la respuesta
de la alarma, sobre la activación desactivación, sobre identificación, etc. Usando la

27
notación de la descripción del contenido se podría representar estos elementos de
datos compuestos de la siguiente manera:

Información del sensor = tipo de sensor + número de sensor + umbral de alarma.


Información de respuesta de la alarma = tiempo de retardo + número de teléfono +
tipo de alarma.
Información de activación desactivación = contraseña maestra + cantidad de
intentos permitidos + contraseña temporal.
Información de identificación = ID del sistema + verificación de número de teléfono
+ estado del sistema.

2.5.3 Identificar métodos en los objetos.


Métodos
Los métodos (operaciones o servicios) describen el comportamiento asociado a un
objeto. Representan las acciones que pueden realizarse por un objeto o sobre un
objeto.
La ejecución de un método puede conducir a cambiar el estado del objeto o dato
local del objeto.
Declaración
Cada método tiene un nombre y un cuerpo que realiza la acción o comportamiento
asociado con el nombre del método. En un lenguaje de programación orientado a
objetos, el cuerpo del método consta de un bloque de código procedimental que
ejecuta la acción requerida.
Todos los métodos que alteran o acceden a los datos de un objeto se definen
dentro del objeto. Un objeto puede modificar directamente o acceder a los datos
de otros objetos.
Mensajes
Un método dentro de un objeto se activa por un mensaje que es enviado por otro
objeto.
Los objetos realizan acciones cuando reciben un mensaje. El mensaje es
esencialmente una orden que se envía para indicarle que realice alguna acción.
El envío de mensajes a los objetos equivale al concepto de invocación a funciones
de la programación procedimental (denominada también imperativa o algorítmica).

28
2.6 Introducción al diseño de la solución.
El diseño de la solución llama al equipo de trabajo a plantear múltiples soluciones
posibles a la problemática, para analizarlas y determinar cuál es la mejor opción,
partiendo de eso, se procede a desarrollar a diseñarla y representarla, en este
caso, usando UML.
Definición de la problemática:
Un videoclub se encuentra en un estado en el que es difícil atender a los clientes,
ya que se los atiende de forma lenta, y también es difícil llevar un control de todas
las películas que tienen y que van en aumento.
Es decir, el negocio se encuentra en una rápida expansión, y requiere de cambios
estructurales para poder resolver su problema.
En base a la problemática del videoclub propuesta por nuestro equipo, definimos
las siguientes posibles soluciones:

1. contratación y capacitación de empleados.


2. clasificar y etiquetar los productos en venta.
3. creación de un sistema de información.

JUSTIFICACION DE LA DECISION DE DISEÑO


De las tres posibles soluciones propuestas, determinamos que la más efectiva
seria la creación de un sistema de información, a continuación planteamos
nuestras razones:

•Creación de un sistema de información


•Mayor eficiencia en el manejo del inventario de los productos (Base de datos)
•Procesos automatizados
•Actualización
•Control en las reservas
•Mayor rapidez al momento de atender al cliente

29
2.6.1 Representación gráfica de una clase.
El Diagrama de Clases es el diagrama principal para el análisis y diseño. Un
diagrama de clases presenta las clases del sistema con sus relaciones
estructurales y de herencia. La definición de clase incluye definiciones para
atributos y operaciones.
Cada clase se representa en un rectángulo con tres compartimientos
 nombre de la clase
 atributos de la clase
 operaciones de la clase

30
Los atributos de una clase no deberían ser manipulables directamente por el resto
de objetos. Por esta razón se crearon niveles de visibilidad para los elementos que
son:
(-) Privado: es el más fuerte. Esta parte es totalmente invisible (excepto para
clases friends en terminología C++).
(#) Los atributos/operaciones protegidos están visibles para las clases friends y
para las clases derivadas de la original.
(+) Los atributos/operaciones públicos son visibles a otras clases (cuando se trata
de atributos se está transgrediendo el principio de encapsulación).
Relaciones entre clases:
Los enlaces entre objetos pueden representarse entre las respectivas clases y sus
formas de relación son:
 Asociación y Agregación (vista como un caso particular de asociación)
Generalización/Especialización.
 Las relaciones de Agregación y Generalización forman jerarquías de clases.
Asociación:
La asociación expresa una conexión bidireccional entre objetos. Una asociación es
una abstracción de la relación existente en los enlaces entre los objetos. Puede
determinarse por la especificación de multiplicidad (mínima...máxima)
 Uno y sólo uno
 0..1 Cero o uno
 M..N Desde M hasta N (enteros naturales)
 Cero o muchos
 0..* Cero o muchos
 1..* Uno o muchos (al menos uno)
Agregación:
La agregación representa una relación parte de entre objetos. En UML se
proporciona una escasa caracterización de la agregación. Esta relación puede ser
caracterizada con precisión determinando las relaciones de comportamiento y
estructura que existen entre el objeto agregado y cada uno de sus objetos
componentes.
Una agregación se podría caracterizar según: Puede el objeto parte comunicarse
directamente con objetos externos al objeto agregado? No => inclusiva Si => no
inclusiva Puede cambiar La composición del objeto agregado? Si => dinámica No
=> estática.

31
Diagrama de Clases y Diagramas de Objetos pertenecen a dos vistas
complementarias del modelo. Un Diagrama de Clases muestra la abstracción de
una parte del dominio. Un Diagrama de Objetos representa una situación concreta
del dominio. Las clases abstractas no son instanciadas.
Generalización:
Permite gestionar la complejidad mediante un ordenamiento taxonómico de
clases, se obtiene usando los mecanismos de abstracción de Generalización y/o
Especialización. La Generalización consiste en factorizar las propiedades
comunes de un conjunto de clases en una clase más general. Los nombres
usados: clase padre - clase hija. Otros nombres: superclase - subclase, clase base
- clase derivada. Las subclases heredan propiedades de sus clases padre, es
decir, atributos y operaciones (y asociaciones) de la clase padre están disponibles
en sus clases hijas. La Generalización y Especialización son equivalentes en
cuanto al resultado: la jerarquía y herencia establecidas. Generalización y
Especialización no son operaciones reflexivas ni simétricas pero sí transitivas. La
especialización es una técnica muy eficaz para la extensión y reutilización.
La noción de clase está próxima a la de conjunto. Dada una clase, podemos ver el
conjunto relativo a las instancias que posee o bien relativo a las propiedades de la
clase. Generalización y especialización expresan relaciones de inclusión entre
conjuntos.

32
Enfocado a nuestro problema.
Por ejemplo en nuestro caso, tenemos identificadas las clases de Personal, Nota,
Productos y Proveedores, pero de la clase Nota se desprenden dos subclases que
son Tarjeta de crédito y Efectivo. Por lo que esta están agregadas con el diagrama
de clase Nota, mientras que esta última está relacionada con el diagrama de clase
Personal y con el diagrama de clase Productos, ambas asociaciones son del tipo
uno a muchos. El diagrama de clase Productos está ligado con el de Proveedores,
también con una asociación uno a muchos.

33
2.6.2 Diagramas de interacción entre la aplicación y una clase.
Diagramas de Interacción:
La vista de interacción describe secuencias de intercambios de mensajes entre los
roles que implementan el comportamiento de un sistema. Un rol clasificador, o
simplemente "un rol", es la descripción de un objeto, que desempeña un
determinado papel dentro de una interacción, distinto de los otros objetos de la
misma clase. Esta visión proporciona una vista integral del comportamiento del
sistema, es decir, muestra el flujo de control a través de muchos objetos. La vista
de interacción se exhibe en dos diagramas centrados en distintos aspectos pero
complementarios: centrados en los objetos individuales y centrados en objetos
cooperantes.
Los objetos interactúan para realizar colectivamente los servicios ofrecidos por las
aplicaciones. Los diagramas de interacción muestran cómo se comunican los
objetos en una interacción. Existen dos tipos de diagramas de interacción: el
Diagrama de Colaboración y el Diagrama de Secuencia.
Diagramas de Secuencia:
Diagrama que muestra las interacciones entre los objetos organizadas en una
secuencia temporal. En particular muestra los objetos participantes en la
interacción y la secuencia de mensajes intercambiados.
Representa una interacción, un conjunto de comunicaciones entre objetos
organizadas visualmente por orden temporal. A diferencia de los diagramas de
colaboración, los diagramas de secuencia incluyen secuencias temporales pero no
incluyen las relaciones entre objetos. Pueden existir de forma de descriptor
(describiendo todos los posibles escenarios) y en forma de instancia (describiendo
un escenario real).
Dentro del conjunto de mensajes representados dispuestos en una secuencia
temporal, cada rol en la secuencia se muestra como una línea de vida, es decir,
una línea vertical que representa el rol durante cierto plazo de tiempo, con la
interacción completa. Los mensajes se muestran como flechas entre líneas de
vida. Un diagrama de secuencia puede mostrar un escenario, es decir, una historia
individual de transacción. Un uso de un diagrama de secuencia es mostrar la
secuencia del comportamiento de un caso de uso.
Un diálogo de secuencia posee dos dimensiones: la vertical representa el tiempo,
la horizontal representa los objetos que participan en la interacción. En general, el
tiempo avanza hacia abajo dentro de la página (se pueden invertir los ejes si se
desea). Con frecuencia sólo son importantes las secuencias de mensajes pero en
aplicaciones de tiempo real el eje temporal puede ser una métrica. La ordenación
horizontal de los objetos no tiene ningún significado.

34
Cada objeto representa una columna distinta, se pone un símbolo de objeto al final
de la flecha que representa el mensaje que ha creado el objeto; está situada en el
punto vertical que denota el instante en que se crea el objeto. Esta se conoce
como línea de vide del objeto. Se pone una X grande en el punto en que deja de
existir el objeto o en el punto en que el objeto se destruye a sí mismo. Para el
periodo durante el cual esté activo el objeto, la línea de vida se amplía para ser
una línea doble continua. Si el objeto se llama a sí mismo, entonces se superpone
otra copia de la doble línea para mostrar la doble activación. El orden relativo de
los objetos no tiene significado aun cuando resulta útil organizarlos de modo que
se minimice la distancia de las flechas.
Cada mensaje se representa mediante una flecha horizontal que va desde la línea
de vida del objeto que envió el mensaje hasta la línea de vida del objeto que ha
recibido el mensaje. Si un mensaje requiere un cierto tiempo para llegar a su
destino, entonces la flecha del mensaje se dibuja diagonalmente hacia abajo.
Para un flujo de objeto asíncrono entre objetos activos, los objetos se representan
mediante líneas dobles continuas y los mensajes se representan como flechas. Se
pueden enviar simultáneamente dos mensajes pero no se pueden recibir
simultáneamente porque no sxe puede garantizar una recepción simultánea.
Las bifurcaciones se muestran partiendo la línea de vida del objeto. Cada
bifurcación puede enviar y recibir mensajes. Eventualmente las líneas de vida del
objeto tienen que fusionarse de nuevo.

Un diagrama de secuencia también se puede mostrar en forma de descriptor, en el


cual los constituyentes son roles en lugar de objetos. Este diagrama muestra en el
caso general, no una sola ejecución del mismo. Los diagramas del nivel de
descriptores se dibujan sin subrayados porque los símbolos denotan roles y no
objetos individuales.
Diagramas de Secuencia:
1. Muestra la secuencia de mensajes entre objetos durante un escenario
concreto
2. Cada objeto viene dado por una barra vertical
3. El tiempo transcurre de arriba abajo
4. Cuando existe demora entre el envío y la atención se puede indicar usando
una línea oblicua

35
Diagrama de Secuencia

Ejemplo de Diagrama de Secuencia

Diagramas de Colaboración:
1. Son útiles en la fase exploratoria para identificar objetos.
2. La distribución de los objetos en el diagrama permite observar
adecuadamente la interacción de un objeto con respecto de los demás
3. La estructura estática viene dada por los enlaces; la dinámica por el envío
de mensajes por los enlaces

36
Diagrama que muestra interacciones organizadas alrededor de los roles. A
diferencia de los diagramas de secuencia, los diagramas de colaboración
muestran explícitamente las relaciones de los roles. Por otra parte, un diagrama
de colaboración no muestra el tiempo como una dimensión aparte, por lo que
resulta necesario etiquetar con números de secuencia tanto la secuencia de
mensajes como los hilos concurrentes.
Un diagrama de colaboración es también un diagrama de clases que contiene
roles de clasificador y roles de asociación en lugar de sólo clasificadores y
asociaciones. Los roles de clasificador y los de asociación describen la
configuración de los objetos y de los enlaces que pueden ocurrir cuando se
ejecuta una instancia de la colaboración. Cuando se instancia una colaboración,
los objetos están ligados a los roles de clasificador y los enlaces a los roles de
asociación. El rol de asociación puede ser desempeñado por varios tipos de
enlaces temporales, tales como argumentos de procedimiento o variables locales
del procedimiento. Los símbolos de enlace pueden llevar estereotipos para indicar
enlaces temporales.
Un uso de un diagrama de colaboración es mostrar la implementación de una
operación. La colaboración muestra los parámetros y las variables locales de la
operación, así como asociaciones más permanentes. Cuando se implementa el
comportamiento, la secuencia de los mensajes corresponde a la estructura de
llamadas anidadas y el paso de señales del programa.
Un diagrama de secuencia muestra secuencias en el tiempo como dimensión
geométrica, pero las relaciones son implícitas. Un diagrama de colaboración
muestra relaciones entre roles geométricamente y relaciona los mensajes con las
relaciones, pero las secuencias temporales están menos claras.
Es útil marcar los objetos en cuatro grupos: los que existen con la interacción
entera; los creados durante la interacción (restricción {new}); los destruidos
durante la interacción (restricción {destroyed}); y los que se crean y se destruyen
durante la interacción (restricción {transient}).
Aunque las colaboraciones muestran directamente la implementación de una
operación, pueden también mostrar la realización de una clase entera. En este
uso, muestran el contexto necesario para implementar todas las operaciones de
una clase. Esto permite que el modelador vea los roles múltiples que los objetos
pueden desempeñar en varias operaciones.
Mensajes
Los mensajes se muestran como flechas etiquetadas unidas a los enlaces. Cada
mensaje tiene un número de secuencia, una lista opcional de mensajes
precedentes, una condición opcional de guarda, un nombre y una lista de
argumentos y un nombre de valor de retorno opcional. El nombre de serie incluye

37
el nombre (opcional) de un hilo. Todos los mensajes del mismo hilo se ordenan
secuencialmente. Los mensajes de diversos hilos son concurrentes a menos que
haya una dependencia secuencial explícita.
Flujos
Generalmente, un diagrama de colaboración contiene un símbolo para un objeto
durante una operación completa. Sin embargo, a veces, un objeto contiene
diferentes estados que se deban hacer explícitos. Por ejemplo, un objeto pudo
cambiar de localización o sus asociaciones pudieron diferenciarse.
Los diferentes símbolos de objeto que representan un objeto se pueden coenctar
usando flujos "become" o "conversion". Un flujo "become" es una transición, a
aprtir de un estado de un objeto a otro. Se dibuja como una flecha de línea
dsicontinua con el estereotipo "become" o "conversion" y puede ser eqtiquetado
con un número de serie para mostrar cuando ocurre. Un flujo de conversión
también se utiliza para mostrar la migración de un objeto a partir de una
localización a ota distinta.
¿Qué es una Colaboración?
Es una descripción de una colección de objetos que interactúan para implementar
un cierto comportamiento dentro de un contexto. Describe una sociedad de
objetos cooperantes unidos para realizar un cierto propósito. Una colaboración
contiene ranuras que son rellenadas por los objetos y enlaces en tiempo de
ejecución. Una ranura de colaboración se llama Rol porque describe el propósito
de un objeto o un enlace dentro de la colaboración.
Un rol clasificador representa una descripción de los objetos que pueden participar
en una ejecución de la colaboración, un rol de asociación representa una
descripción de los enlaces que pueden participar en una ejecución de
colaboración. Un rol de clasificador es una asociación que está limitada por tomar
parte en la colaboración. Las relaciones entre roles de clasificador y asociación
dentro de una colaboración sólo tienen sentido en ese contexto. En general fuera
de ese contexto no se aplican las mismas relaciones.
Una Colaboración tiene un aspecto estructural y un aspecto de comportamiento. El
aspecto estructural es similar a una vista estática: contiene un conjunto de roles y
relaciones que definen el contexto para su comportamiento. El comportamiento es
el conjunto de mensajes intercambiados por los objetos ligados a los roles. Tal
conjunto de mensajes en una colaboración se llama Interacción. Una colaboración
puede incluir una o más interacciones.
¿Qué es una Interacción?
Es el conjunto de mensajes intercambiados por los roles de clasificador a través
de los roles de asociación. Un mensaje es una comunicación unidireccional entre

38
dos objetos, un flujo de objeto con la información de un remitente a un receptor.
Un mensaje puede tener parámetros que transporten valores entre objetos. Un
mensaje puede ser una señal (comunicación explícita entre objetos, con nombre y
asíncrona) o una llamada (la invocación síncrona de una operación con un
mecanismo para el control, que retorna posteriormente al remitente). Un patrón de
intercambios de mensajes que se realizan para lograr un propósito específico es lo
que se denomina una interacción.
¿Qué es Patrón?
Un patrón es una colaboración parametrizada, junto con las pautas sobre cuándo
utilizarlo. Un parámetro se puede sustituir por diversos valores, para producir
distintas colaboraciones. Los parámetros señalan generalmente las ranuras para
las clases. El uso de un patrón se representa como una elipse de línea discontinua
conectada con cada una de las clases por una línea discontinua, que se etiqueta
con el nombre del rol.
Diagrama de Colaboración

Ejemplo de Diagrama de Colaboración

39
2.6.3 Diagramas de estado de una clase.
Muestra el conjunto de estados por los cuales pasa un objeto durante su vida en
una aplicación, junto con los cambios que permiten pasar de un estado a otro.
Los Diagramas de Estado representan autómatas de estados finitos, desde el
p.d.v. de los estados y las transiciones. Son útiles sólo para los objetos con un
comportamiento significativo. Cada objeto está en un estado en cierto instante. El
estado está caracterizado parcialmente por los valores algunos de los atributos del
objeto. El estado en el que se encuentra un objeto determina su comportamiento.
Cada objeto sigue el comportamiento descrito en el Diagrama de Estados
asociado a su clase. Los Diagramas de Estados y escenarios son
complementarios, los Diagramas de Estados son autómatas jerárquicos que
permiten expresar concurrencia, sincronización y jerarquías de objetos, son grafos
dirigidos y deterministas. La transición entre estados es instantánea y se debe a la
ocurrencia de un evento.
Estado
Identifica un periodo de tiempo del objeto (no instantáneo) en el cual el objeto está
esperando alguna operación, tiene cierto estado característico o puede recibir
cierto tipo de estímulos. Se representa mediante un rectángulo con los bordes
redondeados, que puede tener tres compartimientos: uno para el nombre, otro
para el valor característico de los atributos del objeto en ese estado y otro para las
acciones que se realizan al entrar, salir o estar en un estado (entry, exit o do,
respectivamente).
Eventos
Es una ocurrencia que puede causar la transición de un estado a otro de un
objeto. Esta ocurrencia puede ser una de varias cosas:
 Condición que toma el valor de verdadero o falso
 Recepción de una señal de otro objeto en el modelo
 Recepción de un mensaje
 Paso de cierto período de tiempo, después de entrar al estado o de cierta
hora y fecha particular
El nombre de un evento tiene alcance dentro del paquete en el cual está definido,
no es local a la clase que lo nombre.
Envío de mensajes

40
Además de mostrar y transición de estados por medio de eventos, puede
representarse el momento en el cual se envían mensajes a otros objetos. Esto se
realiza mediante una línea punteada dirigida al diagrama de estados del objeto
receptor del mensaje.
Transición simple
Una transición simple es una relación entre dos estados que indica que un objeto
en el primer estado puede entrar al segundo estado y ejecutar ciertas operaciones,
cuando un evento ocurre y si ciertas condiciones son satisfechas. Se representa
como una línea sólida entre dos estados, que puede venir acompañada de un
texto con el siguiente formato:
event-signature "[" guard-condition] "/" action-expression "^"send-clause
event-signature es la descripción del evento que da lugar la transición, guard-
condition son las condiciones adicionales al evento necesarias para que la
transición ocurra, action-expression es un mensaje al objeto o a otro objeto que
se ejecuta como resultado de la transición y el cambio de estado y send-clause
son acciones adicionales que se ejecutan con el cambio de estado, por ejemplo, el
envío de eventos a otros paquetes o clases.
Transición interna
Es una transición que permanece en el mismo estado, en vez de involucrar dos
estados distintos. Representa un evento que no causa cambio de estado. Se
denota como una cadena adicional en el compartimiento de acciones del estado.
Acciones:
Podemos especificar la solicitud de un servicio a otro objeto como consecuencia
de la transición. Se puede especificar el ejecutar una acción como consecuencia
de entrar, salir, estar en un estado, o por la ocurrencia de un evento.
Generalización de Estados:
 Podemos reducir la complejidad de estos diagramas usando la
generalización de estados.
 Distinguimos así entre superestado y subestados.
 Un estado puede contener varios subestados disjuntos.
 Los subestados heredan las variables de estado y las transiciones externas.
 La agregación de estados es la composición de un estado a partir de varios
estados independientes.
La composición es concurrente por lo que el objeto estará en alguno de los
estados de cada uno de los subestados concurrentes. La destrucción de un objeto

41
es efectiva cuando el flujo de control del autómata alcanza un estado final no
anidado. La llegada a un estado final anidado implica la subida al superestado
asociado, no el fin del objeto.
Subestados
Un estado puede descomponerse en subestados, con transiciones entre ellos y
conexiones al nivel superior. Las conexiones se ven al nivel inferior como estados
de inicio o fin, los cuales se suponen conectados a las entradas y salidas del nivel
inmediatamente superior.
Transacción Compleja
Una transición compleja relaciona tres o más estados en una transición de
múltiples fuentes y/o múltiples destinos. Representa la subdivisión en threads del
control del objeto o una sincronización. Se representa como una línea vertical de
la cual salen o entran varias líneas de transición de estado.
Transición a estados anidados
Una transición de hacia un estado complejo (descrito mediante estados anidados)
significa la entrada al estado inicial del subdiagrama. Las transiciones que salen
del estado complejo se entienden como transiciones desde cada uno de los
subestados hacia afuera (a cualquier nivel de profundidad).
Transiciones temporizadas
 Las esperas son actividades que tienen asociada cierta duración.
 La actividad de espera se interrumpe cuando el evento esperado tiene
lugar.
 Este evento desencadena una transición que permite salir del estado que
alberga la actividad de espera. El flujo de control se transmite entonces a
otro estado.

42
Diagrama de Estado

Ejemplo de Diagrama de Estado

43
3. Técnicas de diseño detallado.
Los sistemas modernos de computación consisten en una gran conjunción de
elementos de circuitos (hardware) y de programación (software) que han sido
diseñados para proporcionar a la computación un ambiente productivo y hasta
cierta medida agradable.
El término Sistema de Cómputo se utiliza para señalar lo que el usuario emplea,
en lugar del término Computadora. En los primeros años de la computación, los
usuarios del sistema debían interactuar más estrechamente con el hardware real
que lo que es hoy necesario, muchas funciones que debían realizar los usuarios
mismos se manejan ahora por software mediante Sistemas Operativos. El
sistema operativo crea un ambiente en el cual los usuarios pueden preparar
programas y ejecutarlos sin tener que entrar en los detalles del hardware del
sistema.
Para satisfacer el crecimiento de la demanda de medios de computación, es que
se ha desarrollado la multiprogramación, en la cual varios usuarios emplean el
sistema de forma simultánea, como Windows por ejemplo. 
La computadora no solamente es una máquina que puede realizar procesos para
darnos resultados, sin que tengamos la noción exacta de las operaciones que
realiza para llegar a esos resultados. Con la computadora además de lo anterior
también podemos diseñar soluciones a la medida, de problemas específicos que
se nos presenten. Más aún, si estos involucran operaciones matemáticas
complejas y/o repetitivas, o requieren del manejo de un volumen muy grande de
datos.
El diseño de soluciones a la medida de nuestros problemas, requiere como en
otras disciplinas una metodología que nos enseñe de manera gradual, la forma de
llegar a estas soluciones.
A las soluciones creadas por computadora se les conoce como programas y no
son más que una serie de operaciones que realiza la computadora para llegar a un
resultado, con un grupo de datos específicos. Lo anterior nos lleva al
razonamiento de que un programa nos sirve para solucionar un problema
específico.
Para poder realizar programas, además de conocer la metodología mencionada,
también debemos de conocer, de manera específica las funciones que pueden
realizar la computadora y las formas en que se pueden manejar los elementos que
hay en la misma.
Computadora: Es un dispositivo electrónico utilizado para procesar información y
obtener resultados. Los datos y la información se pueden introducir en la
computadora como entrada (input) y a continuación se procesan para producir una
salida (output).

44
Proceso de información en la computadora

Datos de Procesos Datos de


entrada salida

Programa: Es el conjunto de instrucciones escritas de algún lenguaje de


programación y que ejecutadas secuencialmente resuelven un problema
específico.

Organización física de una computadora

Dispositivos de Entrada: Como su nombre lo indica, sirven para introducir datos


(información) en la computadora para su proceso. Los datos se leen de los
dispositivos de entrada y se almacenan en la memoria central o interna. Ejemplos:
teclado, scanners (digitalizadores de rastreo), mouse (ratón), trackball (bola de
ratón estacionario), joystick (palancas de juego), lápiz óptico.

Dispositivos de Salida: Regresan los datos procesados que sirven de


información al usuario. Ejemplo: monitor, impresora.

La Unidad Central de Procesamiento (C.P.U) se divide en dos:


 Unidad de control
 Unidad Aritmético - Lógica
Unidad de Control: Coordina las actividades de la computadora y determina que
operaciones se deben realizar y en qué orden; así mismo controla todo el proceso
de la computadora.

45
Unidad Aritmética - Lógica: Realiza operaciones aritméticas y lógicas, tales
como suma, resta, multiplicación, división y comparaciones.

La Memoria de la computadora se divide en dos:


 Memoria Central o Interna
 Memoria Auxiliar o Externa

Memoria Central (interna): La CPU utiliza la memoria de la computadora para


guardar información mientras trabaja con ella; mientras esta información
permanezca en memoria, la computadora puede tener acceso a ella en forma
directa. Esta memoria construida internamente se llama memoria de acceso
aleatorio (RAM).
La memoria interna consta de dos áreas de memoria:
La memoria RAM (Randon Access Memory): Recibe el nombre de memoria
principal o memoria del usuario, en ella se almacena información solo mientras la
computadora está encendida. Cuando se apaga o arranca nuevamente la
computadora, la información se pierde, por lo que se dice que la memoria RAM es
una memoria volátil.
La memoria ROM (Read Only Memory): Es una memoria estática que no puede
cambiar, la computadora puede leer los datos almacenados en la memoria ROM,
pero no se pueden introducir datos en ella, o cambiar los datos que ahí se
encuentran; por lo que se dice que esta memoria es de solo lectura. Los datos de
la memoria ROM están grabados en forma permanente y son introducidos por el
fabricante de la computadora.
Memoria Auxiliar (Externa): Es donde se almacenan todos los programas o
datos que el usuario desee. Los dispositivos de almacenamiento o memorias
auxiliares (externas o secundarias) más comúnmente utilizados son: cintas
magnéticas y discos magnéticos.

46
3.1 Diseño algorítmico.
La palabra algoritmo se deriva de la traducción al latín de la palabra árabe
alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió un
tratado sobre manipulación de números y ecuaciones en el siglo IX.
Un algoritmo es una serie de pasos organizados que describe el proceso que se
debe seguir, para dar solución a un problema específico.
Las características fundamentales que debe cumplir todo algoritmo son:
- Debe ser preciso. e indicar el orden de realización de cada paso.
- Debe ser definido. Si se sigue un algoritmo dos veces, se debe obtener
el mismo resultado.
- Debe ser finito. Si se sigue un algoritmo, se debe terminar en algún
momento; o sea debe tener un número finito de pasos.
La definición de un algoritmo debe describir tres partes: Entrada, Proceso y
Salida.
Tipos de Algoritmos
 Cualitativos: Son aquellos en los que se describen los pasos utilizando
palabras.
 Cuantitativos: Son aquellos en los que se utilizan cálculos numéricos
para definir los pasos del proceso.
Algoritmos Cotidianos
Se refiere a todos aquéllos algoritmos que nos ayudan a resolver problemas
diarios, y que los hacemos casi sin darnos cuenta de que estamos siguiendo una
metodología para resolverlos.
Algunos ejemplos son:
Diseñar un algoritmo para cambiar una llanta a un coche.
1. Inicio.
2. Traer gato.
3. Levantar el coche con el gato.
4. Aflojar tornillos de las llantas.
5. Sacar los tornillos de las llantas.
6. Quitar la llanta.
7. Poner la llanta de repuesto.

47
8. Poner los tornillos.
9. Apretar los tornillos.
10. Bajar el gato.
11. Fin
Un cliente ejecuta un pedido a una fábrica. La fábrica examina en su banco de
datos la ficha del  cliente, si el cliente es solvente entonces la empresa acepta el
pedido, en caso contrario rechazar el pedido.
 Pasos del algoritmo:
 Inicio
 Leer el pedido
 Examinar ficha del cliente
 Si el cliente es solvente aceptar pedido, en caso contrario rechazar pedido
 Fin
Determinar el mayor de tres números enteros.
Pasos del algoritmo:
1.-  Comparar el primero y el segundo entero, deduciendo cuál es el  mayor.
2.-  Comparar el mayor anterior con el tercero y deducir cuál es el  mayor. Este
será el resultado.
 Los pasos anteriores se pueden descomponer en otros pasos más simples en los
que se denomina refinamiento del algoritmo.
1.-  Obtener el primer número (entrada), denominado NUM1
2.-  Obtener el segundo número (entrada), denominado NUM2
3.-  Compara NUM1 con NUM2 y seleccionar el mayor; si los dos  enteros son
iguales, seleccionar NUM1. Llamar a este número MAYOR.
4.-  Obtener el tercer número (entrada), y se denomina NUM3.
5.-  Compara MAYOR con NUM3 y seleccionar el mayor; si los dos  enteros son
iguales, seleccionar el MAYOR. Denominar a este número MAYOR.
6.-  Presentar el valor MAYOR (salida).
7.-  Fin

48
Lenguajes Algorítmicos
Es una serie de símbolos y reglas que se utilizan para describir de manera
explícita un proceso.
Tipos de Lenguajes Algorítmicos
 Gráficos: Es la representación gráfica de las operaciones que realiza un
algoritmo (diagrama de flujo).
 No Gráficos: Representa en forma descriptiva las operaciones que
debe realizar un algoritmo (pseudocodigo).
Los algoritmos pueden describirse utilizando diversos lenguajes. Cada uno de
estos lenguajes permiten describir los pasos con mayor o menor detalle.
 La clasificación de los lenguajes para algoritmos puede enunciarse de la siguiente
manera:
 Lenguaje Natural.
 Lenguaje de Diagrama de Flujo.
 Lenguaje Natural de Programación.
 Lenguaje de Programación de Algoritmos.
 
Lenguaje Natural
Es aquél que describe en español, para nuestro caso, los pasos a seguir utilizando
un vocabulario cotidiano. Se le conoce  como lenguaje  jerga cuando se utilizan
términos especializados de una determinada ciencia, profesión o grupo.

Lenguaje de Diagrama de Flujo


Es aquél que se vale de diversos símbolos para representar las ideas o acciones a
desarrollar. Es útil para organizar las acciones o pasos de un algoritmo pero
requiere de etapas posteriores para implementarse en un sistema de cómputo.

Lenguaje Natural de Programación


Son aquéllos que están orientados a la solución de problemas que se definen de
una manera precisa. Generalmente son aplicados para la elaboración de fórmulas
o métodos científicos.

49
Tiene las siguientes características:
- Evita la ambigüedad (algo confuso que se puede interpretar de varias
maneras).
- Son precisos y bien definidos.
- Utilizan términos familiares al sentido común.
- Elimina instrucciones innecesarias.

3.1.1 Elementos y reglas de la representación gráfica de los


algoritmos.
Las dos herramientas utilizadas comúnmente para diseñar algoritmos son:
Diagrama de Flujo
Pseuducodigo

Diagrama de Flujo

Un diagrama de flujo es la representación gráfica de un algoritmo. También se


puede decir que es la representación detallada en forma gráfica de cómo deben
realizarse los pasos en la computadora para producir resultados.
Esta representación gráfica se da cuando varios símbolos (que indican diferentes
procesos en la computadora), se relacionan entre sí mediante líneas que indican
el orden en que se deben ejecutar los procesos.
Los símbolos utilizados han sido normalizados por el instituto norteamericano de
normalización (ANSI).

SÍMBOLO DESCRIPCIÓN

Indica el inicio y el final de nuestro diagrama de flujo.

Indica la entrada y salida de datos.

Símbolo de proceso y nos indica la asignación


de un valor en la memoria y/o la ejecución de
una operación aritmética.

Símbolo de decisión indica la realización de una


comparación de valores.

Se utiliza para representar los subprogramas.

50
Conector dentro de página. Representa la
continuidad del diagrama dentro de la misma página.

Conector fuera de página. Representa la


continuidad del diagrama en otra página.

Indica la salida de información por impresora.

Indica la salida de información en la pantalla o


Monitor.

Líneas de flujo o dirección. Indican la


Secuencia en que se realizan las operaciones.

Recomendaciones para el diseño de Diagramas de Flujo


 Se deben de usar solamente líneas de flujos horizontales y/o verticales.
 Se debe evitar el cruce de líneas utilizando los conectores.
 Se deben usar conectores solo cuando sea necesario.
 No deben quedar líneas de flujo son conectar.
 Se deben trazar los símbolos de manera que se puedan leer de arriba hacia
abajo y de izquierda a derecha.
 Todo texto escrito dentro de un símbolo deberá ser escrito claramente,
evitando el uso de muchas palabras.

51
Ejemplo: 
Calcular el salario neto de un trabajador en función del número de horas
trabajadas, precio de la hora de trabajo y considerando unos descuentos fijos al
salario bruto en concepto de impuestos (20 por 100).

52
Ejemplo:
Realizar un diagrama de flujo que permita mostrar en pantalla un mensaje de
mayoría o minoría de edad según sea el caso para un nombre específico.

53
Pseudocodigo

Ventajas de utilizar un Pseudocodigo a un Diagrama de Flujo


- Ocupa menos espacio en una hoja de papel
- Permite representar en forma fácil operaciones repetitivas complejas
- Es muy fácil pasar de pseudocodigo a un programa en algún lenguaje de
programación.
- Si se siguen las reglas se puede observar claramente los niveles que tiene
cada operación.

El pseudocódigo nació como un lenguaje similar al inglés y era un medio


representar básicamente las estructuras de control de programación estructurada.
Se considera un primer borrador, dado que el pseudocódigo tiene que traducirse
posteriormente a un lenguaje de programación. Cabe señalar que el pseudocódigo
no puede ser ejecutado por una computadora.
 
La ventaja del pseudocódigo es que en su uso en la planificación de un programa,
el programador se puede concentrar en la lógica y en las estructuras de control y
no preocuparse de las reglas de un lenguaje específico. Es también fácil modificar
el pseudocódigo si se descubren errores o anomalías en la lógica del programa,
además de todo esto es fácil su traducción a lenguajes como pascal, COBOL, C,
FORTRAN o BASIC.
 
El pseudocódigo utiliza para representar las acciones sucesivas palabras
reservadas en inglés (similares a sus homónimos en los lenguajes de
programación), tales como star,begin, end, stop, if-then-else, while, repeat-
until….etc
 
Secuencial
Inicio
acción1
acción2
:
acción n
 Fin
Decisión
Simple
si condición entonces
acción1
acción2
:
acción n
Doble
si condición entonces
acción1
acción2
:
54
en caso contrario
acción1
acció2
Iteracción
Fija
para   var. Entera inicial   hasta   final   
hacer
acción1
acción2
:
acción n
Condicional al inicio
mientras   condición    hacer
acción1
acción2
:
acción n
Condicional al final
Repetir
acción1
acción2
:
acción n
Hasta que condición
 
Selección
casos   selector   de
valor1 : acción1
acción2
valor2 : acción1
acción2
  valor n : acción1
acción2
 

3.1.2 Implementación de algoritmos secuenciales (utilizando notación


algebraica).
La estructura secuencial es aquella en la que una acción (instrucción) sigue a otra
en secuencia. Las tareas se suceden de tal modo que la salida de una es la
entrada de la siguiente y así sucesivamente hasta el fin del proceso. Una
estructura secuencial se representa de la siguiente forma:

55
Inicio
Accion1
Accion2
.
.
AccionN
Fin
- Asignación: La asignación consiste, en el paso de valores o resultados a una
zona de la memoria. Dicha zona será reconocida con el nombre de la variable que
recibe el valor. La asignación se puede clasificar de la siguiente forma:
 Simples: Consiste en pasar un valor constate a una variable (a=15)
 Contador: Consiste en usarla como un verificador del numero de veces
que se realiza un proceso (a=a+1)
 Acumulador: Consiste en usarla como un sumador en un proceso
(a=a+b)
 De trabajo: Donde puede recibir el resultado de una operación
matemática que involucre muchas variables (a=c+b*2/4).
- Lectura: La lectura consiste en recibir desde un dispositivo de entrada (p.ej. el
teclado) un valor. Esta operación se representa en un pseudocodigo como sigue:

Leer a, b
Donde “a” y “b” son las variables que recibirán los valores

Escritura: Consiste en mandar por un dispositivo de salida (p.ej. monitor o


impresora) un resultado o mensaje. Este proceso se representa en un
pseudocodigo como sigue:
Escribe “El resultado es:”, R

Donde “El resultado es:” es un mensaje que se desea aparezca y R es una


variable que contiene un valor.

56
Ejemplos de Problemas Secuenciales

1) Suponga que un individuo desea invertir su capital en un banco y desea saber


cuanto dinero ganara después de un mes si el banco paga a razón de 2%
mensual.
Inicio
Leer cap_inv
gan = cap_inv * 0.02
Imprimir gan
Fin

2) Un vendedor recibe un sueldo base mas un 10% extra por comisión de sus
ventas, el vendedor desea saber cuanto dinero obtendrá por concepto de
comisiones por las tres ventas que realiza en el mes y el total que recibirá en el
mes tomando en cuenta su sueldo base y comisiones.
Inicio
Leer sb, v1, v2, v3
tot_vta = v1 + v2 + v3
com = tot_vta * 0.10
tpag = sb + com
Imprimir tpag, com
Fin

3) Una tienda ofrece un descuento del 15% sobre el total de la compra y un cliente
desea saber cuanto deberá pagar finalmente por su compra.
Inicio
Leer tc
d = tc * 0.15
tp = tc - d

57
Imprimir tp
Fin
4) Un alumno desea saber cual será su calificación final en la materia de
Algoritmos. Dicha calificación se compone de los siguientes porcentajes:
55% del promedio de sus tres calificaciones parciales.
30% de la calificación del examen final.
15% de la calificación de un trabajo final.
Inicio
Leer c1, c2, c3, ef, tf
prom = (c1 + c2 + c3)/3
ppar = prom * 0.55
pef = ef * 0.30
ptf = tf * 0.15
cf = ppar + pef + ptf
Imprimir cf
Fin
5) Un maestro desea saber que porcentaje de hombres y que porcentaje de
mujeres hay en un grupo de estudiantes.
Inicio
Leer nh, nm
ta = nh + nm
ph = nh * 100 / ta
pm = nm * 100 / ta
Imprimir ph, pm
Fin
6) Realizar un algoritmo que calcule la edad de una persona.
Inicio
Leer fnac, fact
edad = fact - fnac

58
Imprimir edad
Fin.
3.2 Diseño algorítmico de las funciones.
Un problema complejo se puede dividir en pequeños subproblemas más sencillos.
Estos subproblemas se conocen como “Módulos” y su complementación en un
lenguaje se llama subprograma (procedimientos y funciones).
Un subprograma realiza las mismas acciones que un programa, sin embargo, un
subprograma lo utiliza solamente un programa para un propósito específico.
Un subprograma recibe datos de un programa y le devuelve resultados (el
programa “llama” o “invoca” al subprograma, este ejecuta una tarea específica y
devuelve el “control” al programa que lo llamo).

Tipos de Funciones

Módulos Procedimientos

Función: Una función en matemáticas, es una operación que toma un o mas


valores (argumentos) y devuelve un resultado (valor de la función para los
argumentos dados). Por ejemplo:

F(X) = X / (1+X2)
Donde:
F ………….. Nombre de la función
X …………. Es el argumento (también conocido como parámetro formal)

Definición de funciones: Una definición de función se presenta de la siguiente


manera:

Función nombre_funcion (p1, p2, …, pn)


Inicio
Bloque de instrucciones
Fin

59
Donde:
Función ……………Es la palabra clave que nos indica una definición de función.
Nombre_funcion ….. Es el identificador con el cual se reconoce a la función
en el cuerpo del
algoritmo principal.
P1,p2,…,pn ……... Es el grupo de parámetros que define a la función.

Llamado a una función


Cuando definimos una función solo le indicamos al algoritmo que esta
función existe, pero una definición de función no implica la realización de las
instrucciones que la constituyen. Para hacer uso de una función, el algoritmo
principal la debe llamar. Por ejemplo:

Función F(X)
Inicio
F = X /(1 + X^2)
Fin
Inicio
Imprimir “Este es el algoritmo principal”
Leer N
R = F(N) llamado de la función
Imprimir “El resultado de la función es:”,R
Fin

60
4. Introducción a la programación.
4.1 Clasificación del software.
Programas (software)
Software: Parte lógica del sistema informático que dota al equipo físico de la
capacidad para realizar cualquier tipo de tareas. De acuerdo a esta definición, el
software integraría el conjunto de programas ejecutables sobre el hardware junto
con los documentos y datos asociados a los mismos.
Teniendo en cuenta que el concepto software está íntimamente ligado al concepto
de programa, analicemos la definición de programa. Un programa no es más que
un conjunto de instrucciones que se dan a la computadora para indicarle la tarea
que se desea realizar. Aquí, una instrucción es un conjunto de símbolos de un
repertorio, construidos de acuerdo a unas reglas, que representan una orden de
operación para la computadora. Las instrucciones de un programa responden a
unas reglas sintácticas y semánticas bien establecidas que definen lo que se
denomina lenguaje de programación.
4.1.1 Software del sistema.
Software es un término general para las organizadas colecciones de datos e
instrucciones de computadora, frecuentemente se rompe en dos grandes
categorías: software de sistema que proporciona las funciones del sistema en
general, y el software de aplicación el cual es usado por los usuarios para tareas
específicas.
El software de sistema es responsable para controlar, integrar, y administrar los
componente de hardware individuales de un sistema de cómputo así que otro
software y los usuarios del sistema ven esto como una unidad funcional sin tener
que estar interesado con los de talles de bajo nivel tales como transferir datos de
la memoria al disco, o representación del texto sobre una exhibición.
Generalmente, el software de sistema consiste de un sistema operativo y algunas
utilidades fundamentales tal como formateador de disco, administrador de
archivos, administradores de visualización, editores de texto, autenticación de
usuario (login) y herramientas de administración, y gestión de redes y software de
control de dispositivos.
4.1.2 Software de aplicación.
El software de aplicación, en la otra mano, es usado para cumplir tareas
específicas con excepción del funcionamiento justo el sistema de cómputo
El software de aplicación puede consistir de un simple programa, tal como un
visualizador de imagen, una pequeña colección de programas (frecuentemente

61
llamado un paquete de software) que trabaja cercanamente junto para cumplir una
tarea, tales como una hoja de cálculo o un sistema de procesamiento de texto; una
larga colección (frecuentemente llamado un suite de software) de relacionado pero
programas independientes y paquetes que tienen interfaz de usuario común o
formato de datos compartida, tal como Microsoft Office, el cual consiste en un
integrador cercano procesador de palabras, hoja de cálculo, base de datos, etc.; o
un software de sistema, tal como un sistema de administración de base de datos,
el cual es una colección de los programas fundamentales que puede proporcionar
algún servicio de una variedad de otras aplicaciones independientes.
El software es creado con lenguajes de programación y utilidades relacionadas,
las cuales pueden venir en varias formas de las de arriba: programas simples
como intérpretes, paquetes que contienen un compilador, ligador, y otras
herramientas; y largas suites (frecuentemente llamadas IDE -ambiente de
desarrollo integrado-) que incluye editores, depuradores, y otras herramientas para
múltiples lenguajes.
 Programación
- Lenguajes de programación
- Editores de texto
- Compiladores
- Algoritmos
- Administración de color
- Proceso del desarrollo del software
- Herramientas para desarrollo de software
- Optimización de software
- Interfaz de programación de aplicación (API)
 Paquete de software
Programas de gráficos
- Formatos de archivos gráficos
- Gráficos de trama
- Gráficos de vector
- Gráficos 3D
- Video digital
Art software
- MLCAD
Suite de aplicaciones Office
- Procesador de palabras
- Hoja de cálculo
- Base de datos
- Sistema de administrador de documentos

62
Utilidades
- Productores multimedia
- Grabador en disco duro
Software de colaboración
- OpenSource
- Blog
- WikiWiki
- Slashcode
- NupeCode
- Everything Engine
Criptografía
- Pretty Good Privacy
- GNU Privacy Guard

 Sistemas Operativos
- Windows
- DOS
- Linux
- Unix
- Mac OS
- OS2
- Palm OS
- Etc.

 Licencias de software
- Open Source software
- Software piracy

4.2 Conceptos de la programación.


Programación: es automatizar y definir una serie de procesos para resolver un
problema y obtener un resultado final.
Un programa es el conjunto de instrucciones que se le dan al ordenador para
resolver un problema o tarea determinada.
Consiste en proporcionar a un equipo un conjunto de instrucciones (o sentencias)
que deben ser ejecutadas en orden, y que proporcionan una salida.
Preparación de los datos previos indispensables para obtener la solución de un
problema mediante las instrucciones codificadas de un ordenador.

63
Lenguaje de Programación Se utilizan para indicar al ordenador las acciones que
ha de realizar para resolver un determinado problema.
Básicamente los lenguajes de programación se componen de ordenes (en
adelante llamadas instrucciones) que es lo que en sí mismo le dice al ordenador lo
que tiene que hacer.
Un conjunto de esas instrucciones forman el programa.
Existen cinco estilos de programación y son los siguientes:
1. Orientados a Objetos.
2. Imperativa: Entrada, procesamiento y salidas de Datos.
3. Funcional: "Funciones", los datos son funciones, los resultados pueden ser un
valor o una función.
4. Lógico: {T,F} + operaciones lógicos (Inteligencia Artificial).
5. Concurrente: Aún está en proceso de investigación.

4.2.1 Definición de programa.


Un programa es un conjunto de instrucciones u órdenes basadas en un lenguaje
de programación que una computadora interpreta para resolver un problema o una
función específica.
1.- Es la relación ordenada de actividades, en informática se le conoce como la
serie codificada de instrucciones.
3. Redacción de un algoritmo en un lenguaje de programación.
4. Conjunto de instrucciones ordenadas correctamente que permiten realizar una
tarea o trabajo específico.
5. Toda secuencia de instrucciones o indicaciones destinadas a ser utilizadas,
directa o indirectamente, en un sistema informático para realizar una función o una
terea o para obtener un resultado determinado, cualquiera que fuere su forma de
expresión y fijación.
6. Conjunto secuenciado de instrucciones que quedan escritas en un lenguaje
determinado con unos fines específicos. Aunque en el lenguaje común con
frecuencia se denomina programa al sistema operativo, la diferencia estriba,
precisamente, en la especificidad de aquél frente al carácter de gestión global de
éste. La palabra software engloba ambos.
7. Archivo ejecutable o aplicación.
Un programa suele tener la extensión .exe en el sistema Windows, permitiendo su
ejecución directa.
También puede ser un programa que no es directamente ejecutable, sino que
necesita de un intérprete para correr.

64
8. Un programa es un conjunto de instrucciones escritas en algún lenguaje de
programación. El programa debe ser compilado o interpretado para poder ser
ejecutado y así cumplir su objetivo.

4.2.2 Definición de programación.


La programación es un arte en que se ejercita la mente para cumplir unos
objetivos, en los cuales, aparte de nosotros -los humanos- también lo interpretan
las máquinas. La programación se basa en códigos. Un código es una serie de
instrucciones que aprovecharemos para hacer nuestros programas.
¿Qué es la programación orientada a objetos?
La programación Orientada a objetos (POO) es una forma especial de programar,
más cercana a como expresaríamos las cosas en la vida real que otros tipos de
programación.
Con la 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.
Motivació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 de realizar las cosas de manera que
otras personas puedan utilizarlas y adelantar su trabajo, de manera que
consigamos que el código se pueda reutilizar.
La POO no es difícil, pero es una manera especial de pensar, a veces subjetiva de
quien la programa, de manera que la forma de hacer las cosas puede ser diferente
según el programador. 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í nos podemos
aprovechar de 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 aparcar.

65
Pues 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 en realidad hablábamos de las clases coche o fracción
porque sólo estuvimos definiendo, aunque por encima, sus formas.
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 que están
asociadas a un objeto.
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 instace 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

66
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.
Para crear un objeto se tiene que escribir una instrucción especial que puede ser
distinta dependiendo el lenguaje de programación que se emplee, pero será algo
parecido a esto.
miCoche = new Coche()
Con la palabra new especificamos que se tiene que crear una instancia de la clase
que sigue a continuación. Dentro de los paréntesis podríamos colocar parámetros
con los que inicializar el objeto de la clase coche.
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 una propiedad 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.
miCoche.color = rojo
El objeto es miCoche, luego colocamos el operador punto y por último el nombre e
la propiedad a la que deseamos acceder. En este ejemplo estamos cambiando el
valor del estado de la propiedad del objeto a rojo 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 coche que se ponga en marcha estamos
pasándole el mensaje “ponte en marcha”.
Para mandar mensajes a los objetos utilizamos el operador punto, seguido del
método que deseamos invocar.
miCoche.ponerseEnMarcha()
En este ejemplo pasamos el mensaje ponerseEnMarcha(). Hay que colocar
paréntesis igual que cualquier llamada a una función, dentro irían los parámetros.
Otras cosas
Hay mucho todavía que conocer de la POO ya que sólo hemos hecho referencia a
las cosas más básicas. También existen mecanismos como la herencia y el
polimorfismo que son unas de las posibilidades más potentes de la POO.

67
La herencia sirve para crear objetos que incorporen propiedades y métodos de
otros objetos. Así podremos construir unos objetos a partir de otros sin tener que
reescribirlo todo.
El polimorfismo sirve para que no tengamos que preocuparnos sobre lo que
estamos trabajando, y abstraernos para definir un código que sea compatible con
objetos de varios tipos.
Son conceptos avanzados que cuesta explicar en las líneas de ese informe. No
hay que olvidar que existen libros enteros dedicados a la POO y aquí solo
pretendemos dar un repaso a algunas cosas para que os suenen cuando tengáis
que poneros delante de ellas en los lenguajes de programación que debe conocer
un desarrollador del web.

4.2.3 Definición de lenguaje de programación.


Definición de Lenguaje.- Es una serie de símbolos que sirven para transmitir uno
o mas mensajes (ideas) entre dos entidades diferentes. A la transmisión de
mensajes se le conoce comúnmente como comunicación.
Lenguajes de Programación.- Es un conjunto de símbolos, caracteres y reglas
(programas) que le permiten a las personas comunicarse con la computadora.
Los lenguajes de programación tienen un conjunto de instrucciones que nos
permiten realizar operaciones de entrada/salida, calculo, manipulación de textos,
lógica/comparación y almacenamiento/recuperación .

4.3 Datos.
4.3.1 Definición.
Un dato es una representación simbólica (numérica, alfabética, algorítmica,
espacial, etc.) de un atributo o variable cuantitativa o cualitativa. Los datos
describen hechos empíricos, sucesos y entidades. Es un valor o referente que
recibe el computador por diferentes medios, los datos representan la información
que el programador manipula en la construcción de una solución o en el desarrollo
de un algoritmo.
Los datos aisladamente pueden no contener información humanamente relevante.
Sólo cuando un conjunto de datos se examina conjuntamente a la luz de un
enfoque, hipótesis o teoría se puede apreciar la información contenida en dichos
datos. Los datos pueden consistir en números, estadísticas o proposiciones
descriptivas. Los datos convenientemente agrupados, estructurados e
interpretados se consideran que son la base de la información humanamente
relevante que se pueden utilizar en la toma de decisiones, la reducción de la

68
incertidumbre o la realización de cálculos. Es de empleo muy común en el ámbito
informático y, en general, prácticamente en cualquier investigación científica.
En programación, un dato es la expresión general que describe las características
de las entidades sobre las cuales opera un algoritmo.
En estructura de datos, es la parte mínima de la información. Un dato por sí mismo
no constituye información, es el procesamiento de los datos lo que nos
proporciona información.

4.3.2 Tipos de datos.


Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple
carácter, tal como ‘b’, un valor entero tal como 35. El tipo de dato determina la
naturaleza del conjunto de valores que puede tomar una variable.

Los datos se clasifican en diversas categorías, según el tipo de máquina o del


lenguaje en uso. Generalmente podemos encontrar las siguientes categorías:
 Numéricos
 Lógicos
 Cadenas
Datos Numéricos
Son aquéllos que representan una cantidad o valor determinado. Su
representación se lleva a cabo en los formatos ya conocidos (enteros, punto y
fracciones decimales si estas existen).
Estos pueden representarse en dos formas distintas:
 Tipo Numérico Entero (integer).
 Tipo Numérico Real (real).

69
Enteros
  Es un conjunto finito de los números enteros. Los enteros son números
completos, no tienen componentes fraccionarios o decimales y pueden ser
negativos y positivos.
Algunos ejemplos son:
 7
 -10 9
 15.25
 50
Reales 
Consiste en un subconjunto de los números reales. Estos números siempre tienen
un punto decimal y pueden ser positivos o negativos. Un número real consiste de
un número entero y una parte decimal. Algunos ejemplos son:
 0.52 664.32
 6.579 8.0
 -9.3 -47.23
Lógicos
También se le denomina Booleano, es aquél dato que solo puede tomar uno de
dos valores: Falso y verdadero.
Se utiliza para representar las alternativas (si/no) a determinadas condiciones.
Por ejemplo, cuando se pide si un valor entero sea primo, la respuesta será
verdadera o falsa, según sea.
Las categorías y tipos que se mencionaron anteriormente se conocen como
Tipos Simples, puesto que no poseen una estructura compleja.
En forma adicional, cada lenguaje puede proporcionar la utilización de Tipos
Compuestos, siendo estos, datos que tienen una estructura predeterminada.
Tipos Compuestos
Entre los principales tipos compuestos se encuentran los siguientes:
a.-  SUBRANGO: Son aquéllos en los que se especifica con precisión el intervalo
de valores válidos para un dato.
Ejemplos:
0...100  (son  enumerativos de tipo entero)
'A'..'Z' (son enumerativos de tipo cadena)

70
Los Reales no son válidos para crear enumerativos, ya que su intervalo no está
definido.
b.-  ENUMERATIVOS: Son aquellos en los que se definen individualmente los
valores para un dato.
Ejemplos: (0,25,40,52)  Siempre deben ponerse entre paréntesis. 
c.-  DEFINIDOS POR EL USUARIO: Son aquellos que el programador crea para
satisfacer las necesidades del programa en diseño.
Cadenas
Son los datos que representan información textual (palabras, frases, símbolos,
etc). No representan valor alguno para efectos numéricos. Pueden distinguirse
porque son delimitados por apóstrofes o comillas.
Se clasifica en dos categorías:
 Datos tipo carácter (char)
 Datos tipo Cadena (string)
Datos Tipo Carácter 
Es un conjunto finito y ordenado de caracteres que la computadora reconoce. Un
dato de este tipo contiene solo un carácter.
Reconoce los siguientes caracteres:
 Caracteres Alfabéticos (A,B,C,…Z,a,b,c…z)
 Caracteres Numéricos (0,1,2,…9)
 Caracteres Especiales (+, -, *, /, ^, . , ;, <, >, $, …….)

Datos Tipo Cadena (string)
Es una sucesión de caracteres que se encuentran delimitados por una comilla
(apóstrofe) o dobles comillas, según el tipo de lenguaje de programación. La
longitud de una cadena de caracteres es el número de ellos comprendidos entre
los separadores o delimitadores.
Ejemplos:
 ‘Hola Mortimer’
 ’12 de octubre de 1496’
 ‘Enunciado cualquiera’ 
Nota: Los símbolos  disponibles para la formulación de caracteres y de cadenas
son aquéllos que se encuentran en el cóodigo ASCII.
ASCII (American Standard Code  for Information Interchange).
71
4.3.3 Identificadores.
Constantes y variables
Una Constante es aquélla que no cambia de valor durante la ejecución de un
programa (o comprobación de un algoritmo en este  caso).  Se representa en la
forma descrita para cada categoría.
Las Variables son aquéllas que pueden modificar su valor durante la ejecución de
un programa (idem).
Su representación se da a través de letras y símbolos generalmente numéricos a
los que se les asigna un valor.
Ejemplos:

  Constantes Variables

36
Numéricos 450.35 A
0.58 Nom
'A' Edad
Cadena 'Juan' Ciudad
'La Paz' Estatura

Falso  
Lógicos
Verdadero

Tipos de Datos Simples


Expresiones
Las expresiones son combinaciones de constantes, variables, símbolos de
operación, paréntesis y nombres de funciones especiales. Por ejemplo:
a+(b + 3)/c

Cada expresión toma un valor que se determina tomando los valores de las
variables y constantes implicadas y la ejecución de las operaciones indicadas.

72
Una expresión consta de operadores y operandos. Según sea el tipo de datos que
manipulan, se clasifican las expresiones en:
- Aritméticas
- Relaciónales
- Lógicas

4.3.4 Almacenamiento, direccionamiento y representación en memoria.


Almacenamiento
La computadora posee determinada cantidad de almacenamiento interno
denominado memoria principal, memoria RAM o memoria volátil. Esta memoria se
activa al encender la computadora y se desactiva al apagarla. Para que un
programa se ejecute, debe cargarse en la memoria principal, así como los datos
necesarios. Como es más costosa, es un recurso escaso donde sólo se
almacenan los datos que se requieren de inmediato, y los demás se relegan a los
dispositivos de almacenamiento externo, donde la capacidad de almacenamiento
es mayor, pero también el tiempo de recuperación. Por otra parte, el costo del
almacenamiento externo es más bajo.
Direccionamiento
La memoria principal de la computadora se divide en pequeñas unidades de
tamaño uniforme denominadas palabras, que tienen una dirección única.
Cada una de éstas palabras es capaz de almacenar una unidad de información
(como, por ejemplo, resultados numéricos), y determina el número más grande y
el más pequeño que puede almacenar.
El tamaño de la palabra depende de la computadora, pero siempre se especifica
en múltiplos de 8 bits. Así, existen computadoras con tamaños de palabra de 8,
16, 32 y 64 bits.
Cada palabra de la memoria principal tiene una dirección fija que va de cero hasta
el número total de palabras - 1. Las direcciones de memoria sirven para identificar
cada palabra individualmente, de tal manera que pueda accederse al dato
contenido en ella. A fin de simplificar su comprensión, las memorias se consideran
como una hilera de palabras.
Representación en memoria
La representación en memoria de los caracteres no reviste mayor complicación,
debido a que los códigos utilizados, como el ASCII (American Standard Code for
Information Interchange), les asignan valores enteros positivos.

73
En el caso de los datos numéricos hay que considerar la distinción entre números
negativos y positivos, y la que hay entre números de punto flotante y enteros.
Los signos se manejan normalmente mediante el bit más significativo de la palabra
(el situado a la extrema izquierda), y se le denomina bit de signo. Cuando el bit de
signo almacena un cero, el número se considera positivo; cuando almacena un
uno el número es negativo. Es por esto que, si el tamaño de la palabra es de m
bits, quedan m-1 bits para representar la magnitud del número almacenado.
Los números de punto flotante se manejan en formato logarítmico, con un número
fijo de bits para la base y otro para la mantisa. El estándar para los números de
punto flotante lo fija el IEEE.
Debido al formato logarítmico, los cálculos que se hacen con tipos de punto
flotante no son tan precisos como los que se hacen con tipos enteros

4.3.5 Sistema de numeración binaria y hexadecimal.


El sistema binario es el que usan los ordenadores, que es como si sólo tuvieran un
dedo, su unidad básica de memoria, el bit, sólo puede tomar dos valores, inactivo
o activo, y se codifican como 0 y 1, respectivamente.
Los ordenadores se quedan sin dedos enseguida, en cuanto tienen que contar
más de uno, así que añaden más dígitos.
Por ejemplo, veamos el número binario 10110.
Estamos en base 2, así que el número se calcula así:
0 * 2^0 + 1 * 2^1 + 1 * 2^2 + 0 * 2^3 + 1 * 2^4 = 2 + 4 + 16 = 22 (decimal)
Este tipo de numeración resulta muy útil cuando cada bit puede significar cosas
diferentes para un ordenador.
El sistema hexadecimal, que es el rey de los sistemas de numeración, al menos
en lo que respecta a los ordenadores.
Usa 16 dígitos, los archiconocidos 0 a 9 y para los otros seis se usan las letras A,
B, C, D, E y F, que tienen valores 10, 11, 12, 13, 14 y 15, respectivamente. Se
usan indistintamente mayúsculas y minúsculas.
Por ejemplo, un número hexadecimal 4F3D:
13 * 16^0 + 3 * 16^1 + 15 * 16^2 + 4 * 16^3 = 13 + 3 * 16+ 15 * 256 + 4 * 4096 =
20285

74
Este sistema de numeración tiene muchas ventajas:
La conversión entre binario y hexadecimal es tan simple como en octal, la única
diferencia es que los bits se agrupan de cuatro en cuatro. 0000 es 0, 0001 es 1,
0010 es 2 … 1111 es F.
El byte, es la unidad de memoria más usada por los ordenadores y agrupa ocho
bits. Para codificar un número de 8 bits sólo se necesitan dos dígitos
hexadecimales. El mayor número expresable por un byte, 11111111(binario),
equivale a 255(decimal) y a FF(hexadecimal).
Y para palabras de dos bytes (16 bits), se usan sólo cuatro dígitos hexadecimales.
(El número 16 aparece mucho cuando se habla de ordenadores.)
Para 32 bits: 8 dígitos hexadecimales, y sucesivamente.

4.4 Operadores, operandos y expresiones.


Operadores en Java
Instrucciones del lenguaje
Existen varios tipos de instrucciones en java: Instrucción simple, Instrucción
condicional, Instrucción iterativa e Instrucción simple
Una instrucción simple debe finalizar en punto y coma, y puede ser una expresión
con operadores, una llamada a un método, una declaración de variable o una
instrucción compuesta por varias instrucciones simples:
int a = 5; //Declaración de variable
System.out.println(a); //Llamada a método
a = a+4; // Expresión con operadores
System.out.println(++a); //instrucción compuesta de llamada a método y operador
++
Para definir una variable se emplea la misma sintaxis que para la definición de un
atributo en una clase, pero sin utilizar los modificadores de visibilidad, ni los
modificadores de atributos.
Operadores aritméticos
Además, en una instrucción simple pueden aparecer operadores, los hay de dos
tipos: los que actúan sobre un operador, o los que lo hacen sobre dos. Los
operadores los clasificaremos por su empleo:

75
Operadores aritméticos

(*) En java también se emplea el operador + para concatenar cadenas de texto.


Operadores relacionales

Nota: Los operadores relacionales siempre devuelven un valor booleano.


Hay que hacer especial mención a los operadores == y !=, además de ser
empleados en los tipos básicos del lenguaje pueden ser utilizados para comparar
dos objetos, o más específicamente, comparar dos referencias a objetos. Al
comparar dos referencias a objetos lo que realmente se comprueba es si ambas
referencias apuntan al mismo objeto o no. No confundir esto con comparar dos
referencias de tipo String, no se compararía si el texto es el mismo, sino si ambas
referencias apuntan al mismo objeto String. Para comparar String es necesario
hacerlo mediante los métodos que para ellos existen dentro de la clase String,
como por ejemplo equals:
String cad1 = "Texto";
String cad2 = "Texto2";
boolean resultado = cad1.equals(cad2);

76
Operadores lógicos:

Nota: Los operadores lógicos siempre devuelven un valor booleano.


Operadores a nivel de bit:

Los operadores a nivel a bit toman los operadores, los transforman a binario y
realizan las operaciones trabajando con los bits uno a uno.
Operadores de asignación:

Nota: Estos operadores son en realidad abreviaturas de otros operadores unidos


junto al operador asignación.
Por el hecho de poder emplear varios operadores en la misma expresión nos
encontramos con la necesidad de conocer el orden de evaluación de los
operadores:

77
4.5 Prioridad de operadores, evaluación de expresiones.
Precedencia de Operadores en Java

Existe una palabra clave llamada instanceof que puede ser interpretada como un
operador, encargado de comprobar si un objeto es una instancia de una
determinada clase, por ejemplo:
String cad = "unTexto";
Bolean resultado = cad instanceof String;

Instrucciones Condicionales
Java proporciona las instrucciones if/else, switch y el operador ternario para poder
tomar decisiones en función del resultado de la evaluación de una condición o
variable.
La instrucción if tiene la siguiente estructura:
if (condición)
{
//Código a ejecutar si condición es true
}
else
{
//Código a ejecutar si condición es false
}
Esta instrucción evalúa la expresión condición, y si es true, ejecuta el código que
hay entre las llaves que hay debajo de if. Si condición fuese false, el código a
ejecutar sería el contenido entre las llaves que existen debajo de else.
La parte else es opcional, es decir, esto también es correcto:
if (condición)
{
//Código a ejecutar si condición es true
}
En este caso si condición es false no sucede nada, la instrucción no ejecuta
ninguna instrucción.

78
Otra simplificación también correcta es que en caso de que sólo exista una
instrucción dentro de las llaves (del if, o del else) se pueden eliminar las llaves, es
decir:
if (condición) //instrucción a ejecutar si condición es true;
else //instrucción a ejecutar si condición es false;

79
Lo que no está permitido eliminar en ningún caso, son los puntos y coma de las
instrucciones que empleemos en la parte verdadera (if) o falsa (else), tengamos o
no las llaves.

4.6 Estructura básica de un programa.


C# es un lenguaje orientado a objetos puro, esto es, sólo puede manejar
aplicaciones creadas con el modelo de objetos ( a diferencia del lenguaje C++ que
permite crear aplicaciones con el modelo de objetos y aplicaciones con el modelo
procedimental). Debido a ésto, toda aplicación de C# debe constar de, al menos,
una clase que contenga al método Main().
Ejemplo:
saludo.cs
// Mi primer programa en C#
class HolaMundo
{
public static void Main( )
{
System.Console.WriteLine("¡ Hola, Mundo !");
}
}
Una aplicación puede definir tantas clases como sea necesario y también utilizar
clases predefinidas. La única condición es que una de las clases contenga al
método Main( ).
El código del método Main( ) marca el inicio para la ejecución de toda aplicación.

4.7 Proceso de creación de un ejecutable.


Una vez que se crea el código fuente en C#, se procede a la creación del código
ejecutable.
Para la creación de un ejecutable, primero debe compilarse el código fuente.
Para compilar una aplicación existen dos formas:
1. Desde la línea de comandos del DOS
2. Utilizando el IDE de Visual Studio .NET
Compilación desde la línea de comandos
1. Cargar Visual Studio .NET en modo comando desde: Todos los programas /
Microsoft Visual Studio .NET 2003/ Visual Studio .NET Tools / Símbolo del sistema
de Visual Studio .NET
2. Cambiarse a la carpeta donde se haya almacenado el código fuente. Ejemplo: C:\
> cd C:\EjemC#
3. Invocar al compilador: C:\EjemC#>csc saludo.cs . Esto crea el archivo
saludo.exe
El programa saludo.exe se ejecuta desde el símbolo del sistema, tecleando:
saludo <enter>

80
 
Compilación desde Visual Studio .NET
1. Todos los programas / Microsoft Visual Studio .NET 2003/ Visual Studio .NET
2003
2. En la ventana Microsoft Development Environment hacer clic en el botón Nuevo
proyecto
3. En la ventana Nuevo proyecto, con la carpeta Proyectos de Visual C# abierta, ir a
la parte derecha de la ventana y hacer doble clic en el icono Aplicación de consola.
4. Después de crearse algunas carpetas y archivos para el nuevo proyecto, se abrirá
una ventana con el siguiente texto:
using System;
namespace ConsoleApplication1
{
/// <summary>
/// Descripción breve de Class1.
/// </summary>
class Class1
{
/// <summary>
/// Punto de entrada principal de la aplicación.
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: agregar aquí código para iniciar la aplicación
//
}
}
}
Modifique este texto para que luzca como el archivo saludo.cs
En la barra de menú, haga clic en Depurar/Iniciar sin Depurar.
Si el código fuente fue tecleado correctamente, aparecerá una ventana de
consola, similar a la siguiente:
C:\EjemC#\EjemploHola\bin\Debug\saludo.exe
¡ Hola, Mundo !
Press any key to continue
 
 
 
 

5. Implementación de la clase.

81
En la fase de implementación, una clase es un tipo o molde que sirve para crear
objetos.
La sintaxis para declarar una clase es:
[modificador] class <nombre>
{
// Campos de la clase
// Métodos de la clase
}

5.1 Modificadores de acceso (Public, Private).


Los modificadores son elementos del lenguaje que se colocan delante de la
definición de variables locales, dato miembro, métodos o clases y que alteran o
condicionan el significado del elemento. En capítulos anteriores se ha descrito
alguno, como es el modificador static que se usa para definir datos miembros o
métodos como pertenecientes a una clase, en lugar de pertenecer a una instancia.
En capítulos posteriores se tratarán otros modificadores como final, abstract o
synchronized.

Modificadores de acceso

Los modificadores de acceso permiten al diseñador de una clase determinar quién


accede a los datos y métodos miembros de una clase.

Los modificadores de acceso preceden a la declaración de un elemento de la


clase (ya sea dato o método), de la siguiente forma:

[Modificadores] tipo_variable nombre;

[Modificadores] tipo_devuelto nombre_Metodo ( lista_Argumentos );

Existen los siguientes modificadores de acceso:

public - Todo el mundo puede acceder al elemento. Si es un dato miembro, todo el


mundo puede ver el elemento, es decir, usarlo y asignarlo. Si es un método todo el
mundo puede invocarlo.

private - Sólo se puede acceder al elemento desde métodos de la clase, o sólo


puede invocarse el método desde otro método de la clase.

protected - Se explicará en el capítulo dedicado a la herencia.

Sin modificador - Se puede acceder al elemento desde cualquier clase del


package donde se define la clase.

82
Pueden utilizarse estos modificadores para cualquier tipo de miembros de la clase,
incluidos los constructores (con lo que se puede limitar quien puede crear
instancias de la clase).

En el ejemplo los datos miembros de la clase Punto se declaran como private, y se


incluyen métodos que devuelven las coordenadas del punto. De esta forma el
diseñador de la clase controla el contenido de los datos que representan la clase e
independiza la implementación de la interface.

- class Punto
- private int x , y ;
- static private int numPuntos = 0;
- Punto ( int a , int b ) {
- x = a ; y = b;
- numPuntos ++ ;
- int getX()
- return x;
- int getY()
- return y;
- static int cuantosPuntos() {
- return numPuntos;

Si alguien, desde una clase externa a Punto, intenta:

Punto p = new Punto(0,0);

p.x = 5;

obtendrá un error del compilador.

Modificadores de acceso para clases

Las clases en si mismas pueden declararse:

public - Todo el mundo puede usar la clase. Se pueden crear instancias de esa
clase, siempre y cuando alguno de sus constructores sea accesible.

sin modificador - La clase puede ser usada e instanciada por clases dentro del
package donde se define.

Las clases no pueden declararse ni protected , ni private .

83
¿Son importantes los modificadores de acceso?

Los modificadores de acceso permiten al diseñador de clases delimitar la frontera


entre lo que es accesible para los usuarios de la clase, lo que es estrictamente
privado y ‘no importa’ a nadie más que al diseñador de la clase e incluso lo que
podría llegar a importar a otros diseñadores de clases que quisieran alterar,
completar o especializar el comportamiento de la clase.

Con el uso de estos modificadores se consigue uno de los principios básicos de la


Programación Orientada a Objetos, que es la encapsulación: Las clases tienen un
comportamiento definido para quienes las usan conformado por los elementos que
tienen un acceso público, y una implementación oculta formada por los elementos
privados, de la que no tienen que preocuparse los usuarios de la clase.

Los otros dos modificadores, protected y el acceso por defecto (package)


complementan a los otros dos. El primero es muy importante cuando se utilizan
relaciones de herencia entre las clases y el segundo establece relaciones de
‘confianza’ entre clases afines dentro del mismo package. Así, la pertenencia de
las clases a un mismo package es algo más que una clasificación de clases por
cuestiones de orden.

Cuando se diseñan clases, es importante pararse a pensar en términos de quien


debe tener acceso a qué. Qué cosas son parte de la implantación y deberían
ocultarse (y en qué grado) y que cosas forman parte de la interface y deberían ser
públicas.

5.2 Encapsulamiento de la clase.


Definición previa: un paquete es una colección de clases que se encuentran en el mismo
directorio. Las clases permiten implementar tipos de datos abstractos. El problema que se
presenta es que desde cualquier clase se puede accesar los campos de un objeto
perteneciente a otra clase.

Esto es una violación al principio de abstracción que dice que un tipo de datos abstracto
sólo puede ser manipulado a través de las operaciones que se definen para éste.

Visibilidad de Campos y Métodos

En java al definir una clase se puede controlar la visibilidad que tendrán sus campos y
métodos al exterior de la clase. Este control se efectúa de la siguiente forma:

- class A

84
- private int privx;

- protected int protb;

- public int pubc;

- int paqd;

- private void Met Priv?

- protected void Met Prot?

- public void Met Pub? A a

Un campo siempre es visible en la clase en donde se define

- privx a.privx

- protb a.protb

- pubc a.pubc

Un método siempre es visible

en la clase en donde se define

Met Priv a.Met Priv

void Met Paq?

Las palabras private, protected y public son atributos de un campo o un método y su


significado es el siguiente:

- private: El campo o método sólo es visible dentro de la clase donde se define.

- protected: El campo o método es visible en la clase en donde se define y en


cualquiera de sus subclases.

- public: El campo o método es visible en cualquier clase.

Ninguna de las anteriores: El campo o método es visible en cualquiera de las clases


pertenecientes al paquete en donde se define.

Ejemplo:

class B

public void Met B?

85
A a= new A

a.pubc= 1 Ok

a.priva= 2 error, privado

a.protb= 3 error, B no es

subclase de A

a.Met Pub Ok

a.Met Priv() error, privado

Visibilidad de Clases Al declarar una clase se puede especificar que es pública usando el
atributo public. De este modo la clase podrá ser usada por cualquier otra clase. Si la clase
no es pública entonces la clase sólo puede ser usada dentro del paquete que la contiene.

public class Box extends Graph Obj

Podemos hacer un resumen de los atributos que pueden tener campos, métodos o clases:

- Campo: private public protected final static

- Método: private public protected final abstract static

- Clase: public final abstract

Sólo se puede especificar uno de los atributos puestos en la misma llave.

El nombre de archivo

Un archivo puede contener a lo más una clase pública, en cuyo caso el nombre del
archivo debe ser el mismo de la clase pública, más la extensión .java. El resto de las
clases del archivo sólo serán visibles dentro del paquete.

Es usual que los archivos contengan una sola clase, pero también a veces se agregan
otras clases al archivo cuando éstas son usadas sólo dentro de ese mismo archivo.

5.3 El método como elemento de la comunicación.


Para que los objetos de un sistema trabajen coordinadamente necesitan
comunicarse.
La comunicación entre objetos se lleva a cabo a través del envío y/o recepción de
mensajes. La comunicación se establece a través de los métodos.
En C#, el envío y recepción de mensajes es semejante a la invocación a funciones
que se maneja en otros lenguajes de programación.
86
5.3.1 Sintaxis.
Los métodos pueden ser de dos tipos:
 de clase y
 de instancia
Los métodos de clase se declaran por medio del modificador static antepuesto al
nombre del método.
La sintaxis para declarar un método de clase o estático es:
[modificador de acceso] <tipoDeRetorno> static <nombre>( [parámetros])
{
// Cuerpo del método.
}
Ejemplo:
public static float daArea( )
{
return ba*altura ;
}
Cuando un método se declara como estático, sólo existe un ejemplar de él para
ser compartido por todos los objetos de la clase.
Los métodos de instancia no tienen el modificador static.
De los métodos de instancia existe un ejemplar en cada objeto de la clase.

5.3.2 Concepto de parámetro.

Un parámetro es una variable que puede pasar su valor a un procedimiento desde el


principal o desde otro procedimiento.

Existen ocasiones en que es necesario mandar al procedimiento ciertos valores para que
los use en algún proceso.

Estos valores que se pasan del cuerpo principal del programa al procedimiento se llaman
parámetros. Entonces una declaración completa es:

Static void Nom Proc(lista de parametros)

cuerpo de instrucciones

 import java.lang.

 import java.io.

 class prog13

87
 public static void main(String[] args)

 llamando procedimiento1 y pasando algunos parametros

 double beta=3.1416;

 proc1(8+4 , beta, “Jesus”

 cierra main

 public static void proc1(int a, double b, String nom

 double c = a + b;

 System.out.println(nom+ “ la suma fue =“ + c)

 cierra proc

 cierra clase

REGLAS PARA EL USO DE PARAMETROS

1.- Cuando se usan variables como parámetros, la variable que se manda debe ser
declarada dentro del principal o del procedimiento de donde se está enviando.

2.- La variable que se manda tiene un nombre, la que se recibe puede tener otro nombre.

3.- La cantidad de variables que se envían deben ser igual en cantidad, orden y tipo a las
variables que reciben.

4.- La variable que recibe tiene un ámbito local dentro del procedimiento, es decir solo la
puede usar ese procedimiento.

Y se pueden mandar datos, valores (excepto decimales), expresiones algebraicas, pero


siempre se recibe en variables.

5.3.3 Parámetros de salida y de entrada.

88
5.3.4 El constructor.
El constructor es un método especial que sirve para inicializar el estado de un
objeto.
El constructor es utilizado por el operador new para crear un objeto de la clase a la
que pertenece el constructor.
Ejemplo:
class Cuadrado
{
public int lado;
public Cuadrado( int x)
{
lado = x ;
}
}
class Principal
{
static void Main( )
{
Cuadrado c = new Cuadrado( 10 );
System.Console.WriteLine("Lado = " + c.lado ) ;
}
}
Cuando no se declara un constructor, el compilador crea un constructor
predeterminado, sin parámetros y con el cuerpo vacío.
Ejemplo:
public Cuadrado( )
{
}
Obsérvese que el método constructor debe tener el modificador de acceso public y
no tener tipo de retorno.

5.3.5 El destructor.
El método destructor sirve para liberar el espacio de memoria que se asigno a un
objeto de una clase.
La sintaxis para declarar un destructor es:
[atributos] ~ <identificador> ( )
{
// Cuerpo del destructor.
}
El identificador para el método destructor es el mismo que para el constructor.

89
Ejemplo:
public ~ Cuadrado( )
{
}
En C# no es necesario utilizar explícitamente un método destructor, ya que existe
un programa llamado recolector de basura (garbage collector), que se encarga de
checar cuáles objetos no están siendo referenciados en una aplicación y, cuando
esto sucede, devuelve la memoria ocupada por esos objetos. A partir de ese
momento, la memoria devuelta puede ser utilizada para crear nuevos objetos.

90
6. Estructuras secuenciales y selectivas.
6.1 Modificadores de acceso (Public, Private).
6.2 Entrada y salida de datos.
6.3 Interacción de la aplicación y la clase.
6.4 Estructuras selectivas.
6.4.1 Selectiva simple (si).
6.4.2 Selectiva doble (si / de otro modo).
6.4.3 Selectiva anidada.
6.4.4 Selectiva múltiple.
6.4.5 Selectiva Intenta (try/catch).

7. Estructuras de repetición.
7.1 Repetir mientras Selectiva simple (si).
7.2 Repetir hasta.
7.3 Repetir desde.

91

También podría gustarte