Tec. Ingeniera de Software

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 109

1 - Fundamentos de la Ingeniería de Software.

1.1 Conceptos básicos.


Entender el concepto de Ingeniería de Software es muy importante, ya que es el
fundamento de todas las metodologías, modelos, teorías, estándares, etc. que se han
generado a través del tiempo. Esto con el fin de hacer el proceso de desarrollo de software
más exacto y predecible, de tal manera que se generen acciones de mejora que lleven a la
masificación del producto de manera industrial y económicamente redituable.

Primero que nada, deberás conocer qué es la ingeniería y el software por separado,
entendiendo las características y elementos que los constituyen, para que posteriormente
comprendas por qué al unir una amplia área de estudio.

Ingeniería.

Partir de la definición de ingeniería nos permite entender por qué surge la necesidad por
qué surge la necesidad de generar procesos, para aplicar el ingenio, métodos modelos,
estándares y conocimiento científico, para aplicarlo en algo práctico y redituable.
Así como la sistematización y mejora de los procesos que permitan la producción más
rápida y abundante de producto siendo éste un bien o servicio.

Conjunto de conocimientos y técnicas que permiten aplicar el saber científico a la utilización


de la materia y de las fuentes de energía. La Ingeniería busca la aplicación de la ciencia en
los procesos industriales para su perfeccionamiento y las personas encargadas de aplicar
estos procesos son los especialistas llamados ingenieros.

Software,

Es un elemento de la computadora que abarca la lógica de la misma, el cual es necesario


para ejecutar una tarea. Tiene la propiedad de ser intangible y se compone de sistemas
operativos y de aplicación. Software puede ser estructuras de datos que permiten a los
programas manipular adecuadamente la información. Entonces, podemos definir al
Software como un código escrito en un lenguaje específico para un procesador. El código
está escrito en un lenguaje de programación.

Existen tres tipos de lenguajes de programación:


1.​ Bajo nivel o lenguaje máquina (ceros y unos).
2.​ Ensamblador formado por mnemónicos (palabras fáciles de recordar).
3.​ Alto nivel que se acerca más al lenguaje humano.

Definición general.

De acuerdo con los conceptos anteriores, podemos deducir que la Ingeniería en Software
es un área de estudio que se constituye por una serie de métodos y técnicas para
desarrollar software. Es la aplicación de un enfoque sistemático, disciplinado y cuantificable
hacia el desarrollo, operación y mantenimiento del software; es decir, la aplicación de
“ingeniería al software”. Respecto al aspecto económico, sugiere que debido a la aplicación
de la ingeniería de software se logrará establecer un proceso donde se puedan estimar
mejor los costos y obtener beneficios económicos. El software (producto), debe poder ser
utilizado y la información que genere deberá ser fiable, eso encierra un gran sentido de
calidad en el proceso de construcción de software.

La cuestión no es sólo construir en volumen, sino garantizar que el producto cubra los
propósitos para los que fue creado, es decir, los requerimientos que definió el cliente para
su desarrollo. Construir software con apego a un proceso y el tiempo que se necesita para
administrarlo son factores que no todos los desarrolladores están dispuestos a invertir en
sus proyectos.

Otro factor es que el tiempo nunca parece ser suficiente, lo que lleva a los desarrolladores
de software a dedicarse por completo a la codificación, haciendo a un lado procesos como
el análisis y el diseño. Esto es equivalente a la construcción de un edificio, sin planos o
maquetas.

En la Ingeniería de software es muy similar, antes de construir el software se debe planear,


analizar y diseñar lo que se va a construir. De lo contrario se toma un gran riesgo de no
construir el producto esperado en tiempo y forma. La ingeniería de software contempla todo
el proceso de desarrollo de sistemas de información, software de aplicación o de sistemas.

Desarrollo.

El proceso de desarrollo de software consta de una serie de actividades necesarias para


construir un producto de software. Todos comparten por lo menos las siguientes etapas:
1.​ Especificación: se definen los requerimientos y restricciones de operación.
2.​ Diseño e implementación: actividades necesarias para construir el software
abarcando los requerimientos de la especificación.
3.​ Validación: revisión con el cliente para su aprobación.
4.​ Evolución: capacidad de adaptación a cambios y actualizaciones del software.

1.2 Fases de la Ingeniería de software.

Para la construcción de cualquier tipo de producto de software se desarrollan una serie de


actividades partiendo desde la visión del proyecto que el cliente tiene hasta el producto final.
Cada proyecto es único y no existe un modelo que pueda aplicarse cien por ciento a todos
los proyectos.

La ingeniería de software consta de una serie de pasos que buscan garantizar que los
programas creados son eficientes, fiables, seguros y responden a las necesidades de los
usuarios finales. El ciclo de vida del desarrollo del software contempla las fases necesarias
para validar el desarrollo del software y así garantizar los requisitos para la aplicación y
verificación de los procedimientos de desarrollo.

Planificación.

La realización de un estudio de viabilidad.


El análisis de los riesgos asociados y la estimación del coste del proyecto.
Planificación temporal y la asignación de recursos a las diferentes etapas del proyecto.
Implementación.

Primero que nada, se debe estudiar las posibles opciones de implementación para el
software que hay que construir, así como decidir la estructura general del mismo. Es posible
que la solución inicial no sea la más adecuada, por lo que en tal caso hay que refinarla.
Elegir las herramientas adecuadas, un entorno de desarrollo que facilite el trabajo y un
lenguaje de programación apropiado para el tipo de software a construir.

Al programar, hay que intentar que el código no sea indescifrable siguiendo distintas pautas
como las siguientes:
1.​ Evitar bloques de control no estructurados. Identificar correctamente las variables y
su alcance.
2.​ Elegir algoritmos y estructuras de datos adecuadas para el problema. Mantener la
lógica de la aplicación lo más sencilla posible.
3.​ Documentar y comentar adecuadamente el código de los programas. Facilitar la
interpretación visual del código utilizando reglas de formato de código previamente
consensuadas en el equipo de desarrollo.
4.​ Dentro de esta misma fase, debe realizarse una serie de pruebas para detectar los
fallos cometidos en las etapas anteriores y así corregirlos. Lo ideal es hacerlo antes
de que el usuario final se los encuentre.

Instalación.

La siguiente fase es poner el software en funcionamiento, por lo que hay que planificar el
entorno teniendo en cuenta las dependencias existentes entre los diferentes componentes
del mismo. Es posible que haya componentes que funcionen correctamente por separado,
pero que al combinarlos provoquen problemas. Por ello, hay que usar combinaciones
conocidas que no causen problemas de compatibilidad.

Mantenimiento.

Esta es una de las fases más importantes del ciclo de vida de desarrollo del software.
Puesto que el software ni se rompe ni se desgasta con el uso, su mantenimiento incluye tres
puntos diferenciados:
1.​ Eliminar los defectos detectados durante su vida útil (mantenimiento correctivo).
2.​ Adaptarlo a nuevas necesidades (mantenimiento adaptativo).
3.​ Añadirle nuevas funcionalidades (mantenimiento perfectivo).

Aunque suene contradictorio, cuanto mejor es el software más tiempo hay que invertir en su
mantenimiento. La principal razón es que se usará más (incluso de formas que no se habían
previsto) y por ende, habrá más propuestas de mejoras.

Aquí el producto ya puede convertirse en puesta de producción, donde se presenta al


cliente, sabiendo que funciona correctamente y responde a los requerimientos solicitados.
Las características implícitas o explícitas de cada proyecto hacen necesaria una etapa
previa destinada a obtener el objetivo.
Por último puede agregarse la fase de control en producción, analizando cómo el proceso
difiere o no de los requerimientos originales e iniciando las acciones correctivas si fuesen
necesarias. Cuando se dice que hay que corregir el producto, se hace referencia a
pequeñas desviaciones de los requerimientos originales puedan llegar a surgir en el
ambiente productivo.

Si el programa no realiza la tarea para la cual fue creado, esta etapa no es la adecuada
para el rediseño. También se incluye en esta etapa el liderazgo, documentación y
capacitación.

●​ Objetivo de cada fase.


Se pueden establecer una serie de objetivos, tareas y actividades que lo
caracterizan:
1.​ Expresión de necesidades y especificaciones.
2.​ Análisis, diseño e implementación.
3.​ Validación y evolución.

1.3 Actividad 1.
1.4 Estructura de datos.

Una estructura de datos es una forma particular de organizar datos en una computadora
para que pueda ser utilizado de manera eficiente. Es un medio para manejar grandes
cantidades de datos de manera eficiente para usos tales como grandes bases de datos y
servicios de indización de Internet.

Las estructuras de datos se basan generalmente en la capacidad de un ordenador para


recuperar y almacenar datos en cualquier lugar de su memoria. Diferentes tipos de
estructuras de datos son adecuados para diferentes tipos de aplicaciones y algunos son
altamente especializados para tareas específicas.

Importancia.

Las estructuras de datos eficientes son la clave para diseñar algoritmos eficientes. Algunos
métodos formales de diseño y lenguajes de programación destacan las estructuras de
datos, en lugar de los algoritmos, como el factor clave de organización en el diseño de
software. El uso de un sistema eficaz puede ayudarle a recuperar información fácilmente.

Los empleadores suelen preguntar a las personas sobre las estructuras de datos en las
entrevistas de informática para demostrar su conocimiento del punto de partida fundamental
para la programación.

Tipos.

●​ Arrays: las matrices almacenan elementos similares juntos. Esta estructura utiliza la
asignación de memoria.
●​ Pilas: las utilizan una estructura de último en entrar, primero en salir (LIFO) en la que
el ordenador, ordena el trabajo previo con la última acción que aparece primero.
●​ Colas: las colas siguen una estructura de «primero en entrar, primero en salir»
(FIFO) para organizar los datos.
●​ Listas enlazadas: organizan los elementos o nodos en órden lineal en función de los
relacionados entre sí. Cada nodo está formado por los datos y un puntero.
●​ Árboles binarios: es una estructura no lineal que consta de nodos con dos valores o
direcciones potenciales. El nodo superior o raíz, contiene un hijo derecho y un hijo
izquierdo.
●​ Gráficos: son un tipo de lista no lineal que se utiliza para representar una red. Están
formados por nodos y aristas que se conectan entre sí.
●​ Pruebas: las pruebas o “árboles de prefijos” son estructuras de datos en forma de
árbol utilizadas para almacenar datos.
●​ Tablas hash: o mapas, almacenan pares clave.valor. Calculan un índice o código
hash, en ranuras donde se encuentra el valor deseado.
●​ Catálogos: las listas de saltos son estructuras de datos probabilísticas que
enumeran elementos con una lista.

Módulos.

Aunque el diseñador pueda diseñar un módulo que exporte cualquier tipo de recursos
(variables, tipos, procedimientos y funciones, etiquetas, etc.). La mayoría de los módulos
pueden ser clasificados dentro de ciertas categorías estándar.

Dicha categorización es útil porque provee un esquema uniforme de clasificación para


documentación y posiblemente para la recuperación a partir de una biblioteca de
componentes. Categorización de módulos es un paso hacia el desarrollo de componentes
estándar en ingeniería de software, estos son:
1.​ Abstracción procedural, librerías y agrupamiento común de datos.
2.​ Objetos abstractos y tipos de datos abstractos.
3.​ Un tipo de módulo útil provee sólo un procedimiento o función, correspondiendo
alguna operación abstracta.
4.​ Dichos módulos implementan una abstracción procedural y son usados para
encapsular un algoritmo.
Ejemplos típicos son los módulos de clasificación, módulos que transforman un lenguaje a
otro.

Categorización.

●​ Procedimientos abstractos y librerías: un módulo puede contener un grupo de


procedimientos abstractos relacionados. Un típico ejemplo se observa en las
librerías de matemáticas.
●​ Agrupamiento común de datos: una vez se reconoce la necesidad de compartir
datos entre varios módulos, se pueden agrupar dichos datos en una agrupación
común que es importada para todos los módulos de clientes.
●​ Objetos abstractos: el 17% de costos que involucran el desarrollo del mantenimiento
de software, se deben a los cambios de la representación de los datos.
●​ Tipos de datos abstractos: un tipo de datos abstracto es un módulo que exporta un
tipo, junto con sus operaciones que deben ser invocadas para poder tener acceso y
manipular objetos de tal tipo. La ADT no sustituye la programación estructurada.
Más bien, provee una formalización adicional que puede mejorar el proceso de
desarrollo de programas.
●​ Arreglo: es una serie de elementos en un orden específico, por lo general todos del
mismo tipo (si bien los elementos pueden ser de casi cualquier tipo).
●​ Un arreglo asociativo (diccionario o mapa): es una variante más flexible que una
matriz, en la que se puede añadir y eliminar libremente pares nombre-valor.

1.5 Metodologías de desarrollo de software.

Cascada.

“Ciclo de vida básico del software”, sugiere un enfoque sistemático, secuencial para el
desarrollo de software. Inicia en un nivel de sistemas y progresa con el análisis, diseño,
implementación, pruebas y mantenimiento. Desarrollado entre 1960-1980. Se conoce como
ciclo de vida básico.

Secuencia de actividades donde la estrategia principal es seguir el progreso del


desarrollador de software hacia puntos de revisión bien definidos mediante entregas
calendarizadas.

●​ Análisis de requerimientos: sirve para comprender la naturaleza de los programas a


desarrollar. El ingeniero debe comprender el dominio de información del software,
así como la función requerida, el comportamiento, el rendimiento y la interconexión.
●​ Diseño: es un proceso de muchos pasos que se centra en 4 atributos del programa:
1.​ Estructura de datos: arquitectura de software, representaciones de interfaz y
detalle-procedimental (algoritmo).Traduce requisitos en una representación
del software donde se puede evaluar su calidad antes de que comience su
codificación.
2.​ Generación de código: el diseño se traduce en una forma legible por la
máquina, usando lenguajes de programación o lenguajes 4gl entre otros.
3.​ Pruebas: después de generar el código se prueba la funcionalidad de este,
haciendo un test de los procesos lógicos internos, se busca detectar errores
y garantizar que el software hace exactamente lo que debe hacer.
4.​ Mantenimiento: el software debe sufrir cambios, ya sea por la detección de
errores, por nuevas necesidades y requerimientos, por modernizar la
funcionalidad de este o por adaptación a cambios del medio externo del
software.

Repetitivo.

Este modelo guía el proceso de desarrollo de software en repeticiones. Proyecta el proceso


de desarrollo de forma cíclica repitiendo cada paso después de cada ciclo del proceso
SDLC. Entonces por cada repetición más módulos y características son diseñados,
codificados, evaluados y agregados al software.Cada ciclo produce un software completo,
con más características y capacidad de los anteriores.
Espiral.

El modelo empieza determinando los objetivos y las limitaciones del software al inicio de
cada repetición. En la siguiente etapa se crean los modelos de prototipo del software. Esto
incluye el análisis de riesgos. Luego un modelo estándar de SDLC se usa para construir el
software. En la cuarta etapa es donde se prepara el plan para la siguiente repetición.

Modelo en V.

El modelo V aporta opciones de evaluación del software en cada etapa de manera inversa.
En cada etapa, se crea la planificación de las pruebas y los casos de pruebas para verificar
y validar el producto según los requisitos de la etapa. Por ejemplo, en la etapa de recogida
de requisitos, el equipo de evaluadores prepara las pruebas correspondientes a los
requisitos.

Más tarde, cuando el producto se desarrolle y esté preparado para ser evaluado, las
pruebas de caso en esta etapa verificarán el software y su validez según sus requisitos.
Esto hace que tanto la verificación como la validación vayan en paralelo. Este modelo
también se conoce como modelo de validación y verificación.

Big Bang.

Es el modelo con la forma más simple. Requiere poca planificación, mucha programación y
también muchos fondos. Se conceptualiza en torno a la teoría de creación del universo “Big
Bang”. Para este modelo, se requiere poca planificación. No sigue ningún proceso concreto,
ya que a veces el cliente no está seguro de las futuras necesidades y requisitos. Por tanto la
entrada o input respecto a los requisitos es arbitraria.

Este modelo no es recomendable para grandes proyectos de software, pero es bueno para
aprender y experimentar. Como conclusión, lo que se busca con una metodología es
prolijidad, corrección y control en cada etapa del desarrollo de un programa.

Lo que nos permitirá una forma sistemática para poder obtener un producto correcto y libre
de errores. Las diferencias entre los modelos mencionados son las siguientes:
1.​ El alcance del ciclo de vida.
2.​ La cualidad y cantidad de las etapas.
3.​ La estructura y la sucesión de las etapas.

Por ello debemos deducir el modelo que mejor se adapte al proyecto que desarrollaremos.
Podemos analizar para guiarnos en nuestra elección, la complejidad del problema, el tiempo
que disponemos para hacer la entrega final.

Si el usuario o cliente desea entregas parciales, la comunicación que existe entre el equipo
de desarrollo y el usuario y por último, tener certeza de que los requerimientos dados por el
usuario son correctos y completos.
1.7 Fundamentos de la programación.

Algoritmo.

Es un método para resolver un problema, conformado por una secuencia finita de pasos
ordenados de manera lógica que se deben seguir para resolver un problema. Un algoritmo
cumple con las siguientes características:

●​ Preciso: indicar el orden de cada paso de manera clara y sin ambigüedades.


●​ Definido: se debe obtener el mismo resultado cada vez que se ejecute el algoritmo.
●​ Finito: Debe terminar en algún momento.

Los algoritmos se pueden presentar no solamente ante problemas matemáticos complejos,


sino también con problemas cotidianos. Ejemplo:
¿Qué hacer para ver la nueva película de superhéroes de Marvel?

La respuesta puede ser descrita de la siguiente forma:


1.​ Ir al cine.
2.​ Comprar una entrada.
3.​ Ver la película.
4.​ Regresar a casa.

Esto representa un algoritmo que consta de cuatro acciones básicas, cada una de las
cuales debe ser ejecutada antes de realizar la siguiente.

Programas.

Es conocida como la parte blanda que indica las tareas que debe realizar un dispositivo
electrónico como una computadora. Estos programas controlan y dirigen a la computadora
para que realice un conjunto de acciones (instrucciones) especificadas por personas
especializadas.

Etapas.

El proceso para la resolución de un problema por un computador sigue una serie de fases o
pasos comunes que generalmente deben seguir todos los programadores. Estas son:

1.​ Análisis del problema; identificar datos de entrada, salida, pasos a seguir y
restricciones o requerimientos adicionales.
2.​ Diseño del algoritmo: determina cómo hace el programa la tarea solicitada. Aquí se
utilizarán dos herramientas para diseñar algoritmos: Pseudocódigo y Diagramas de
Flujo.
3.​ Codificación: traduce el algoritmo diseñado a código de lenguaje de programación
(código fuente) y lo convierte en un programa.
4.​ Compilación y ejecución: comprueba el funcionamiento del programa.
5.​ Verificación y depuración: se eliminan los errores de compilación, ejecución y lógicos
que existan en el código fuente.
6.​ Documentación y mantenimiento: evidenciar todo lo trabajado en un documento
detallado de manera que se sepa cómo se elaboró el programa y cómo puede
modificarse o corregirse en el tiempo.

Conceptos básicos:

●​ Dato: cifra, letra o palabra que se suministra a la computadora como entrada y la


máquina almacena en un determinado formato. Un dato es una representación
simbólica (numérica, alfabética, algorítmica, espacial, etc.) de un atributo o variable
cuantitativa o cualitativa.
●​ Tipo de dato: es un atributo de los datos que indica al ordenador sobre la clase de
datos que se va a manejar. La mayoría de las computadoras pueden trabajar con
varios tipos de datos:
1.​ Numérico real.
2.​ Lógico o booleano: 1 (encendido, verdadero o true), 0 (apagado, falso o
false).
3.​ Carácter y cadena.
●​ Identificador: Es una secuencia de caracteres, letras, dígitos y subguiones que
sirven para nombres variables y constantes. Para escribir correctamente un
identificador se deben seguir estas reglas:
1.​ Siempre debe comenzar por una letra o subguión. No debe empezar con
número.
2.​ No debe tener espacios en blanco.
3.​ No debe tener caracteres especiales (#, $, etc.).
4.​ No debe tener letras con virgulilla (Ñ, ñ), acento agudo (Á, é, í), diéresis (ü,
ë), cedilla, apóstrofo, etc.
●​ Constante: es un dato que permanece sin cambios durante todo el desarrollo del
algoritmo o durante la ejecución del programa.
●​ Variable: una variable es un espacio de memoria donde se puede guardar un dato y
pueden ser de cualquiera de los tipos de datos antes mencionados.
●​ Expresiones: combinación de operadores y operandos. Los operandos pueden ser
variables, constantes (números) y llamadas a funciones. Las reglas son las
siguientes:
1.​ Un operando situado entre dos operadores de igual prioridad se liga al
operador de la izquierda.
2.​ Las expresiones entre paréntesis se evalúan primero para ser tratadas como
operandos simples.

Diferencias:

Un algoritmo no es lo mismo que un programa (software).


Un algoritmo es el método para resolver un problema, mientras que el programa es la
implementación del algoritmo bajo cierto lenguaje de programación (como C++, Java u otro)
y ejecutado en una computadora.
1.8 Análisis y Diseño de algoritmos.

La resolución de un problema mediante un ordenador consiste en, partiendo de una


especificación del problema, construir un programa que lo resuelva. Los procesos
necesarios para la creación de un programa como recordatorio son los siguientes:
1.​ Especificación y análisis del problema en cuestión.
2.​ Diseño de un algoritmo que resuelva el problema.
3.​ Codificación del algoritmo en un lenguaje de programación.
4.​ Validación del programa.
5.​ Debe ser independiente del lenguaje de programación que se emplee para
interpretarlo.

Estructura:

El proceso de diseñar algoritmos (para su posterior codificación) consiste en definir las


acciones o instrucciones que resuelvan el problema. Conceptualmente un programa se
podría visualizar como una caja negra a donde llegan entradas (datos) y se obtienen salidas
(resultados). El algoritmo aparte de tener las instrucciones propias que solucionan el
problema también deben contar con instrucciones para recepcionar correctamente las
entradas y también para presentar las salidas o resultados.

Instrucciones:

Las instrucciones que se escriben en un algoritmo (y luego en un lenguaje de programación)


son:

1.​ Instrucciones de inicio/fin: delimitan un bloque de instrucciones.


2.​ Instrucciones de asignación: usadas para guardar datos o expresiones en variables
o en constantes haciendo uso del operador de asignación.
3.​ Instrucciones de lectura: sirven para capturar los datos de entradas.
4.​ Instrucciones de escritura: sirven para mostrar los datos de salida.
5.​ Instrucciones declarativas: toda variable o constante debe ser reconocida antes de
usarse en el algoritmo, a esta acción se le llama declaración de variables o
constantes.
Las instrucciones de un algoritmo pueden plantearse utilizando lenguaje natural de modo
que cada persona formule su solución como mejor crea conveniente pero esto ocasiona una
falta de estandarización.

Para lograr un entendimiento entre programadores se han creado diversas herramientas


para plantear un algoritmo a continuación, se mostrarán 2: Pseudocódigo y diagrama de
flujo:
Pseudocódigo:

El pseudocódigo es una serie de instrucciones escritas bajo cierta estructura y reglas que
inducirá al alumno a adecuarse y hacer el paso más fácil hacia los lenguajes de
programación. El algoritmo se dividirá en diversas secciones que se verán a continuación.

1.​ Nombre del algoritmo: todo algoritmo escrito en pseudocódigo comienza con esta
línea y consta de dos partes, la palabra algoritmo y el identificador que le da nombre
al algoritmo.
2.​ Declaración de constantes: en ciertas ocasiones un algoritmo necesitará de algunas
constantes las cuales se deben declarar antes de ser usadas. Por ejemplo: Pi.
3.​ Declaración de variables: para declarar variables se escribe la abreviatura var y en la
siguiente línea, con identificación, la lista de variables especificando qué tipo de dato
guardará cada una.
4.​ Instrucciones: las instrucciones del algoritmo deben estar comprendidas entre las
instrucciones de inicio y fin. Las instrucciones intermedias serán de escritura lectura
y asignación.
5.​ Asignación: la variable que guarda el dato va al lado izquierdo; el operador de
asignación (←) en el medio y el dato, variable o expresión, del dato derecho.
6.​ Lectura: instrucción que permite capturar un dato de entrada y guardarlo en una
variable previamente declarada.
7.​ Escritura: instrucción que permite mostrar los datos obtenidos en la pantalla.

Diagrama de flujo:

Es la herramienta para diseñar algoritmos más antigua y solía ser la más utilizada. Su
empleo ha disminuido considerablemente desde la aparición de los lenguajes de
programación estructurados. Un diagrama de flujo utiliza símbolos y describen las
instrucciones que debe seguir el algoritmo.

●​ Símbolo terminal: Representa el comienzo “inicio”; y el final: “fin” de un programa.

●​ Entrada salida: es cualquier tipo de introducción de datos en la memoria desde los


periféricos, “entrada”, o registro de la información, procesada en un periférico,
“salida”.
●​ Proceso: es cualquier tipo de operación que pueda originar cambio de la información
almacenada en memoria, operación aritmética, de transferencia, etc.

●​ Línea de flujo: indica el sentido de ejecución de las operaciones.

●​ Decisión: indica operaciones lógicas o de comparación entre datos (normalmente


dos) por lo regular tiene 2 salidas: SI y NO.

●​ Conector: sirve para enlazar dos partes cualesquiera de un ordinograma a través de


un conector en la salida y otro conector en la entrada.

●​ Conector: conexión entre dos puntos del organigrama situado en páginas diferentes.

●​ Llamada a subrutina: una subrutina es un módulo independiente del programa


principal.
1.9 Actividad 3

1.10 Revisión de especificación de requisitos.

La ingeniería de requisitos del software es un proceso de descubrimiento, refinamiento,


modelado y especificación. Se refinan en detalle los requisitos del sistema y el papel
asignado al software.

Tanto el desarrollador como el cliente tienen un papel activo en la ingeniería de requisitos.


El cliente intenta replantear un sistema confuso, a nivel de descripción de datos, funciones y
comportamiento en detalles concretos. El desarrollador actúa como interrogador, cómo
consultor, como persona que resuelve problemas y como negociador.

Tareas de análisis:

●​ Reconocimiento del problema: se deben de estudiar inicialmente las


especificaciones del sistema y el plan del proyecto del software. El analista debe
establecer un canal adecuado de comunicación con el equipo de trabajo involucrado
en el proyecto. En esta etapa la función primordial del analista en todo momento es
reconocer los elementos del problema tal y como los percibe el usuario.
●​ Evaluación y síntesis: en esta etapa el analista debe centrarse en el flujo y estructura
de la información, definir las funciones del software. Determinar los factores que
afectan el desarrollo de nuestro sistema, establecer las características de la interfaz
del sistema y describir las restricciones del diseño. Todas las tareas anteriores
conducen fácilmente a la determinación del problema de forma sintetizada.

Modelado:

●​ Modelado: Durante la evaluación y síntesis de la solución, se crean modelos del


sistema que servirán al analista para comprender mejor el proceso funcional,
operativo y de contenido de la información.
●​ Especificación: las tareas asociadas con la especificación intenta proporcionar una
representación del software. Esto más adelante permitirá llegar a determinar si se ha
llegado a comprender el software, en los casos que se lleguen a modelar se pueden
dejar plasmados manuales.
●​ Revisión: una vez que se han descrito la información básica, se especifican los
criterios de validación que han de servir para demostrar que se ha llegado a un buen
entendimiento de la forma de implementar con éxito el software. La documentación
del análisis de requerimientos y manuales, permitirán una revisión por parte del
cliente. La cual posiblemente traerá consigo modificaciones en las funciones del
sistema por lo que deberán revisarse el plan de desarrollo y las estimaciones
previstas inicialmente.

Funciones:

La función principal de un analista del software (o ingeniero de requisitos es llevar a cabo


las actividades necesarias para cumplir con las cinco áreas de esfuerzo descritas en la
sección anterior). Para lo cual se hace uso de las siguientes técnicas:
1.​ Entrevistas.
2.​ Talleres.
3.​ Observación.
4.​ Encuestas.
5.​ Revisión documental.
6.​ Uso de especificaciones formales para requerimientos (formatos estándar de
documentos, UML, etc.).

Requisitos:

●​ Requisitos del software: es la descripción de los servicios y restricciones de un


sistema de software, es decir, lo que el software debe hacer y bajo qué
circunstancias debe hacerlo.
●​ Ingeniería de requisitos del software: es el proceso de descubrir, analizar,
documentar y verificar los requisitos del software.
●​ Stakeholders: este término se utiliza para referirse a cualquier persona que tiene
influencia directa o indirecta sobre los requisitos del sistema. Entre los stakeholders
se encuentran los usuarios finales que interactúan con el sistema y todos aquellos
en la organización que se verán afectados por dicho sistema. Los stakeholders
también son los ingenieros que desarrollan o dan mantenimiento a otros sistemas
relacionados, los administradores del negocio, los expertos en el dominio del
sistema, los representantes de los trabajadores, etc.
●​ El proceso de la ingeniería de requisitos: la ingeniería de requisitos incluye dos
actividades principales: la obtención de requisitos, que da como resultado una
especificación del sistema que el cliente comprende. El análisis, da como resultado
un modelo de análisis que los desarrolladores pueden interpretar sin ambigüedad.
La obtención de requisitos se enfoca en la descripción del propósito del sistema y es
la que implica el reto mayor.
●​ Tipos de requisitos funcionales: describen las interacciones entre el sistema y su
ambiente, en forma independiente a su implementación. El ambiente incluye al
usuario y cualquier otro sistema externo con el cual interactúa el sistema.
●​ Requisitos no funcionales: describen atributos sólo del sistema o del ambiente del
sistema que no están relacionados directamente con los requisitos funcionales. Los
requisitos no funcionales incluyen restricciones cuantitativas, como el tiempo de
respuesta o precisión, tipo de plataforma (lenguajes de programación y/o sistemas
operativos, etc.).

1.11 Lenguajes para el desarrollo de software.

Un lenguaje de programación es un lenguaje formal diseñado para realizar procesos que


pueden ser llevados a cabo por máquinas como las computadoras. Pueden usarse para
crear programas que controlen el comportamiento físico y lógico de una máquina, para
expresar algoritmos con precisión o como modo de comunicación humana.

Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen su
estructura y el significado de sus elementos y expresiones. Se le llama programación
cuando se escribe, se prueba, se depura, se compila (de ser necesario) y se mantiene el
código fuente de un programa informático.
Clasificación:

●​ Lenguaje máquina: es el sistema de códigos interpretable directamente por un


circuito microprogramable, como el microprocesador de una computadora. Este
lenguaje se compone de un conjunto de instrucciones que determinan acciones que
serán realizadas por la máquina. Y un programa de computadora consiste en una
cadena de estas instrucciones de lenguaje de máquina (más los datos).
●​ Lenguaje de bajo nivel: un lenguaje de programación de bajo nivel es el que
proporciona poca o ninguna abstracción del microprocesador de una computadora.
Consecuentemente, su traslado al lenguaje máquina es fácil. El término
ensamblador se refiere a un tipo de programa informático encargado de traducir un
archivo fuente, escrito en un lenguaje ensamblador.
●​ Lenguaje de alto nivel: los lenguajes de programación de alto nivel se caracterizan
porque su estructura semántica es muy similar a la forma de como escriben los
humanos. Esto permite codificar los algoritmos de manera más natural, en lugar de
codificarlos en el lenguaje binario de las máquinas o a nivel de lenguaje
ensamblador.
●​ Lenguajes imperativos: emplean instrucciones como unidad de trabajo de los
programas.
●​ Lenguajes declarativos: los programas se construyen mediante descripciones de
funciones o expresiones lógicas.
●​ Lenguajes orientados a objetos: el diseño de los programas se basa más en los
datos y su estructura. La unidad de proceso es el objeto y en él se incluyen los datos
(variables) y operaciones que actúan sobre ellos.
●​ Lenguajes orientados al problema: están diseñados para problemas específicos,
principalmente de gestión; suelen ser generadores de aplicaciones.
●​ Lenguajes naturales: están desarrollándose nuevos lenguajes con el objetivo de
aproximar el diseño y construcción de programas al lenguaje de las personas.

Lenguajes:

●​ Java: las aplicaciones Java están típicamente compiladas en un bytecode, aunque la


compilación en código, aunque la compilación en código máquina nativo también es
posible. Reconocido por su legibilidad y simplicidad, Java es uno de los lenguajes de
programación más adoptados: más de 9 millones de desarrolladores lo usan y está
presente en 7 mil millones de dispositivos en todo el mundo.
●​ C++: Abarca dos paradigmas de la programación: la estructurada y la orientada a
objetos. Conocido por el nombre “C plus plus”, este lenguaje orientado a objetos
surge como una continuación y ampliación del C. Hay una gran cantidad de
programas escritos en C++, como por ejemplo los paquetes de Adobe.
●​ Fortran: Fue desarrollado en la década de 1950 y es empleado activamente desde
entonces. Acrónimo de fórmula translator, Fortran se utiliza principalmente en
aplicaciones científicas y análisis numéricos.
●​ PHP: es empleado frecuentemente para la creación de contenido para sitios web
con los cuales se pueden programar las páginas HTML y los códigos de fuente. PHP
es un acrónimo que significa Hypertext pre processor. Y se trata de un lenguaje
interpretado que se aprovecha para la creación de aplicaciones para servidores o
contenidos dinámicos de sitios web.
●​ Python: fue hecho por Guido Van Rossum en 1990. En la actualidad se desarrolla
como un proyecto de código abierto administrado por la Python Software
Foundation. La última versión estable del lenguaje es la 2.5.

Componentes:

●​ Tipos y estructuras de datos:las estructuras de datos son elementos de los lenguajes


de programación que permiten manipular de forma más eficiente variables diversas.
Como las numéricas o tipo texto y otras más complejas, como vectores, matrices y
apuntadores, etcétera.
●​ Instrucciones: son estructuras gramaticales predefinidas, muy parecidas al lenguaje
humano, para generar secuencias de acciones que conformen un programa. Van
desde los operadores aritméticos y lógicos básicos.
●​ Control de flujo: se refiere a la secuencia de acciones de un programa. En
ocasiones, dentro de la secuencia de instrucciones, hay puntos donde el programa
debe tomar decisiones con base en el valor de una variable o el cumplimiento de
una cierta condición.

Fases:

La compilación permite crear un programa de computadora que puede ser ejecutado por
esta y comprende tres pasos:

1.​ Creación de código.


2.​ Compilación del programa.
3.​ Enlace del programa con las funciones necesarias de la biblioteca.

1.12 Actividad 5.
1.13 Manejadores de bases de datos.

●​ Base de datos: el término base de datos surgió en 1963, en la informática una base
de datos consiste en una colección de datos interrelacionados y un conjunto de
programas para acceder a dichos datos. En otras palabras, una base de datos no es
más que un conjunto de información (un conjunto de datos) relacionada que se
encuentra agrupada o estructurada.
●​ Sistemas de administración de bases de datos: consiste en un conjunto de
programas utilizados para definir, administrar y procesar una base de datos y sus
aplicaciones. A los sistemas de administración de bases de datos también se les
llama Sistemas de Gestión de Bases de Datos (SGBD).Un sistema de
administración de bases de datos es una herramienta de propósito general que
permite crear bases de datos de cualquier tamaño y complejidad y con propósitos
específicos distintos. El administrador de una base de datos permite controlar los
datos, recuperarlos, ordenarlos, analizarlos, resumirlos y elaborar informes.
Surgimiento:

●​ Redundancia e inconsistencia de los datos: redundancia significa tener el mismo


dato guardado varias veces. Inconsistencia significa que hay contradicción en el
contenido de un mismo dato, es decir, que un mismo dato tiene un valor en una
parte de la memoria, mientras que en otra parte contiene otro valor diferente.
●​ Dificultad en el acceso a los datos: era difícil que el usuario encontrará rápidamente
un dato en especial.
●​ No existía el aislamiento de los datos: debido a que los datos estaban dispersos en
varios archivos y podían estar en diferentes formatos, era difícil escribir programas
nuevos de aplicación para recuperar los datos apropiados.
●​ Problemas de integridad: era complicado asegurarse que los valores almacenados
satisficieran ciertos tipos de restricciones, por ejemplo, que tuvieran un valor mínimo
y/o un valor máximo.
●​ Problemas de atomicidad: era muy difícil asegurar que una vez que haya ocurrido
alguna falla en el sistema y se haya detectado, los datos se restaurarán al estado de
consistencia que existía antes de la falla.
●​ Anomalías en el acceso concurrente: la cuestión de asegurar la consistencia de los
datos se complica todavía más cuando se trata de sistemas en los que hay varios
accediendo a un mismo archivo desde diferentes computadoras.
●​ Problemas de seguridad: no todos los usuarios de un sistema de información
deberían poder acceder a todos los datos. En un sistema de archivos es muy difícil
garantizar las restricciones de seguridad.

Características:

●​ Integración de toda la información de la organización: la base de datos se crea para


dar servicio a toda o a una parte importante de la organización y no para unos
usuarios particulares.
●​ Persistencia de los datos: los datos deben estar disponibles en todo momento, lo
que significa que la base de datos debe almacenarse en un dispositivo de memoria
secundaria.
●​ Accesibilidad simultánea para distintos usuarios: debido al carácter integrador que
tiene la base de datos, ésta tendrá que ser compartida por distintos grupos de
usuarios.
●​ Independencia de los programas respecto a la representación física de los datos: las
aplicaciones que se desarrollen para manipular los datos deben ser independientes
de la implementación elegida para las estructuras de la base de datos.
●​ Definición de vistas parciales de los datos para distintos usuarios: debido también al
carácter integrador de la base de datos, en esta se recogen los datos que interesan
a cada grupo de usuarios de la organización, con lo que se incrementa su tamaño y
complejidad.
●​ Mecanismos para controlar la integridad y la seguridad de los datos: Para que la
base de datos refleje fielmente la realidad de la cual es una representación, el SGBD
debe asegurar en todo momento la calidad de la información almacenada
(integridad). Evitando que esta se deteriore por un uso incorrecto (actualizaciones
que no son válidas, accesos concurrentes no controlados, etc.).
Usuarios:

●​ Usuarios normales: invocan e interactúan con algún programa de aplicación escrito


previamente, por ejemplo los cajeros de los bancos.
●​ Programadores de aplicaciones: son profesionales que escriben problemas de
aplicación. Los programadores de aplicaciones pueden elegir entre muchas
aplicaciones para desarrollar interfaces de usuario.
●​ Los usuarios sofisticados: interactúan con el sistema sin programas escritos. En su
lugar, ellos realizan sus consultas en un lenguaje de consulta de base de datos.
Cada una de estas consultas se envía al procesador de consultas, cuya función es
transformar instrucciones LMD (Lenguaje de Manipulación de Datos).

Estructura:

●​ Gestor de almacenamiento: Es importante porque las bases de datos requieren


normalmente una gran cantidad de espacio de almacenamiento. Las bases de datos
de las empresas tienen un tamaño de cientos de gigabytes y también del orden de
terabytes de datos.Su función principal es minimizar el movimiento entre el disco y la
memoria principal. Se divide en:
1.​ Gestor de autorización e integridad.
2.​ Gestor de archivos.
3.​ Gestor de memoria intermedia.
●​ Procesador de consultas: es importante porque ayuda al sistema de bases de datos
a simplificar y facilitar el acceso a los datos. Los componentes del procesador
incluyen:
1.​ El intérprete del lenguaje de Definición de datos (DDL): interpreta las
instrucciones de este lenguaje y registra las definiciones en el diccionario de
datos.
2.​ Compilador del Lenguaje de Manipulación de Datos (DML): traduce las
instrucciones de dicho lenguaje en uno de consultas a instrucciones de bajo
nivel que entiende el motor de evaluación de consultas.
3.​ Motor de evaluación de consultas: ejecuta las instrucciones de bajo nivel
generadas por el compilador de manipulación de datos (LMD).

1.14 Construcción del sistema.

La construcción del sistema es un proceso de crear un sistema ejecutable y completo al


compilar y vincular los componentes del sistema, librerías externas, archivos de
configuración, etc. Las herramientas de este y las de gestión diversiones deben
comunicarse, puesto que el proceso de construcción implica extraer versiones del
componente del repositorio administrado por el sistema de gestión de versiones. La
descripción de configuración que se usa para identificar una línea base utiliza también la
herramienta de construcción del sistema.

En la fase de construcción del sistema de información, se aplicarán las normas de


codificación que correspondan, se integrarán de forma continua los componentes
desarrollados y se utilizarán aquellas herramientas que proporcionen soporte a las tareas de
esta fase.
Construcción de software:

Se refiere a la creación de software productivo y significativo a través de los procesos de


codificación, verificación, pruebas unitarias, pruebas de integración y depuración de errores.
El área del conocimiento de la “construcción del software” está íntimamente relacionada a
las otras áreas del conocimiento del software como lo son: el diseño, las pruebas, la gestión
de configuraciones, la calidad y las herramientas y métodos.

Los límites entre el diseño y la construcción variarán dependiendo del proceso de ciclo de
vida del software utilizado en el proyecto. Aunque ciertas tareas de sueño pueden ser
desarrolladas antes del proceso de construcción, gran parte del trabajo de diseño es
realizado en sí, durante el proceso de construcción.

El Software que se construye deberá ser validado y verificado, en esta área suelen
emplearse pruebas de software, mostrando así como la salida de la construcción será la
entrada de las pruebas. Los ingenieros del software suelen realizar pruebas unitarias y
pruebas de integración, demostrando así la cercanía que existe entre el área de
conocimiento de la “construcción del software” y el área de las “pruebas del software”.

La construcción es un proceso complejo, donde suelen ocurrir errores ya que hay tres
diferentes plataformas de sistema que pueden estar implicadas. Los ingenieros del software
suelen realizar pruebas unitarias y pruebas de integración, demostrando así la cercanía que
existe entre el área de conocimiento de la “construcción del software” y el área de las
“pruebas del software”.

Modelos:

●​ Construcción según modelos de desarrollo: lo que es considerado como


“construcción” dependerá en cierto grado del modelo de software utilizado. Mientras
más lineal sea el enfoque más se tiende a enfatizar en las actividades que preceden
el proceso de construcción. Otros modelos son más iterativos y tienden a tratar el
proceso de construcción como una actividad que ocurre concurrentemente con otras
actividades del desarrollo del software.
●​ Planificación de la construcción: la elección del método de construcción afecta en
cierta forma como son realizados los prerrequisitos de la construcción, afecta la
habilidad del proyecto de disminuir la complejidad, anticipar el cambio y la
construcción en función de la verificación. Cada uno de estos objetivos puede
también ser considerados en el nivel del proceso, requerimientos o diseño; pero
también pueden ser influenciados por la elección del método de construcción. La
planificación de la construcción puede definir el orden en que los componentes del
software son creados e integrados.

Medición:

La construcción y ciertos artefactos deben ser medidos, incluyendo el código desarrollado,


el modificado, el destruido, la complejidad del código, las estadísticas del código, búsqueda
y eliminación de errores.Estas medidas pueden ser útiles para los propósitos de la gerencia
de la construcción, asegurando a calidad durante la construcción, mejorando también el
proceso de construcción.

●​ Diseños de la construcción: algunos proyectos suelen colocar más actividades de


diseño en la construcción, otros tienden a tener una fase exclusivamente de diseño.
Sin importar cuál es el carácter exacto, varios trabajos de diseño ocurrirán en la
construcción y ese trabajo de diseño se regirá por los límites impuestos por el
problema de la vida real que está buscando resolver el software.
●​ Lenguajes de construcción: son los que incluyen todas las formas de comunicación
por las cuales el ser humano puede implantar una solución ejecutable al
computador. Se pueden dividir en:
1.​ Lenguaje de configuración.
2.​ Toolkits.
3.​ Lenguajes de programación.

Pruebas:

Las pruebas de Software tienen 2 objetivos:


1.​ Demostrar al desarrollador y al cliente que el software alcanza sus requisitos. En el
caso de software hecho a la medida esto representa que debe existir al menos 1
prueba por cada requerimiento. Descubrir situaciones donde el comportamiento del
software es incorrecto, indeseable o no está ajustado a las especificaciones. Estas
son las consecuencias de defectos del software.Se lleva a cabo una prueba de
validación, donde se espera que el sistema funcione correctamente usando casos de
prueba específicos que reflejen el uso esperado del sistema.
2.​ El segundo objetivo lleva a la prueba de defectos, donde los casos de prueba son
diseñados para exponer potenciales errores, en los casos de prueba para detectar
defectos, pueden ser intencionalmente oscuros y no reflejar cómo es usado el
sistema normalmente.

1.15 Actividad 6.
1.16 Actividad final.

2. - Lógica de programación.
2.1 Introducción a la programación.

Las primeras computadoras se programaban en realidad cableando en cada ocasión que se


requiriera un nuevo programa. Esto prácticamente equivalía a reconstruir todo en las
computadoras cuando se requería un nuevo programa.

La tarea era simplificada gracias a un panel de contactos (muy similar al de los primeros
conmutadores telefónicos que eran atendidos por operadoras) con el que era posible
enlazar circuitos para crear secciones dedicadas a una actividad específica. Esto vino a
cambiar con el concepto del programa almacenado, un concepto teórico muy importante
que fue establecido por el matemático John Von Neumann el 30 de junio de 1945.
Él proponía que tanto el programa como sus datos fueran almacenados en la memoria de la
computadora. Esto simplificaba la labor de programación al no tener que llevar a cabo el
recableado, también libraba y generalizaba el diseño del hardware para hacerlo
independiente de cualquier problema y enfocado al control y ejecución del programa.

Funcionamiento básico:

●​ ¿Cuál es el funcionamiento básico de una computadora?


El funcionamiento básico de una computadora es muy simple:
1.​ Recibe los datos del usuario a través de las unidades de entrada.
2.​ Procesa los datos con la CPU.
3.​ Presenta el resultado mediante las unidades de salida.
Es importante considerar que la CPU no recibe los datos de manera directa de la
unidad de entrada ni los envía directamente a la unidad de salida. Existe una zona
de almacenamiento temporal llamada memoria RAM, que sirve como lugar de paso
obligatorio para acceder a ella.

●​ Dentro de la CPU, el funcionamiento es el siguiente:


Una vez almacenado el programa a ejecutar y los datos necesarios en la memoria
principal, la Unidad de Control va decodificando (analizando) instrucciones. Al
decodificar una instrucción detecta las unidades (ALU, dispositivos de entrada,
salida o memoria) implicadas y envía señales de control a las mismas con las cuales
les indica la acción a realizar y la dirección de los datos implicados. Las unidades
implicadas a su vez, cuando se termine de operar sobre los datos, enviarán señales
a la UC indicando que la acción se ha realizado o bien el problema que ha
imposibilitado que lo haga.

CPU.

●​ Unidad Central de Procesamiento: en el CPU es donde ocurre el procesamiento de


datos, consiste de dos componentes básicos. unidad de control y unidad de
aritmética y lógica.
●​ ALU: es la unidad de aritmética lógica donde ocurre el procesamiento real de los
datos. Se realizan todos los cálculos todas las comparaciones y genera los
resultados en las operaciones que la ALU que puede efectuar son:
1.​ Suma.
2.​ Resta.
3.​ Multiplicación.
4.​ División.
5.​ Manipulación de bits de los registros.
6.​ Comparación del contenido de dos registros.
●​ CU: Es la unidad de control que coordina y controla las demás partes de la
computadora. Lee un programa almacenado, una instrucción a la vez y dirige a los
demás componentes para realizar las tareas requeridas por el programa.
●​ Registros: es una colección de celdas de memoria cada una de las cuales puede
almacenar un 1 o un 0. El número de células corresponde al número de bits que se
pueden almacenar en el registro. Así hay registros de 4, 16 y 32 bits.
●​ Memoria: guarda temporalmente los datos y las instrucciones del programa durante
el procesamiento, está compuesta por multitud de elementos, cada uno con una
dirección única. El parámetro más importante en una memoria es su velocidad de
acceso, que mide el tiempo transcurrido desde que la CPU pide el contenido de una
celda hasta que esta puede ser leída.

Programación.

●​ El primer programa fue el programa fuente: es aquel que está escrito en un lenguaje
similar al nuestro (pero inaccesible para la computadora), mientras que el programa
objeto ya está traducido al código que la máquina reconoce. Es necesario considerar
lo siguiente: suponer a la memoria de la computadora como una especie de almacén
electrónico que funciona en forma autónoma del procesador. Las instrucciones se
almacenan en la memoria; mediante el uso de números. Para codificarlas se debe
considerar cuántas y cuáles instrucciones habrá disponibles, así como el esquema
de codificación por emplear.

●​ Diccionario electrónico de datos:

A continuación, se propone un diccionario electrónico el cual contiene un código


adecuado para que cada instrucción definida corresponde un y solo un valor
numérico.

●​ Solución:
Dispositivos:

Los medios físicos más usuales de almacenamiento son magnéticos y ópticos.


●​ Dispositivos de almacenamiento magnéticos:
1.​ Discos duros.
2.​ Discos flexibles,
3.​ Cintas magnéticas.
●​ Dispositivos de almacenamiento óptico:
1.​ CD-ROM.
2.​ CD-RW.
3.​ DVD.
●​ Dispositivos de almacenamiento electrónico:
1.​ Memoria Flash USB.
2.​ CD-RW.

Tanto las memorias como las unidades de almacenamiento, utilizan unidades para ser
medidas como son el bit, byte, megabyte, gigabyte, terabyte y kilobyte.

2.2 ¿Qué necesito para programar?

Los fundamentos de programación son la base para empezar a programar, antes incluso de
elegir un lenguaje. Se facilita el aprendizaje a todos aquellos que quieren aprender a
programar y no saben por dónde empezar o aquellos programadores autoformados que
carecen de fundamentos de algoritmia.

No podemos desarrollar un programa simplemente en base a ideas, intuiciones, nociones.


Necesitaremos métodos y esquemas claros que raramente estarán en nuestra cabeza.
Necesitarán de un trabajo de desarrollo.

El buen programador ha de tener claros cuáles son los pasos a ir dando para desarrollar
una construcción sólida. La precipitación, la falta de reflexión o las prisas por terminar son
malas consejeras.

Programador.

Cada programador tiene sus propios esquemas de trabajo, pero en líneas generales
podemos distinguir las siguientes fases en el desarrollo de un programa:

●​ Conocer el problema a resolver: como primer paso a la hora de desarrollar un


programa tenemos que “conocer el problema a resolver”. Necesitaremos un
conocimiento profundo de todos los aspectos relacionados con el problema
(objetivos, condiciones, métodos, datos, resultados a obtener).
●​ Sobre el objetivo: a la hora de plantear un objetivo trataremos de subdividir la
extensión y complejidad del problema hasta niveles abarcables por una persona.
Aunque será la experiencia la que mejor nos guíe. A la hora de plantear objetivos
podemos usar esta regla: “Sólo trataremos de programar aquello que mentalmente
somos capaces de abarcar en método, extensión y condicionantes”.
Lenguajes:

●​ ¿Qué lenguaje utilizamos para comunicarnos?


En general, no podemos comunicarnos directamente con el grupo de sabios si no es
a través de un intérprete (programa con el lenguaje de programación). Supongamos
que queremos calcular usando el ordenador el valor de siete al cubo (73) y tenemos
que transmitirlo al procesador de nuestro ordenador que almacena los números y
operaciones matemáticas básicas en una calculadora interna como esta:

Cada número u operación tiene un localizador matricial. El cálculo que pretendemos


realizar se podría ordenar de distintas maneras.

●​ Los lenguajes de programación: se define como un conjunto de caracteres y reglas


que permiten crear un programa, para introducir y tratar la información en un
ordenador. Son lenguajes artificiales creados con el objetivo de conseguir la
comunicación entre el humano y la máquina o entre máquinas. Los lenguajes de
programación se pueden clasificar atendiendo a diversos criterios. Al incumplir la
premisa de plantear algo que mentalmente seamos capaces de abarcar. Lo
planteado posiblemente se puede programar pero al nivel en que nos encontramos
(somos programadores individuales y no expertos) el objetivo resulta inalcanzable.

Herramientas.

●​ Clasificación según el nivel de abstracción:


De todos ellos, el criterio que ayuda a una mejor comprensión de lo que en realidad
son los lenguajes de programación para que se utilizan, es el nivel de abstracción.
Es el lenguaje de programación que entiende directamente la computadora o
máquina. Utiliza el sistema binario, es decir, únicamente utiliza dos dígitos, el 0 y el
1. Con estos dos únicos dígitos, conocidos como bits, forma las cadenas binarias
(combinaciones de ceros y unos) con las que el CPU de una máquina procesa la
información.

●​ Herramientas para programar.


Algunos ejemplos son:
1.​ GitHub:
Es la plataforma de desarrollo de software en el mundo. Es un servicio de
alojamiento, un repositorio basado en la web. En palabras simples, es como
un Google Drive para proyectos de software, donde encontrarás repositorios
de código de una enorme cantidad de proyectos. Es un excelente lugar para
el desarrollo colaborativo, donde los desarrolladores pueden descubrir,
compartir y crear un mejor software.
2.​ Atom:
Como desarrollador de software, escribirá código por lo que necesitará un
editor de texto. Es un editor de texto creado por GitHub, un código fuente
abierto lleno de integraciones para hacer tu vida, escribir código mucho más
fácil.
●​ Pasos para iniciar la programación:
1.​ Determinaciones estadísticas:
Suele cumplirse a partir de una serie de datos, siendo necesarios unos
cálculos y obtener unos resultados.
2.​ Optimización de funciones:
No se trata simplemente de aplicar unas fórmulas, se trata de aplicar un
método y si el método es programable el problema de optimización puede
presentar distintas variantes.
3.​ Formulas complejas:
La complejidad de una fórmula de cálculo puede hacer aconsejable que los
cálculos se realicen a través de un pequeño programa para evitar errores.
4.​ Ecuaciones encadenadas:
A veces, sin ser excesiva la complejidad de las fórmulas a aplicar, su
encadenamiento hace engorroso el cálculo manual. La existencia de
condicionantes, parámetros afectados de ciertas variantes, hacen que un
programa sea una buena opción para hacer este tipo de cálculos.
5.​ Iteraciones:
Ya hemos tratado algo de esto en el apartado de optimización. En ciertos
casos, la incógnita no se despeja dentro de una fórmula por encontrarse
implícita y buscamos el resultado a través de iteraciones.
6.​ Ordenación de datos y series de datos:
Tanto las letras como las palabras, números, series de números o matrices
pueden ser ordenados en base a unos criterios.

2.3 Actividad 1.
2.4 Tipos de datos y variables.

Se denomina dato a cualquier objeto manipulable por el ordenador. Un dato puede ser un
carácter leído de un teclado, información almacenada en un disco, un número que se
encuentra en la memoria central, etc.
Los distintos tipos de datos se representan en diferentes formas en el ordenador: por
ejemplo, no se almacena internamente de la misma manera un número entero que un
carácter. Aunque los lenguajes de alto nivel permiten en alguna medida ignorar la
representación interna de los datos, es preciso conocer algunos conceptos mínimos.

A nivel máquina todos los datos se representan utilizando una secuencia finita de bits. De
este hecho ya se deduce que no todos los datos son representables en un ordenador. La
definición de un tipo de dato incluye la definición del conjunto de valores permitidos y las
operaciones que se pueden llevar a cabo sobre estos valores.

Tipos de datos:

Cuando se utiliza un dato en un programa es preciso que esté determinado su tipo para que
el traductor sepa cómo debe tratarlo y almacenarlo. Dependiendo del lenguaje puede o no
ser preciso declarar expresamente en el programa el tipo de cada dato. No todos los tipos
de datos existen en todos los lenguajes de programación.

Hay lenguajes más ricos que otros en este sentido. Los tipos de datos básicos más usuales
son:

1.​ Enteros: números pertenecientes a un subconjunto finito de los números enteros.


Ejemplo 5.22-1.
2.​ Reales: números pertenecientes a un subconjunto finito de los números reales
(constan de una parte entera y una parte decimal). Ejemplo: 0.09 -31.423 3.0
3.​ Lógicos: los dos valores lógicos, VERDADERO (true) o FALSO (false). Caracteres:
un conjunto finito de caracteres reconocidos por un ordenador.

Estructuras:

Los tipos de datos vistos en la sección anterior se suelen denominar elementales. Una
estructura de datos o tipo de datos estructurado es un tipo de dato construido a partir de
otros tipos de datos. Como ejemplo se tienen los siguientes:

1.​ Complejos: son datos formados por un par de datos reales y sirven para tratar
números complejos.
2.​ Cadenas de caracteres: (también llamadas string) son una sucesión de caracteres
delimitados por una comilla (apóstrofo) o dobles comillas, según el tipo de lenguajes
de programación.
3.​ Matrices: son conjuntos de datos numéricos organizados para formar una matriz o
un vector.
4.​ Operaciones aritméticas: las operaciones aritméticas habituales se representan
normalmente con los siguientes símbolos:
●​ Exponenciación
●​ Suma +
●​ Resta -
●​ Multiplicación *
●​ División /
Variables:

Las variables se declaran con el fin de almacenar valores que son alterados durante la
ejecución del programa y se puede pensar en ellas como posiciones de memoria donde se
guardan datos de un tipo específico y que tiene asociadas un identificador. Una variable es
un valor de cualquier tipo que puede estar cambiando a lo largo del programa. Si queremos
hacer un programa del inventario que hay en una empresa, podríamos declarar variables
con un x número de computadoras, x número de teclados, x número de pantallas, etc.

Una variable siempre tuvo que haber sido declarada antes para poder utilizarse. Para crear
las variables y asignarles valores se hace de la siguiente forma:

<tipo_de_variable>​
<nombre_variable> = <valor>

●​ Tipos de variables:
Existen diferentes tipos: cualitativa nominal, cualitativa ordinal, cuantitativa continua,
cuantitativa discreta. Una variable es una característica que puede fluctuar, es
susceptible de adoptar diferentes valores, los cuales pueden medirse u observarse.
Adquieren valor cuando se relacionan con otras, es decir, si forman parte de una
hipótesis o de una teoría.

Inicialización:

¿Dónde son declaradas las variables?

Se puede hacer una separación de los tipos de variables atendiendo al lugar donde son
declaradas: dentro de una función y fuera de cualquier función. El lugar delimita el ámbito
de la variable; así una variable declarada fuera de cualquier función es una variable global
que puede ser utilizada dentro cualquier función del programa y una variable declarada
dentro de una función será una variable local que sólo podrá ser utilizada dentro de dicha
función.

●​ Inicialización de variables:
A una variable se le puede asignar un valor inicial al tiempo que es declarada, de la
siguiente forma:
Tipo_Nombre_Variable1, Nombre_Variable2=valor. Nombre_Variable, N.

La utilización de variables es vital a la hora de programar. Todo lo necesario sobre


variables, la sintaxis que se utiliza para declarar y mostrar estos datos y los tipos de
datos. Para que un programa pueda hacer uso de una o más variables, estas deben
ser declaradas previamente, indicando de cada una de ellas;
1.​ El tipo de dato que puede almacenar (mediante un identificador).
2.​ Su nombre (mediante otro identificador).
2.5 ¿Variables y constantes?

Una variable es un elemento de datos cuyo valor puede cambiar durante el curso de la
ejecución de un programa. Un valor nombre de variable debe seguir el convenio de
denominación de un identificador (carácter alfabético o número y el signo de subrayado).
Cuando se define más de una variable en una sola declaración, el nombre debe ir separado
por comas. Cada declaración de variable debe finalizar con un signo de punto y coma. Los
nombres de variables no pueden coincidir con una palabra reservada. Una constante es un
elemento de datos con nombre con un valor predefinido, mientras que una variable es un
elemento de datos con nombre cuyo valor puede cambiar durante el curso de la ejecución
de un programa.

Las variables pueden ser globales o locales.

Constantes: valor que no cambia.


Variable: se puede usar para presentar varios valores.

Variables:

Elementos de almacenamiento de datos o direcciones de memoria, que pueden varias en el


desarrollo o proceso del programa. Tanto las variables como las constantes las utilizamos a
la hora de programar para almacenar en ellas unos datos determinados y poder nombrarlas
en cualquier parte de nuestro código-programa para que devuelvan esos datos
anteriormente introducidos,

●​ Tenemos otros dos tipos básicos de variables, que no son para datos numéricos:
1.​ Char: será una letra del alfabeto o un dígito numérico o un símbolo de
puntuación. Ocupa 2 bytes. Sigue un estándar llamado Unicode.
2.​ Boolean: se usa para evaluar condiciones, y puede tener el valor “verdadero”
(true) o “falso” (false). Ocupa 1 byte. Cuando una variable se declara, el
compilador le reserva espacio en la memoria, pero no modifica la información
que había en dicho espacio. Las variables pueden ser inicializadas a un valor
concreto cuando son declaradas. Para ello, en la declaración se añade el
signo de igual más una constante.

Constantes:

Una constante es un elemento de datos con nombre con un valor predefinido. No se puede
cambiar el valor asignado a una constante predefinida. Las constantes predefinidas son:

●​ NULL: una referencia vacía. Parecido a un puntero vacío. Tenga en cuenta que no
es lo mismo que una cadena de caracteres nula.
●​ TRUE: equivalente al número 1.
●​ FALSE: equivalente al número 0.
Es una combinación de constantes, variables y operadores matemáticos.
1.​ Al igual que las variables, las constantes guardan datos, pero su valor no varía.
2.​ Existen tantos tipos de constantes como tipos de datos. Podemos expresar una
constante según el tipo de dato.
3.​ Las constantes pueden aparecer con su valor directamente o mediante un
identificador.
●​ Constantes simbólicas:
1.​ Constantes a las cuales se les asocia un nombre o identificador.
2.​ Se declaran como: #define nombre_constante valor.

Tipos:

En programación, una constante es un valor que no puede ser alterado/modificado durante


la ejecución de un programa,únicamente puede ser leído. Una constante fija de un área
reservada en la memoria principal del ordenador, donde el programa almacena valores fijos.

En C las constantes se declaran con la directiva #define, esto significa que esa constante
tendrá el mismo valor a lo largo de todo el programa. El identificador de una constante así
definida será una cadena de caracteres que deberá cumplir los mismos requisitos que el de
una variable (sin espacios en blanco, no empezar por un dígito numérico, etc.).

Una constante es como una variable, pero tiene una diferencia, su información almacenada
en memoria, la constante no puede cambiar su contenido una vez definido. Esto quiere
decir que una vez que hayamos asignado un valor a una constante, esta no podrá variar.

Programación:

En programación, una constante es un valor que no puede ser alterado/modificado durante


la ejecución de un programa, únicamente puede ser leído. Una constante corresponde a
una longitud fija de una área reservada en la memoria principal del ordenador, donde el
programa almacena valores fijos. El hecho de que sean constantes permite conocer su valor
independientemente de la situación.

Lo mismo sucede en informática, donde el ordenador siempre conocerá cual es el valor de


las constantes, establecido de antemano en el código del programa y guardando en una
zona de este de donde puede leerlo en cualquier momento. También existen constantes
cuyo valor es desconocido inicialmente, pero una vez hallado, se comportan como tales.

En estos casos, los programas lo que indican en su código es el modo de hallar esas
constantes y no su valor. Una vez hallado, será almacenado junto con el resto, en la misma
dirección de memoria.

2.7 Reforzando variables y constantes.

Una variable es un objeto nombrado capaz de contener un dato que puede ser modificado
durante la ejecución de un programa. En C, las variables tienen tipo, que significa que es
necesario especificar el tipo de dato que se le asigna a una variable.

Las variables se almacenan en la memoria RAM y el espacio de memoria que ocupan (en
bytes) depende de su tipo. Una constante tiene las misma características que una variable
excepto el hecho de que su valor asignado no puede ser cambiado durante la ejecución del
programa.
A diferencia de las variables, las constantes se almacenan en la memoria flash del
microcontrolador para guardar el mayor espacio posible de memoria RAM. El compilador las
reconoce por el nombre y el prefijo const. En mikroC, el compilador reconoce
automáticamente el tipo de dato de una constante, así que no es necesario especificar el
tipo adicionalmente. Cada variable o constante debe tener un identificador que lo distingue
de otras variables y constantes.

Variables:

Una variable es el nombre que se le da a una posición de la memoria de la computadora, en


el cual se almacena información. Conociendo esta posición de memoria (su dirección),
somos capaces de encontrar, actualizar o recuperar información cuando la necesitamos
durante el programa.

A través de las variables se pueden asignar nombres significativos a las posiciones donde
se almacena la información y se puede hacer referencia a ellos de una forma más sencilla.
La naturaleza de dicha información puede ser de muy distintos tipos: números enteros,
números decimales, caracteres. El objeto puede ser de alguno de los tipos vistos (número o
cadena de texto) o alguno de los otros tipos existentes en Python.

Cada variable debe tener un nombre único llamado identificador. Eso es muy de ayuda
pensar las variables como contenedores que contienen data el cual puede ser cambiado
después a través de técnicas de programación.

Declaración:

●​ Declaración de variables:

En los lenguajes de programación, al definir una variable, es habitual expresar la naturaleza


del tipo de información que se va a guardar. Además, durante todo el programa, cualquier
valor asignado a esa variable se espera que sea del tipo de datos utilizado en su definición,
provocando un error cuando se intenta asignar un tipo de dato diferente.

Además, durante todo el programa, cualquier valor asignado a esa variable se espera que
sea del tipo de datos utilizados en su definición, provocando un error cuando se intenta
asignar un tipo de dato diferente.

Las variables se crean en el instante en que son utilizadas por primera vez; su inicialización,
se utiliza el operador de asignación (=); a partir de ese instante, podremos recuperar su
contenido simplemente reverenciando la variable por su nombre.

Por otra parte, las variables tienen asociada la naturaleza del tipo de información que
almacenan. De hecho, una variable podrá almacenar durante todo su tiempo de vida
diferentes tipos de informaciones.
Constantes:

Una constante es un identificador para expresar un valor simple, una constante es un


identificador para expresar un valor simple, una constante es sensible al uso de
mayúsculas. Por convención, los identificadores de constantes suelen declararse en
mayúsculas. El nombre de una constante sigue las mismas reglas que cualquier etiqueta en
PHP. Un nombre de constante válido empieza con una letra o un carácter de subrayado,
seguido por cualquier número de letras, números o subrayados.

Es un tipo de variable la cual no puede ser cambiada. Eso es muy de ayuda pensar las
constantes como contenedores que contienen información el cual no puede ser cambiado
después.

●​ Constantes predefinidas:
PHP ofrece un largo número de constantes predefinidas a cualquier script en
ejecución. Muchas de estas constantes, son creadas por diferentes extensiones y
sólo estarán presentes si dichas extensiones están disponibles, bien por carga
dinámica o porque han sido compiladas.
●​ Ejemplo uso de constantes:

●​ Reglas:
Algunas reglas y convenciones de nombres para las variables y constantes:
1.​ Nunca usar símbolos especiales: @, #, $, %, etc.
2.​ El primer carácter no puede ser un número o dígito.
3.​ Las constantes son colocadas dentro de módulos Python y significa que no
puede ser cambiado.
4.​ Los nombres de constante y variable debería tener la combinación de letras
minúsculas (de “a” a la “z”) o MAYÚSCULAS (de la “A” a la “Z”) o dígitos (del
0 al 9) o un underscore (_).
Ámbitos:

Ámbito de variables y constantes.


El ámbito de una variable o una constante es el rango de programa en el que su
identificador tiene significado, ya que el ámbito es determinado por el lugar en el que se
declara una variable o una constante. Intentar acceder a una variable o una constante fuera
de su ámbito resulta en un error, ya que son invisibles fuera de su ámbito.
Las variables y constantes pueden ser globales o locales. Una variable global se declara en
el código fuente, fuera de todas las funciones, mientras que una variable local se declara
dentro del cuerpo de la función o dentro de un bloque anidado en un función.

A las variables globales se les puede acceder de cualquier parte en el código, aún dentro de
las funciones con tal de que sean declaradas. El ámbito de una variable global está limitado
por el fin del archivo fuente en el que ha sido declarado.

2.8 Jerarquía de operaciones.

Para llevar a cabo una cadena de operaciones, sin que haya lugar a confusiones a la hora
de efectuar las operaciones y para que no se tengan resultados distintos, se ha establecido
una convención general sobre el orden en que deben hacerse, la cual se llama jerarquía de
las operaciones, que a continuación se describe:

●​ Jerarquía:
1.​ Primero se llevan a cabo las potencias y radicales.
2.​ Luego, multiplicaciones y divisiones.
3.​ Finalmente, se realizan sumas y restas.

Cuando hay dos o más operaciones de la misma jerarquía, una seguida de la


otra, las operaciones se realizan de izquierda a derecha. Una vez hallado el
resultado de una operación se debe colocar en el orden que les corresponde
con respecto a las demás. Todos los pasos intermedios tienen que estar
separados por el signo = hasta llegar al resultado final.
Signos:

Signos de agrupación:
●​ Los signos de agrupación, son elementos que definen el orden en el que se realizará
cualquier operación matemática, se utilizan para separar expresiones, siendo
necesario eliminarlos para poder resolver o simplificar la expresión. Los signos de
agrupación más usados son los siguientes:
1.​ Paréntesis ( )
2.​ Corchetes [ ]
3.​ Llaves { }
4.​ Barras (absoluto) | |

La convención de uso de los signos de agrupación indica que, de adentro hacia


afuera de una expresión algebraica o numérica, se utilizan primero los paréntesis,
luego los corchetes y al final las llaves.
Las barras se usan solo para indicar cuando algún número o expresión será usado
solo con su valor absoluto (sin el signo negativo, si lo tuviera).
En matemáticas, los signos de agrupación de las operaciones son los paréntesis: ( ).
En una cadena de operaciones, primero se realizan las operaciones dentro de los
signos de agrupación y posteriormente se sigue aplicando la jerarquía de las
operaciones.
Reglas:

Reglas de los signos de agrupación:


Es necesario, entonces, tener en cuenta lo siguiente:
●​ Es necesario identificar los niveles jerárquicos que hay y comenzar por el interno,
después el que sigue y así sucesivamente hasta llegar al externo.
●​ Es importante no modificar ni hacer ninguna operación con números de otro nivel
que no sea el que se está trabajando.
●​ Antes de quitar el signo de agrupación del nivel en que esté trabajando se deben
efectuar las operaciones aritméticas que haya en su interior.
●​ Si delante del signo de agrupación hay un signo + se elimina sin hacer ningún
cambio de signo a la expresión que está dentro.
●​ Si delante del signo de agrupación hay un signo - se eliminan el signo y se cambia el
signo del término que estaban en su interior. Al hacer esto, el signo - que estaba
delante del paréntesis, se elimina.
●​ Si en una operación algebraica hay un grupo de paréntesis sin un signo entre ellos,
como (2)(3), es equivalente a una multiplicación, esto es, 2 x 3. de igual manera si
existe un número antes del signo de agrupación y no existe un + o - entre ellos
entonces ese número multiplica al paréntesis.
●​ Si en una operación algebraica hay paréntesis con un signo de división entre ellos,
como (2)/(3), es equivalente a una división, estos 2 / 3.
●​ Ejemplo:

Binario:

Las operaciones que siempre realizamos son binarias, es decir, solo podremos sumar dos
números al mismo tiempo. Si queremos sumar más de dos, tenemos que sumar primero
dos de ellos y al resultado sumarle el siguiente número. El problema anterior, en el que pide
la maestra tres formas diferentes de sumar 3, 5 y 8, sirve de ejemplo:
Fíjate que, en la suma, sin importar qué sumandos agrupes para sumarlos primero, siempre
tendrás el mismo resultado. A esta propiedad se le llama asociativa de la adición, porque
indica cómo asociar los números para poderlos sumar correctamente y que el resultado no
se altere. Para una situación como esta, existen reglas que indican la jerarquía de las
operaciones y son las siguientes:

Paréntesis:

Operaciones con paréntesis.

Pueden presentarse casos donde las expresiones ya tiene los paréntesis ( ) que indican el
orden en el que se desea realizar las operaciones u otros tipos de símbolos de
agrupamiento o asociatividad, como corchetes [ ] y llaves { }. En estos casos es necesario
conocer las reglas para aplicarlas correctamente.

Si existe sólo un tipo de símbolos que denotan la asociatividad, primero se efectúan las
operaciones dentro de esos símbolos, siguiendo las reglas ya explicadas (primero
multiplicación y división y luego sumas y restas). Después se llevan a cabo las operaciones
señaladas.

Ejemplo:

Simplifica: 4+8 (3+6*2)

Si existen varios símbolos de asociatividad, uno dentro de otro, primero se realizan las
operaciones de los símbolos interiores y luego las de los exteriores.

2.9 Actividad 3:
2.10 Diagrama de Flujo
Un diagrama de flujo representa la esquematización gráfica de un algoritmo, el cual muestra
gráficamente los pasos o procesos a seguir para alcanzar la solución de un problema. Su
correcta construcción es sumamente importante porque, a partir del mismo se escribe un
programa en algún lenguaje de programación. Si el diagrama de flujo está completo y
correcto, el paso del mismo a un lenguaje de programación es relativamente simple y
directo.
Es importante resaltar que el diagrama de flujo muestra el sistema como una red de
procesos funcionales conectados de procesos funcionales conectados entre sí por
“Tuberías” y “Depósitos” de datos que permite describir el movimiento de los datos a través
del sistema.

Es un esquema para representar gráficamente un algoritmo. Se basan en la utilización de


diversos símbolos para representar operaciones específicas, es decir, es la representación
gráfica de las distintas operaciones que se tienen que realizar para resolver un problema,
con indicación expresa el orden lógico en que deben realizarse.

Diagrama:

Se les llama diagramas de flujo porque los símbolos utilizados se conectan por medio de
flechas para indicar la secuencia de operación. Para hacer comprensibles los diagramas a
todas las personas, los símbolos se someten a una normalización; es decir, se hicieron
símbolos casi universales, ya que, en un principio cada usuario podría tener sus propios
símbolos para representar sus procesos en forma de diagrama de flujo.

Esto trajo como consecuencia que sólo aquel que conocía sus símbolos, los podía
interpretar. La simbología utilizada para la elaboración de diagramas de flujo es variable y
debe ajustarse a un patrón definido previamente. El diagrama de flujo representa la forma
más tradicional y duradera para especificar los detalles algorítmicos de un proceso. Se
utiliza principalmente en programación, economía y procesos industriales.

Son importantes porque nos facilita la manera de representar visualmente el flujo de datos
por medio de un sistema de tratamiento de información, en este realizamos un análisis de
los procesos o procedimientos de requerirse para realizar un programa o un objeto.

Símbolos:

●​ Simbología de un diagrama de flujo:


Los principales símbolos convencionales que se emplean en los diagramas de flujo
son los siguientes:
●​ Ejemplo de diagrama de flujo:
Diagrama de flujo de la compra de unos zapatos:

Flujo:

Diagramas de flujo para algoritmos:


Como una representación visual del flujo de datos, los diagramas de flujo son útiles para
escribir un programa o algoritmo y explicárselo a otros o colaborar con otros en el mismo.
Puedes usar un diagrama de flujo para explicar detalladamente la lógica detrás de un
programa antes de empezar a codificar el proceso automatizado. Puede ayudar a organizar
una perspectiva general y ofrecer una guía cuando llega el momento de codificar.

Más específicamente, los diagramas de flujo pueden:


●​ Demostrar cómo el código está organizado.
●​ Visualizar la ejecución de un código dentro de un programa.
●​ Mostrar la estructura de un sitio web o aplicación.
●​ Comprender cómo los usuarios navegan por un sitio web o programa.
A menudo, los programadores pueden escribir un pseudocódigo, una combinación de
lenguaje natural y lenguaje informático que puede ser leído por personas.

Tipos:

Diagramas de flujo de documentos:


Estos “tienen el propósito de mostrar los controles existentes en el flujo de documentos a
través de los componentes de un sistema. El diagrama se lee de izquierda a derecha y
detalla el flujo de documentos a través de numerosas unidades de negocio”.

Diagrama de flujo de datos:


Estos indican “los controles que rigen los flujos de datos en un sistema. Los diagramas de
flujo de datos se usan principalmente para mostrar los canales donde se transmiten los
datos a través del sistema en lugar de cómo se controla el flujo”.
Diagramas de flujo de sistemas:
Estos “indican el flujo de datos que pasa hacia los componentes principales de un sistema,
o a través de ellos, tales como entrada de datos, programas, medios de almacenamiento,
procesadores y redes de comunicación”.

Diagramas de flujo de programas:


Estos muestran “los controles ubicados internamente en un programa dentro de un
sistema”.

2.11 Estructura condicional e iterativa.

Las estructuras condicionales comparan una variable contra otro valor, para que en base al
resultado de esta comparación, se siga un curso de acción dentro del programa. Cabe
mencionar que la comparación se puede hacer contra otra variable o contra una constante,
según se necesite. Existen tres tipos básicos, las simples, las dobles y las múltiples. Al
describir la resolución de un problema, es normal que tengamos que tener en cuenta
condiciones que influyen sobre la secuencia de pasos que hay que dar para resolver el
problema:

Según se cumplan o no determinadas condiciones, la secuencia de pasos involucrada en la


realización de una tarea será diferente. Las estructuras de control condicionales o selectivas
nos permiten decidir qué ejecutar y qué no en un programa.

Tipos de estructuras:

●​ Simple:
Las estructuras condicionales simples se les conoce como tomas de decisión tienen
la siguiente forma:
a.​ Pseudocódigo:
Si <condición> entonces​
Instrucción (es)
Fin-Si.
b.​ Diagrama de flujo:

●​ Dobles:
Las estructuras condicionales dobles permiten elegir entre dos opciones o
alternativas posibles en función del cumplimiento o no de una determinada
condición. Se representa de la siguiente forma:
a.​ Pseudocódigo:​
Si <condicion> entonces​
​ Instrucción (es)
Sí no ​
​ Instrucción (es)
Fin-Si.
●​ Múltiples:
Las estructuras de comparación múltiples, son tomas de decisión especializadas que
permiten comparar una variable contra distintos posibles resultados, ejecutando para
cada caso una serie de instrucciones específicas. La forma común es la siguiente:
a.​ Pseudocódigo:
Si <condición> entonces
​ Instrucción(es)
Sí no​
​ Si <condición> entonces
​ ​ Instrucción (es)
​ Sí no
​ ​ Varias condiciones.
b.​ Diagrama de flujo:

Este tipo de estructuras, son las que nos permiten ejecutar varias veces un conjunto
determinado de instrucciones, a esta repetición se le conoce con el nombre de ciclos.

Estructura condicional:

Son parte fundamental de cualquier lenguaje. Sin ellas, las instrucciones de un programa
sólo podrían ejecutarse en el orden en que están escritas (orden secuencial). Las
estructuras de control permiten modificar este orden. Hay dos categorías de estructuras de
control:
●​ Condicionales o bifurcaciones: permiten que se ejecuten conjuntos distintos de
instrucciones, en función de que se verifique o no determinada condición.
●​ Bucles o repeticiones: permiten que se ejecute repetidamente un conjunto de
instrucciones, bien un número predeterminado de veces, o bien hasta que se
verifique una determinada condición.
En términos de un lenguaje de programación, que se verifique o no una condición se
traduce en que una (adecuada) expresión lógica tome el valor verdadero (TRUE) o tome el
valor falso (FALSE).

En los casos más sencillos y habituales la condición suele ser una comparación entre dos
datos, como por ejemplo: si a < b hacer una cosa y en caso contrario, hacer otra distinta.

Iterativas:

Son operaciones que se deben ejecutar un número repetido de veces. El conjunto de


instrucciones que se ejecuta repetidamente cierto número de veces, se llama Ciclo, Bucle o
lazo. Iteración es cada una de las diferentes pasadas o ejecuciones de todas las
instrucciones contenidas en el bucle.

Fases de un programa cíclico:


1.​ Entrada de datos e instrucciones previas.
2.​ Lazo o bucle.
3.​ Instrucciones finales o resto del proceso.
4.​ Salida de resultado.

En el diagrama anterior, observamos que la flecha que se regresa hacia arriba nos está
indicando que hay que volver a evaluar la expresión. En ese caso, como el bucle es infinito,
no se tiene una condición para terminar y se estará haciendo siempre.

En el siguiente ejemplo, ya se agregó una condición, la cual nos permitirá finalizar la


ejecución del bucle en el caso en que la condición se cumpla.

Ejemplo de bucle infinito:


Tipos iterativas:

La condición de inicio quiere decir que podemos inicializar una variable que vayamos a
utilizar dentro el cuerpo de la estructura for. La expresión indica que se seguirá iterando
(repitiendo) mientras la condición sea verdadera.

De manera general existen 3 tipos de estructuras cíclicas, Do while (repeat), While Do, For.

While Do (While - Hacer mientras):

Estructura iterativa que indica un conjunto de instrucciones que se deben de repetir


mientras que la respuesta a la expresión que se coloca dentro del símbolo de decisión sea
VERDADERA, por lo tanto cuando la respuesta a la condición sea FALSA se continúa con
la siguiente instrucción es decir sale del ciclo.

Do While (Repeat-Repetir-Hasta):

Estructura iterativa que indica un conjunto de instrucciones que se deben repetir mientras
que la respuesta a la condición colocada en el lugar del símbolo de decisión sea FALSA, por
lo tanto cuando la respuesta sea VERDADERA se termina de ejecutar el ciclo.
Esta estructura se ejecuta siempre al menos una vez, debido a que las instrucciones a
ejecutar se encuentran dentro del ciclo antes de evaluar la expresión.

For (Hace para, hasta)

Esta estructura iterativa índica un rango de valores exacto que una variable tendrá para
repetir un conjunto de instrucciones. Consta de las siguientes partes:
Un valor de inicio para la variable, el incremento o decremento de los valores de la variable
y por último la comparación del valor de la variable con el fin del rango establecido.

2.12 Actividad 4.
2.13 ¿Qué es un algoritmo?
Es un conjunto de pasos lógicos y estructurados que nos permiten dar solución a un
problema. La importancia de un algoritmo radica en desarrollar un razonamiento lógico
matemático a través de la comprensión y aplicación de metodologías para la resolución de
problemas.

Estos problemas bien pueden ser de la propia asignatura o de otras disciplinas como
matemáticas, química y física que implican el seguimiento de algoritmos, apoyando así al
razonamiento crítico deductivo e inductivo. La resolución de un problema mediante un
ordenador consiste en, partiendo de una especificación del problema, construir un programa
que lo resuelva.

Características:

Las características que debe tener todo algoritmo son:


1.​ Debe ser preciso, es decir, indicar el orden de realización de cada paso.
2.​ Debe estar definido, esto es, si se ejecuta varias veces partiendo de las mismas
condiciones iniciales debe obtener siempre el mismo resultado.
3.​ Debe ser finito (debe tener un número finito de pasos).
4.​ Debe ser independiente del lenguaje de programación que se emplee para
implementarlo.

Un algoritmo debe escribirse sin ceñirse a las reglas de un lenguaje. Existen varias formas
para describir las operaciones de las que consta un algoritmo:
1.​ Descripción textual:​
Consiste en describir los pasos de forma narrativa.
2.​ Lista de operaciones: ​
Es similar al texto, pero enumerando los pasos, utilizando variables, etc. Es la
descripción que se ha empleado para el algoritmo de Euclides.
3.​ Diagrama de flujo:​
Son una representación gráfica en la que se utilizan cajas, rombos, flechas y otros
símbolos para indicar los pasos del algoritmo.
4.​ Pseudocódigo: ​
Se utilizan palabras clave para identificar las estructuras del algoritmo, como
alternativas, repeticiones, etc.

Estructuras:

Los procesos necesarios para la creación de un programa son:


1.​ Especificación y análisis del problema en cuestión.
2.​ Diseño de un algoritmo que resuelva el problema.
3.​ Codificación del algoritmo en un lenguaje de programación.
4.​ Validación del programa.

Un programa se puede definir como una secuencia ordenada de instrucciones cuyo


propósito es realizar una determinada tarea.Por tanto, aparece el concepto de flujo de
ejecución de un programa: este será el orden que siguen dichas instrucciones durante la
ejecución del programa.

Los tipos de estructuras básicas que se pueden emplear en un algoritmo son:


1.​ Secuencia:​
Constituido por 0,1 o N instrucciones que se ejecutan según el orden en el que han
sido escritas. Es la estructura más simple y la pieza más básica a la hora de
componer estructuras.
2.​ Selección, bifurcación o alternativa: ​
Consta de una instrucción especial de decisión y de una o dos secuencias de
instrucciones. La sentencia de decisión genera un resultado delimitado dentro de un
rango preseleccionado y dependiendo del resultado obtenido, se ejecuta o no la
secuencia de instrucciones,
3.​ Iteración, bucle o repetición: ​
Consta de una instrucción especial de decisión y de una secuencia. La instrucción
de decisión y de una secuencia. La instrucción de decisión genera dos tipos de
resultado y la secuencia de instrucciones se ejecutará de modo reiterativo mientras
que la instrucción de decisión genere el resultado verdadero. Los bucles pueden
tener la instrucción de decisión al principio o al final.

Operaciones:

En la definición de un algoritmo se pueden emplear las siguientes operaciones:


1.​ Aritméticas: ​
Suma, resta, multiplicación, división y módulo (resto de la división de enteros).
2.​ Relacionales: ​
< = >, < =, >=, etc.
3.​ Lógicas: Y, O, NO.

La instrucción básica es la asignación que se denota como como V <-- E y consiste en


guardar el valor de una expresión E en la variable V. Las expresiones pueden ser
constantes, variables, dos expresiones operadas, una función aplicada a una expresión, etc.

Se pueden emplear las funciones matemáticas comunes: trigonométricas, exponenciales,


logaritmo, etc. No se pueden emplear las funciones sumatorio, productorio, integración
derivación, cálculo matricial, etc. ni cualquier otra función cuya implementación en el
ordenador no sea trivial.

Programación de algoritmos:

La programación estructurada requiere escribir un programa siguiendo las siguientes tres


reglas:
1.​ El programa se diseña siguiendo la aproximación modular.
2.​ Cada uno de los módulos es diseñado siguiendo un método descendente; esto es el
módulo que se va descomponiendo sucesivamente en tareas más simples, cada una
de las cuales será efectuada por un submódulo.
3.​ Cada módulo se codifica utilizando tres estructuras de control básicas: secuencia,
selección o alternativa, y repetición o bucle.

Para los que estén familiarizados con lenguajes de programación como Pascal, Visual Basic
o Fortran, la programación estructurada significa también programar sin la instrucción
GOTO. La programación estructurada hace que los programas sean más fáciles de escribir,
verificar, leer y mantener ya que al utilizar un número limitado de estructuras de control
minimiza la complejidad de los problemas.

2.14 Diseño de algoritmos.

Un ordenador no tiene la capacidad de pensar y resolver el problema por sí mismo; una vez
que el problema ha quedado bien definido debemos buscar una secuencia de pasos que lo
resuelvan e indiquen al ordenador las instrucciones a ejecutar, es decir, hemos de encontrar
un buen algoritmo.

Aunque en la solución de problemas sencillos parezca evidente la codificación en un


lenguaje de programación concreto, es aconsejable el uso de algoritmos, a partir de los
cuales se pasa al programa simplemente conociendo las reglas de sintaxis del lenguaje de
programación a utilizar.

El diseño de algoritmos es un método específico para poder crear un modelo matemático


ajustado a un problema específico para resolverlo. El diseño de algoritmos o algorítmica es
una área central de las ciencias de la computación, también muy importante para la
investigación de operaciones (también conocida como investigación operativa), en
ingeniería del software y en otras disciplinas afines.

Ejemplo:

Los pasos a seguir para calcular los datos de salida del ejemplo anterior a partir de los
datos de entrada son:

precio ← peso x kg ​
devuelta ← entregada-precio

Que se expresa en un lenguaje de programación como:

precio = peso * precio por kg;


devuelta = entregada - precio

Diagramas de flujo:

Los diagramas de flujo son una herramienta gráfica para la descripción de algoritmos. Un
diagrama de flujo consta de una serie de símbolos estándar, que representan las distintas
acciones representan las distintas acciones del algoritmo, conectados mediante líneas que
indican el orden en el cual deben realizarse las operaciones. Un diagrama de flujo muestra
la lógica del algoritmo, acentuando los pasos individuales y sus interconexiones. Un
diagrama de flujo debe reflejar:
1.​ El comienzo del programa.
2.​ Las operaciones que el programa realiza.
3.​ El orden en que se realizan.
4.​ El final del programa.

Formas de representación de algoritmos:

Existen diversas formas de representación de algoritmos pero no hay un consenso con


relación a cuál de ellas es mejor. Algunas formas de representación de algoritmos tratan los
problemas a un nivel lógico, abstrayéndose de detalles de detalles de implementación,
muchas veces relacionados con un lenguaje de programación.

Por otro lado existen formas de representación de algoritmos que poseen una mayor
riqueza de detalles y muchas veces acaban por oscurecer la idea principal, el algoritmo,
dificultando su entendimiento.
1.​ La descripción narrativa.
2.​ El flujograma convencional.
3.​ El diagrama Chapin.
4.​ El Pseudocódigo o también conocido como lenguaje estructurado.

Diseño:

Existen muchos enfoques para resolver un problema. ¿Cómo escogemos entre ellos?
Generalmente hay dos metas en el diseño de programas de cómputo:
1.​ El diseño de un algoritmo que sea fácil de entender, codificar y depurar (Ingeniería
de Software).
2.​ El diseño de un algoritmo que haga uso eficiente de los recursos de la computadora
(Análisis y diseño de algoritmos).

El análisis de algoritmos nos permite medir la dificultad inherente de un problema y evaluar


la eficiencia de un algoritmo. Por ejemplo, supongamos que una computadora resuelve un
problema de tamaño n en una hora.

Ahora supongamos que tenemos una computadora 10 veces más rápida, ¿De qué tamaño
es el problema que podemos resolver?

En la tabla de arriba, f(n) es la razón de crecimiento de un algoritmo.

Dividir:

Muchos algoritmos útiles tienen una estructura recursiva, de modo que para resolver un
problema se llaman recursivamente a sí mismos una o más veces para solucionar
subproblemas muy similares. Esta estructura obedece a una estrategia dividir-y-conquistar,
en que se ejecuta tres pasos en cada nivel de la recursión:

1.​ Dividir: ​
Dividen el problema en varios subproblemas similares al problema original, pero de
menor tamaño.
2.​ Conquistar:​
Resuelven recursivamente los subproblemas si los tamaños de los subproblemas
son suficientemente pequeños, entonces resuelven los subproblemas de manera
directa.
3.​ Combinar: ​
Combinan estas soluciones para crear una solución al problema original.
La técnica de dividir para conquistar consiste en descomponer el caso que hay que resolver
en subcasos más pequeños, resolver independientemente los subcasos y por último
combinar las soluciones de los subcasos para obtener la solución del caso original.

2.15 Actividad 5
2.16 Decisión y Algoritmo

Cuando empezamos a programar necesitamos hacer dos cosas, la primera, adaptar nuestro
tren de pensamiento y así poder describir los pasos necesarios para resolver cierto
problema. Y la segunda, escribir los esos pasos en un lenguaje de programación que pueda
entender el computador.

Recuerda la sintaxis de algunos lenguajes, pero no es tan estricto como estos, está hecho
para que nosotros los humanos podamos expresar ideas, de forma un poco más parecida al
lenguaje de programación. Conjunto de esquemas de actuación diagnóstica y terapéutica
que se emplean para simplificar la enseñanza de la medicina y se diseñan a modo de árbol
con ramas distintas según las situaciones que se van planteando ante un caso clínico, un
síndrome o una enfermedad.

Decisión:

Una regla de decisión es una simple declaración, (IF-THEN), que consiste en una condición
(también llamada antecedente) y una predicción. Las reglas de decisión son probablemente
los modelos de predicción más interpretables. Un árbol de decisión es un modelo predictivo
que divide el espacio de los predictores agrupando observaciones con valores similares
para la variable respuesta o dependiente.

Para dividir el espacio muestral en sub-regiones es preciso aplicar una serie de reglas o
decisiones, para que cada subregión contenga la mayor proporción posible de individuos de
una de las poblaciones. Si una subregión contiene datos de diferentes clases, se subdivide
en regiones más pequeñas hasta fragmentar el espacio en subregiones menores que
integran datos de la misma clase.

Algoritmo:

Un algoritmo es una secuencia ordenada de pasos que persiguen la consecución de un fin,


de un objetivo bien claro y específico. Es un procedimiento definido, que toma un valor
cualquiera y arroja como resultado otro valor. Recordemos que un computador es un
aparato destinado a procesar información, las sucesivas fases, manipulaciones -
transformaciones que sufre la información para resolver un problema determinado siguiendo
las instrucciones de un programa registrado.

El computador no es capaz de hacer nada por sí solo, si no tiene un programador que le


indique lo que debe hacer mediante un programa. Debe ser capaz de organizar la solución y
darle toda la potencialidad que el computador como máquina está en capacidad de darle.
Es relativamente seguro decir que el algoritmo describe el proceso de sumar dos números.
Al principio del algoritmo asignamos el valor a la dos variables que se usarán en él, a esto
se le llama inicializar variables y lo hacemos para que dichas variables comiencen con
valores controlados por nosotros.

Podemos notar que luego del inicio del algoritmo, intentamos las siguientes instrucciones.
Esto para recalcar el hecho de que forma parte de un bloque. Cuando programamos
cambiamos un poco la forma en que hacemos las fórmulas matemáticas, en este caso
estamos diciendo que el resultado de la operación matemática a + b será guardado en la
variable c.

Tipos:

Un árbol de decisión es un algoritmo supervisado de aprendizaje automático porque para


que aprenda el modelo necesitamos una variable dependiente en el conjunto de
entrenamiento. El tipo de problema a resolver dependerá de la variable a predecir:
1.​ Variable dependiente:​
Estaríamos ante un problema de regresión.
2.​ Variable categórica: ​
Nos enfrentamos a un problema de clasificación.
Estructura de decisión. Las estructuras que nos permiten tomar decisiones para resolver un
problema se denominan Estructuras de decisión. Las estructuras de decisión permiten que
el computador seleccione la ruta a seguir de acuerdo a la evaluación de cierta condición
lógica previamente establecida.

Sintaxis:

El pseudocódigo es algo que se ve y se comporta (un poco) como código, pero no lo es.
¿Por qué parece código pero no lo es?

Porque la sintaxis de algunos lenguajes, no es tan estricto como estos, está hecho para que
nosotros los humanos podamos expresar ideas de forma un poco más parecida al lenguaje
de programación.

Un algoritmo expresado en pseudocódigo se va más o menos así:


Con la palabra imprimir denotamos una salida, en este caso los mensajes que nuestro
algoritmo muestra al usuario son: “Introduzca el primer número”, “Introduzca el segundo
número” y “La suma de"a " y"b " es "c "".

2.17 Diseño de pseudocódigo.


El pseudocódigo es una mezcla de lenguaje de programación y español (o inglés o
cualquier otro idioma) que se emplea, dentro de la programación estructurada, para realizar
el diseño de un programa. En esencia, el pseudocódigo se puede definir como un lenguaje
de especificaciones de algoritmos.

Es la representación narrativa de los pasos que debe seguir un algoritmo para dar solución
a un problema determinado. El pseudocódigo utiliza palabras que indican el proceso a
realizar.

El pseudocódigo se concibió para superar las dos principales desventajas del diagrama de
flujo: es lento de crear y difícil de modificar sin un nuevo dibujo. Por otra parte, es más fácil
de utilizar ya que es similar al lenguaje natural.

Ventajas:

Una de las mejores formas de aprender a programar es empezar por los diagramas de flujo
y el pseudocódigo.
1.​ Ocupa menos espacio en una hoja de papel.
2.​ Permite representar en forma fácil operaciones repetitivas complejas.
3.​ Es muy fácil pasar de pseudocódigo a un programa en algún lenguaje de
programación.
4.​ Si se siguen las reglas se puede observar claramente los niveles que tiene cada
operación.
Es una forma de expresar los distintos pasos que va a realizar un programa, de la forma
más parecida a un lenguaje de programación. Estas estructuras se clasifican de acuerdo
con su complejidad.

Tener un programa escrito en pseudocódigo facilita la tarea de programar en un lenguaje


formal y mejora la calidad en la resolución de problemas, además de reducir el espacio
necesario a la hora de desarrollar un problema. El pseudocódigo llega donde el diagrama de
flujo no lo hace. La solución de un diagrama de flujo suele ser la ideal, pero no suele ser
fácil de implementar al crear el programa.

¿Qué es?

El pseudocódigo requiere de ciertos símbolos que ya tienen significado preciso y


establecido, a los que se les conoce como palabras clave. Es necesario que exista una
palabra clave para la selección y otra para la iteración condicional, así como para las
instrucciones adicionales y otras estructuras de control.

Todo pseudocódigo lo iniciaremos con la palabra reservada principal para especificar la


función denominada (main) en lenguaje C. Todo programa al igual que toda función, debe
contener las palabras reservadas un inicio y un fin que delimita las instrucciones de la
misma.

Las estructuras de operación de programas son un grupo de formas de trabajo, que


permiten, mediante la manipulación de variables, realizar ciertos procesos específicos que
nos lleven a la solución de problemas.

Diseño:

El pseudocódigo es una forma de expresar los distintos pasos que va a realizar un


programa, de la forma más parecida a un lenguaje de programación. Su principal función es
la de representar por pasos la solución a un problema o algoritmo, de la forma más
detallada posible, utilizando un lenguaje cercano al de programación.

El pseudocódigo no puede ejecutarse en un ordenador, ya que entonces dejaría de ser


pseudocódigo, como su propio nombre indica, se trata de un código falso (pseudo = falso),
es un código escrito para que lo entienda el ser humano y no la máquina. Podemos
considerar al pseudocódigo como un lenguaje intermedio, que se encuentra en medio de
nuestro propio lenguaje de programación que entiende el ordenador.

Características:

Para comprender qué es el pseudocódigo podemos utilizar un símil: los planos de una casa
serían el pseudocódigo y la casa en sí el programa. Su principal característica es la de
representar un método que facilita la programación y solución del algoritmo del programa.

También se caracteriza por ser una forma de representación, fácil de utilizar y de manipular
que simplifica el paso del programa, al lenguaje de programación. Otra característica que
tiene el pseudocódigo es su independencia al código en el que se va a escribir el programa,
proporcionando un método que facilita la posterior programación y la resolución del
algoritmo del programa.

El pseudocódigo, al ser independiente del lenguaje de programación, permite que su uso se


pueda aplicar utilizando diferentes lenguajes y permitiendo que el programador no tenga
que ser la misma persona que escribió el pseudocódigo.

Una de las desventajas del uso de pseudocódigo es la falta de normas que puede hacer
que la lógica de un programa, resulte complicada de ver por el programador que va a
implementar este. Además, en el caso de problemas muy extensos, puede llegar a ser difícil
de entender.
2.18 Exámen Módulo II.

3.- Programación Orientada a Objetos.
3.1 Lenguaje de programación.
Un lenguaje de programación es una forma de comunicarnos con una computadora,
tablet o celular e indicarle qué queremos hacer. Existen distintos tipos de lenguaje:
principalmente de bajo nivel y de alto nivel. La diferencia se encuentra en lo cerca o
lejos que estemos del hardware de nuestro equipo.

Se conoce como lenguaje de programación a un programa destinado a la


construcción de otros programas informáticos. Su nombre se debe a que comprende
un lenguaje formal que está diseñado para organizar algoritmos y procesos lógicos
que serán luego llevados a cabo por un ordenador o sistema informático,
permitiendo controlar así su comportamiento físico, lógico y su comunicación con el
usuario humano.

Encontramos diferentes lenguajes como C, C++, Java, PHP, Python, C#, ASP, entre
otros. Los programas habitualmente se diseñan o escriben a través de un entorno
de desarrollo integrado (IDE).

PLC: ​

Un PLC permite controlar y monitorizar en tiempo real los diversos procesos
industriales, presentándose en un HMI (interfaz hombre-máquina) o redes de control
superior. Podemos encontrar sistemas PLC en muchos ámbitos diferentes: control
de presas, subestaciones, distribución de gas, petroquímica, cadenas de
producción, etc.

Programar un PLC implica generar un conjunto de instrucciones y de órdenes que


provocarán la ejecución de una tarea determinada. Podemos decir que un programa
es una respuesta predeterminada a todas las combinaciones posibles de estados de
la información que recibe. La programación en PLC se compone de diversas fases.

Definiciones:​

Definición y análisis del problema.​
En primer lugar debemos identificar cual es la necesidad que queremos resolver a
través de la controladora programable.
●​ ¿Qué resultados nos debe proporcionar el sistema?
●​ ¿Qué datos o información nos hacen falta para poder determinar la respuesta
de la máquina?

Definición de la arquitectura del automatismo. ​


Definiremos el hardware de la controladora. Una vez que sepamos cual es la
información o los procesos que necesitamos monitorizar, configuraremos las
entradas de la controladora para que se recogen a través de los sensores. Se
definen también las salidas a través de las cuales se activarán procesos y factores
como la redundancia o el diagnóstico.

Programación con código.​


Con todos los procesos definidos, pasaremos a redactar las órdenes que nos
permitirán comunicarnos con la máquina. Para ello se emplean los lenguajes de
programación.

Depuración, test y verificación del programa. ​


La última fase implica una serie de tareas orientadas a comprobar el correcto
funcionamiento del programa. Se detectan posibles errores en la comunicación y se
hacen las correcciones oportunas para garantizar una óptima ejecución del
automatismo programado.

Lenguajes:

Se componen de una serie de símbolos, caracteres y reglas de uso que fueron


diseñados para poder establecer una comunicación de los usuarios con las
máquinas. Es el código con el cual podemos crear un programa con instrucciones
para controlar el funcionamiento de un proceso o máquina industrial.

●​ IL (Instruction List)​
Es el lenguaje de texto y programación más antiguo, es la base del resto de
lenguajes y se empleaba cuando las computadoras no tenían capacidad
gráfica. El IL es un lenguaje de bajo nivel y recuerda al lenguaje
ensamblador. Con él todos los programas pueden ser traducidos a una lista
de instrucciones. El control del programa se consigue a través de saltos y de
llamadas a funciones.
●​ LD (Ladder)​
Se le conoce como diagrama de escalera, ya que su estructura recuerda a la
de una escalera: se compone de dos niveles verticales (alimentación) y de
dos horizontales.

Programación:

●​ FBD (Function Block Diagram)​


Es un lenguaje gráfico que define la función entre las variables de entrada y
las de salida. En este lenguaje se utilizan bloques de símbolo lógico.
●​ ST (Structured Text)​
Es un lenguaje gráfico que define la función entre las variables de entrada y
salida. Recuerda al lenguaje de programación C y Pascal. Se compone de
una serie de instrucciones que se pueden ejecutar de manera condicionada.
●​ Comunicación entre dos o más PLC’s​
La comunicación entre dos o más controladoras lógicas programables es
posible a través de una conexión espacial, construida a base de reglas, que
permiten la transferencia de datos o información entre cada uno de estos. A
este tipo de reglas se les conoce como protocolo de comunicación. Los
protocolos de comunicación son: Profibus, Fieldbus, Modbus, Devicenet o
Interbuss.

3.2 Entorno de Desarrollo Integrado (IDE).

Un entorno de desarrollo integrado, también conocido por sus siglas IDE, puede
considerarse como un entorno digital utilizado para desarrollar software, juegos o
cualquier cosa relacionada con la codificación. Un IDE ofrece integración desde los
pasos más básicos del desarrollo de software, como escribir su código, depurar o
incluso compilar sus aplicaciones, en un lenguaje que las computadoras puedan
entender.

No necesita recordar todos los comandos que necesita, por ejemplo, para generar
código automáticamente a partir de marcos, para construir su aplicación o cualquier
otra cosa, ya que probablemente haya un botón que lo haga por usted en el IDE.
Los editores de código, por otro lado, son esencialmente editores simples que
incluyen resaltado editores simples que incluyen resaltado de sintaxis para el
lenguaje en el que está programando como PHP, C, C#, Python, etc. Hacen que la
programación sea mucho más fácil que los editores de texto simple, pero no lo son
al nivel de un IDE.

Características:

Generalmente, un IDE cuenta con las siguientes características:


●​ Editor de código fuente: ​
Editor de texto que ayuda a escribir el código de software con funciones
como el resaltado de la sintaxis con indicaciones visuales, el relleno
automático específico para el lenguaje y la comprobación de errores a
medida que se escribe el código.
●​ Automatización de compilaciones locales:​
Herramientas que automatizan tareas sencillas y repetitivas como parte de la
creación de una compilación local del software para su uso por parte del
desarrollador, como la compilación del código fuente de la computadora en
un código binario.
●​ Depurador:​
Programa que sirve para probar otros programas y mostrar la ubicación de un
error en el código original de forma gráfica.
Desarrolladores:

Los IDE permiten que los desarrolladores comiencen a programar aplicaciones


nuevas con rapidez, ya que no necesitan establecer ni integrar manualmente varias
herramientas como parte del proceso de configuración.

Esto resulta muy útil al incorporar desarrolladores nuevos, porque pueden confiar en
un IDE para ponerse al día con los flujos de trabajo y las herramientas estándares
de un equipo. De hecho, la mayoría de las características de los IDE están
diseñadas para ahorrar tiempo, como el relleno inteligente y la generación
automatizada del código, lo cual elimina la necesidad de escribir secuencias enteras
de caracteres. Los IDE analizan el código mientras se escribe, así que las fallas
causadas por errores humanos se identifican en tiempo real.

Tipos:

●​ Cantidad de lenguajes compatibles:​


Algunos IDE son compatibles con un solo lenguaje, así que son mejores para
un modelo de programación específico
●​ Sistemas operativos compatibles: ​
El sistema operativo de un desarrollador determinará qué tipos de IDE son
viables (salvo que el IDE esté en la nube).
●​ Características: ​
Si bien la mayoría de los IDE incluye tres funciones esenciales, muchos
admiten funciones adicionales, como la reestructuración de las aplicaciones,
la búsqueda de código y las herramientas de integración e implementación
continuas (CI/CD).
●​ Impacto en el rendimiento del sistema:​
Si el desarrollador desea ejecutar al mismo tiempo varias aplicaciones que
consumen mucha memoria, deberá considerar cuánta requiere el IDE.
●​ Plugins y extensiones: ​
Algunos IDE permiten personalizar los flujos de trabajo, de manera que se
adapten a las necesidades y preferencias del desarrollador. }

¿Qué es?

La mayoría de los IDEs modernos ahora cuentan con un completador de código


inteligente. El caso más sonado de esta funcionalidad es el nuevo Github Copilot,
que usa inteligencia artificial para ayudarte a terminar tu código. Adicionalmente,
algunos IDE contienen un compilador, un intérprete o ambos. El límite entre un
entorno de desarrollo integrado y otras partes del entorno de desarrollo de software
más amplio no está claramente definido.
A veces se integra un sistema de control de versiones (como GIT), o varias
herramientas para simplificar la construcción de una interfaz gráfica de usuario
(GUI). Cuando se estudien lenguajes de programación y desarrollando software, es
importante comenzar por elegir tu editor de texto y entender qué es un IDE.

Algunos IDE más populares entre los programadores son:


1.​ Visual Studio Code.
2.​ Sublime text.
3.​ Atom.
4.​ Vim.
5.​ Eclipse.
6.​ Android Studio.
7.​ NetBeans.
8.​ JetBrains.
9.​ Apple Xcode
10.​Komodo.

3.4 Identificadores y palabras clave en C#.

La aplicación de C#, contiene muchas palabras reservadas por espacios. En ella, se


utilizan dos tipos de nombre: palabras clave e identificadores. Esta sección describe
las diferencias entre estos dos tipos de nombres. Las palabras clave son palabras
que tienen un significado especial en el lenguaje C#. Estas palabras han sido
reservadas en C#, y nos referimos a ellas como palabras reservadas.

Las palabras class, static y void son palabras reservadas. Cada palabra clave posee
en el lenguaje C#, un significado especial. La siguiente lista, contiene las palabras
clave definidas en C#:
Los identificadores son los nombres que usan en las aplicaciones. C# no reserva
nombre de identificadores.

¿Qué es C#?

C# es un lenguaje de programación desarrollado por Microsoft, orientado a objetos,


que ha sido diseñado para compilar diversas aplicaciones que se ejecutan en .NET
Framework. Se trata de un lenguaje simple, eficaz y con seguridad de tipos. Las
numerosas innovaciones de C# permite desarrollar aplicaciones rápidamente y
mantener la expresividad y elegancia de los lenguajes de estilo de C:

La sintaxis viene derivada de C y C++ y utiliza el modelo de objetos de la plataforma


.NET, muy parecido al de Java, aunque incluye mejoras propias de otros lenguajes.
Como curiosidad, el nombre de este lenguaje fue inspirado por la escala musical. En
ella, la letra C equivale a la nota musical do y el símbolo # significa sostenido, la que
indica que es un semitono más alto. Así, C# sugiere que es superior a C y C++.

Variables en C#:

Las variables son identificadores asociados a valores. Se declaran indicando el tipo


de dato que almacenará y su identificador. Un identificador puede:
1.​ Empezar por “_”
2.​ Contener caracteres Unicode en mayúsculas y minúsculas.
Un identificador no puede:
1.​ Empezar por un número.
2.​ Empezar por un símbolo, ni aunque sea una palabra clave.
3.​ Contener más de 511 caracteres.
Se declaran así:

int miNumero; //Declaración de variable sin ningun valor.​


int miNumero = 5; //Declaración con el valor 5.

También se declara una variable sin especificar el tipo de dato (al igual que en otros
lenguajes como JavaScript), utilizando el mecanismo de inferencia mediante la
palabra clave, “var” donde el compilador determina el tipo de dato que se le asignará
a la variable y sólo es permitida para variables locales.

Para escribir:

En el lenguaje C se han usado las palabras clave de printf y scanf para imprimir en
pantalla y leer del teclado, en C# se usa la clase Console, la cual es una clase
incorporada que contiene los métodos para mostrar mensajes en la pantalla y
permitir entradas desde el teclado. Para que se imprima en pantalla se usa el
método WriteLine. Como se muestra en la imagen.
Static void Main (string [] args)
{
Console.WriteLine(“Hola mundo.”);
string line = Console.ReadLine();
}

Instrucciones en C#:

Las instrucciones if-else, for, while, do-while, switch, return, break y continue son,
básicamente, iguales que en C, C++ y Java. La instrucción foreach, al igual que en
Java, realiza un ciclo a través de los elementos de una matriz o colección.

En este ciclo se recorre la colección y la variable recibe un elemento de dicha


colección en cada iteración. la instrucción goto se sigue utilizando en C# a pesar de
la polémica sobre su uso.

Identificadores:

En los lenguajes de programación, los identificadores se utilizan con fines de


identificación. O en otras palabras, los identificadores son el nombre definido por el
usuario de los componentes del programa. En C#, un identificador puede ser un
nombre de clase, nombre de método, nombre de variable o etiqueta.

Ejemplo:
public class GFG {
​ static public void Main ()
​ {
​ int x;
}
}

Reglas para definir identificadores en C#:


Existen ciertas reglas válidas para definir un identificador C# válido. Deben seguirse
estas reglas; de lo contrario, obtendremos un error en tiempo de compilación.

Identificadores:

Aquí, el número total de identificadores presentes en el ejemplo anterior es 3 y los


nombres de estos identificadores son:
1.​ GFG: nombre de la clase.
2.​ Principal: nombre del método.
3.​ X: nombre de la variable.
Los nombres de variables (lo que se conoce como “identificadores”) pueden estar
formados por letras, números o el símbolo de subrayado (_) y deben comenzar por
letra o subrayado. No deben tener espacios intermedios.

También hay que recordar que las vocales acentuadas y la ñ son problemáticas,
porque no son letras “estándar” en todos los idiomas, así que no se pueden utilizar
como parte de un identificador en la mayoría de lenguajes de programación.

3.5 Tipos de datos en C#.

El primer objetivo de un programa informático es el manejo de datos. Un dato es


toda aquella información que se puede tratar en un programa informático. El
concepto de tipo es muy importante en C#. Cada variable, argumento de función y
valor devuelto por una función debe tener un tipo para compilarse. Asimismo, antes
de evaluar cada una de las expresiones (incluidos los valores literales), el
compartidor da implícitamente un tipo a estas expresiones.

Algunos ejemplos de tipos incluyen int para almacenar valores enteros, double para
almacenar valores de punto flotante (también conocidos como tipos de datos
escalares) o la clase std::basic_string de biblioteca estándar para almacenar texto.
Puede crear su propio tipo definiendo o classtruct. El tipo especifica la cantidad de
memoria que se asignará para la variable (o el resultado de la expresión), las clases
de valores que se pueden almacenar en esa variable, como se interpretan estos
valores (como patrones de bits) y las operaciones que se pueden realizar en ella.

Terminología:

●​ Variable: ​
Nombre simbólico de una cantidad de datos para que el nombre se pueda
usar para acceder a los datos a los que hace referencia a lo largo del ámbito
del código donde se define. En C#, la variable se usa generalmente para
hacer referencia a instancias de tipos de datos escalares, mientras que las
instancias de otros tipos suelen denominarse objetos.
●​ Objetos: ​
Simplificar y mantener la coherencia, en este artículo se usa el término objeto
para hacer referencia a cualquier instancia de una clase o estructura y
cuando se usa en el general se incluyen todos los tipos, incluso variables
escalares.
●​ Tipo POD (datos antiguos sin formato):​
ESta categoría informal de tipos de datos en C#, hace referencia a tipos
escalares o son referencia a tipos escalares o son clases POD, no tiene
ningún miembro de datos estática que no sea también POD, y no tiene
ningún constructor definido por el usuario.
Tipos:
1.​ Tipo entero: ​
Representa números enteros con o sin signo, que estarán compuestos por
los dígitos del 0 al 9, pudiendo ser precedidos por los signos + o -. Algunos
ejemplos de datos enteros son: 0, 23, -176, - 1, etc. Para definir variables en
C se antepone la palabra reservada del tipo al identificador de la variable. El
tipo de datos entero se define en el lenguaje de programación C por la
palabra reservada. ​
​ int nombre_variable = valor;
2.​ Tipo real:​
Se emplean para representar números reales (con decimales). Para definir
datos reales se antepone la palabra reservada float al identificador de la
variable. ​
​ float identificador = valor;​
​ float numero1, numero2;​
​ float numero 3 = 123.43;
3.​ Tipo carácter: ​
Este tipo de datos se emplea para representar un carácter perteneciente a un
determinado código utilizado por el ordenador (normalmente el código ASCII).
Para representar este tipo de dato se antepone la palabra reservada char al
identificador de la variable. ​
​ char identificador = “valor”;
4.​ Tipo cadena de caracteres:​
Una cadena de caracteres es un número de caracteres es un número de
caracteres consecutivos (incluso ninguno) encerrado entre unos delimitados,
que en el lenguaje C son las comillas dobles. Para definir variables de tipo
cadena, estas se definen como vectores de caracteres, esto es,
anteponiendo la palabra reservada char, al identificador de la variable y
después entre corchetes la longitud máxima de cadena. ​
​ char identificador[cantidad] = “mensaje”;
Programación:

La programación orientada a objetos es la característica más importante de C#. La


cadena de caracteres, que es otro tipo de datos que utilizamos normalmente en C#,
realmente no es un tipo de dato, sino que el string, que representa una cadena de
caracteres es una clase.
​ class Punto
{​
public:
​ float x;
​ float y;

​ void mostrar();
};
El concepto de clase es algo parecido a las estructuras ya que nos permiten guardar
atributos o información pero además las clases nos permiten ejecutar código. Al
crear una variable de una clase, a esta variable se le llama objeto, por eso se
conoce como programación orientada a objetos y este objeto además de guardar
información puede ejecutar funciones o métodos que trabajan sobre los datos que
tienen guardados.

Datos enumerados:

Los tipos enumerados son un mecanismo usado en C++ que nos permite agrupar
constantes simbólicas.​

En este ejemplo parece que, en la variable días, estamos guardando cadenas de


caracteres pero realmente estamos guardando números, pero en lugar de guardar
los números directamente, a cada número le define una constante, es decir, el 1 es
lunes, el 2 es martes, el 3 es miércoles, etc.

Además, podemos recorrerlos, ir desde el lunes hasta el domingo, utilizando una


variable entera, porque lo que realmente estamos guardando son enteros.

3.6 Operadores de asignación y aritméticos.

Estos son los símbolos aritméticos básicos:


1.​ Suma +
2.​ Resta -
3.​ Multiplicación *
4.​ División /
5.​ Potenciación ^
Los valores resultantes de estas operaciones aritméticas son asignados a variables.
Hemos visto los operadores aritméticos, que usaban dos números para calcular una
operación aritmética (como suma o resta) y devolver su resultado.
En este caso, los operadores de asignación o assigment operators, nos permiten
realizar una operación y almacenar su resultado en la variable inicial. Podemos ver
como realmente el único operador nuevo es el =. El resto son abreviaciones de otros
operadores que habíamos visto con anterioridad. Un ejemplo con el x=7.

Tipos:

Existe en Python todo un grupo de operadores los cuales le permiten básicamente


asignar un valor a una variable, usando el operador «=». Con estos operadores
pueden aplicar la técnica denominada asignación aumentada.

●​ Operador =: ​
El operador igual a, es el más simple de todos y asigna a la variable del lado
izquierdo cualquier variable o resultado del lado derecho.
●​ Operador +=: ​
El operador suma a la variable del lado izquierdo el valor del lado derecho.
●​ Operador -=: ​
El operador resta a la variable del lado izquierdo el valor del lado derecho.
●​ Operador *=:​
El operador multiplica a la variable del lado izquierdo el valor del lado
derecho.
●​ Operador /=: ​
El operador divide a la variable del lado izquierdo el valor del lado derecho.
●​ Operador **=:​
El operador calcula exponiendo a la variable del lado izquierdo el valor del
lado derecho.
●​ Operador //=:​
El operador calcula la división entera a la variable del lado izquierdo y el valor
del lado derecho.
●​ Operador %=: ​
El operador devuelve el resto de la división a la variable del lado izquierdo y
al valor del lado derecho.
●​ Asignación aumentada: ​
Es frecuente que una variable tenga que ser definida de nuevo en función de
sí misma.
Operaciones aritméticas:

Java tiene cinco operadores aritméticos.


El cociente entre dos enteros da como resultado un entero. Por ejemplo, al dividir 20
entre 7 nos da como resultado 2. el operador módulo da como resultado el resto de
la división entera. Por ejemplo 20%7 da como resultado 6 que es el resto de la
división entre 20 y 7.

El operador módulo también se puede emplear con números reales. Por ejemplo, el
cociente entre 7.5 y 3.0 es 2.5 y el resto es cero, es decir, 7.5=3.0 x 2.5+0.

El operador módulo, funciona de la siguiente forma 7.5=3.0 x 2+1.5, calcula la


diferencia entre el dividendo (7.5) y el producto del divisor (3.0) por la parte entera
(2) del cociente, devolviendo 1.5. Así pues, la operación 7.5%3.0 da como resultado
1.5.

Uso de operadores:​

Los operadores son símbolos que tienen como función que el compilador realice
una acción. Los operadores actúan sobre los operandos, mismo que son
representados mediante expresiones. En el siguiente ejemplo vamos a ver los
distintos operadores de asignación aritmética, tales como la suma, resta, división y
multiplicación de dos números.

La funcionalidad de estos operadores es la de aunar en una única operación la


operación aritmética en cuestión y la asignación del resultado final a la variable.
Estos operadores nos resultan conocidos, pues ya los hemos estudiado con el
pseudocódigo. Las reglas de prioridad son las mismas que explicamos al hablar de
pseudocódigo. Los paréntesis definen la prioridad principal.

Operadores:​

Dentro del lenguaje de programación C++ el símbolo de asignación se encuentra
representado por el signo igual (=). El operador = asigna el valor de la expresión que
se encuentra del lado derecho a la variable situada de lado izquierdo tal y como se
muestra en la tabla 10, en donde también se muestran ejemplos y descripciones de
diferentes formas de utilizar el operador de asignación.

Los operadores de asignación almacenan un valor en el objeto especificado por el


operador izquierdo. hay dos tipos de operaciones de asignación:
1.​ Asignación simple: ​
En la que el valor del segundo operando se almacena en el objeto
especificado por el primer operando.
2.​ Asignación compuesta:​
En la que se realiza una operación aritmética de desplazamiento o bit a bit
antes de almacenar el resultado.
3.8 Operadores lógicos y relacionales.

Se llaman operadores lógicos y relacionales, a aquellos que permiten comparar dos


valores evaluando si se relacionan cumpliendo el ser menor uno que otro, mayor
uno que otro, igual uno que otro, etc.

Los operadores lógicos permiten además introducir nexos entre condiciones como
“y se cumple también que” ó “o se cumple que”.

Es importante tener en cuenta que para comparar si una variable A, es igual a otra
debemos usar A == B, en lugar de A = B. El doble signo igual se usa en
comparaciones.

Para determinar si una variable A, tiene distinto contenido que una variable B,
debemos usar A != B. En C no se admite la sintaxis A <> B que usamos en
pseudocódigo. Se plantea suponiendo que la variable A, tiene un valor A = 5 y la
variable B un valor B = 7.

Relacionales:

Los operadores relacionales nos permiten comparar expresiones de tipos


compatibles, devolviendo un resultado de tipo lógico: la comparación es verdadera o
falsa. Por ejemplo, la expresión (3 + 4) > 12 sería falsa, ya que 7 es menor que 12.
Uno de los errores más comunes es confundir el operador relacional IGUAL QUE
(==) con el de asignación IGUAL A (=).

La expresión a=b copia el valor de b en a, mientras que a == b retorna un cero, si a


es distinto de b ó un número distinto de cero si son iguales. Los operadores
relacionales tienen menor precedencia que los aritméticos, de forma que a < b + c
se interpreta como a < (b + c), pero aunque sea superfluo, recomendamos el uso de
paréntesis a fin de aumentar la legibilidad del texto.

Lógicos:​

Estos operadores se utilizan para establecer relaciones entre valores lógicos. Estos
valores pueden ser resultado de una expresión relacional. Hay tres operadores que
realizan las conectividades lógicas Y (AND), O (OR) y NEGACIÓN (NOT).

Ejecuta un programa definiendo las cuatro variables A, B; C, D como de tipo entero,


asígnales los valores correspondientes y comprueba las expresiones usando el
código de ejemplo que hemos indicado. Define otras variables y haz algunas
comprobaciones por tu cuenta. Es importante que escribas tu propio código y trates
de razonar sobre los resultados esperados y los resultados obtenidos.
En muchas ocasiones el resultado obtenido no será el esperado y como
programado deberás de ser capaz de determinar el porqué de estas divergencias.

Tipos: ​

Los operadores relacionales y de igualdad binarios comparan el primer operando
con el segundo para probar la validez de la relación especificada. El resultado de
una expresión relacional es 1 si la relación probada es true y 0 si es flase. El tipo del
resultado es int.

Operadores relacionales lógicos.


Sirven para evaluar expresiones compuestas de tipo lógico, cuyo resultado,
resultará cierto o falso, true o false. La evaluación de las operaciones lógicas se
realiza de izquierda a derecha y se interrumpe cuando se ha asegurado el resultado.

Esto se conoce como propiedad de cortocircuito: si se puede concluir el valor lógico


del resultado a partir de una evaluación parcial de la expresión, no se sigue
evaluando la misma.

Concepto:​

Los operandos pueden tener tipo entero, flotante o puntero. Los tipos de operando
pueden ser diferentes. Los operadores relacionales realizan las conversiones
aritméticas habituales sobre operandos de tipo entero y flotante. Además, puede
usar las siguientes combinaciones de tipos de operando con los operadores
relacionales y de igualdad.

●​ Ambos operandos de cualquier operador relacional o de igualdad pueden ser


punteros al mismo tipo. Para los operadores de igualdad (==) y desigualdad
(!=) El resultado de la comparación indica si los dos punteros direccionan la
misma ubicación de memoria.

●​ Un valor de puntero se puede comparar con el valor constante 0, para


igualdad (==) y desigualdad (!=) El resultado de la comparación indica si los
dos punteros direccionan la misma ubicación de memoria.
●​ Los operadores de igualdad siguen las mismas reglas que los operadores
relacionales, pero permiten posibilidades adicionales: un puntero se puede
comparar con una expresión entera constante con valor 0 o con un puntero a
void.
3.9 Actividad 3.
3.10 Arreglos y estructuras.
Todas las variables que se han considerado hasta ahora son de tipo simple. Una
variable de tipo simple consiste de una sola caja de memoria y sólo puede contener
un valor a la vez.
Los tipos de datos estudiados, entero, real, alfabético, son considerados como datos
de tipo simple, puesto que una variable que se define con alguno de estos tipos sólo
puede almacenar un valor a la vez.

En cambio un dato de tipo estructurado, como el arreglo, puede almacenar más de


un elemento (valor) a la vez, con la condición de que todos los elementos deben ser
del mismo tipo, es decir, que se puede tener un conjunto de datos enteros, reales,
etc.

Datos:
●​ Datos estructurados: ​
Estructura de Datos es una colección de datos que se caracterizan por su
organización y las operaciones que se definen en ella. Los datos de tipo
estándar pueden ser organizados en diferentes estructuras de datos:
estáticas y dinámicas.
●​ Estructura de Datos estáticas: ​
Son aquellas en las que el espacio ocupado en memoria se define en tiempo
de compilación y no puede ser modificado durante la ejecución del programa.
Corresponden a este tipo los arreglos y registros.
●​ Estructuras de Datos Dinámicas: ​
Son aquellas en las que el espacio ocupado en memoria puede ser
modificado en tiempo de ejecución. Corresponden a este tipo las listas,
árboles y grafos. Estas estructuras no son soportadas en todos los lenguajes.
La elección de la estructura de datos idónea dependerá de la naturaleza del
problema a resolver y en menor medida, del lenguaje. Las estructuras de
datos tienen en común que un identificador, nombre, puede representar a
múltiples datos individuales.
Etapas:
Los pasos a seguir para seleccionar una estructura de datos que resuelva un
problema son:
1.​ Analizar el problema para determinar las restricciones de recursos que debe
cumplir cada posible solución.
2.​ Determinar las operaciones básicas que se deben soportar y cuantificar las
restricciones de recursos para cada operación. Ejemplos de operaciones
básicas incluyen inserción de unos datos en la estructura de datos.
3.​ Seleccionar la estructura de datos que cumple mejor los requisitos o
requerimientos.
Este método de tres etapas para la selección de una estructura de datos es una
vista centrada en los datos. Primero, se diseñan los datos y las operaciones que se
realizan sobre ellos, a continuación viene la representación de esos datos y las
operaciones que se realizan sobre ellos, a continuación viene la representación de
esos datos y por último viene la implementación de esa representación. Algunas
consideraciones importantes para la elección de la estructura de datos adecuada,
son:
1.​ ¿Todos los datos se insertan en la estructura de datos al principio o se
entremezclan con otras operaciones?
2.​ ¿Se pueden eliminar datos?
3.​ ¿Los datos se procesan en un orden bien definido o se permite el acceso
aleatorio?
Arreglos:

Un arreglo (array) es una colección de datos del mismo tipo, que se almacenan en
posiciones consecutivas de memoria y reciben un nombre común. Para referirse a
un determinado elemento de un arreglo se deberá utilizar un índice, que especifique
su posición relativa en el arreglo es una colección finita, homogénea y ordenada de
elementos.

1.​ Finita: ​
Todo arreglo tiene un límite; es decir, debe determinarse cuál será el número
máximo de elementos que podrán formar parte del arreglo.
2.​ Homogénea: ​
Todos los elementos del arreglo deben ser del mismo tipo.
3.​ Ordenada:​
Se puede determinar cuál es el primer elemento, el segundo, el tercero y el
enésimo elemento.
Clasificación:

Los arreglos se clasifican de acuerdo con el número de dimensiones que tienen. Así
tienen los:
1.​ Unidimensionales (vectores).
2.​ Bidimensionales (tablas o matrices).
3.​ Multidimensionales (tres o más dimensiones).
Después que aprendas a usar arreglos verás cómo se ahorra instrucciones porque
es fácil recorrer toda la lista de notas con unas pocas instrucciones. En el caso
anterior, cuando el acceso a la información es secuencial, sólo se puede acceder a
un elemento buscando desde el principio de la lista, y esto es algo lento.

Lo que se necesita es una estructura de acceso directo que permita almacenar y


recuperar los datos directamente especificando su posición en la estructura, de esa
manera se requerirá el mismo tiempo para acceder al elemento de la posición 100
que el de la posición 5.

También preferimos que esta estructura se almacene en memoria principal para que
su almacenaje y recuperación sea más rápida. Es por ello que existen los arreglos,
que están organizados en una secuencia de elementos.

●​ Arreglos Unidimensionales:​
Están formados por un conjunto de elementos de un mismo tipo de datos que
se almacenan bajo un mismo nombre y se diferencian por la posición que
tiene cada elemento dentro del arreglo de datos. Al declarar un arreglo, se
debe inicializar sus elementos antes de utilizarlos Para acceder a valores
específicos del arreglo, use un valor de índice que apunte al elemento
deseado. Los programas en C++ siempre indican el primer elemento de un
arreglo con 0.

3.11 Sentencias de selección.

Las sentencias de selección (programación). También llamadas de control de flujo,


permiten decidir entre distintos cursos de acción en función de ciertos valores.
Existen tres tipos de estas sentencias de selección:
1.​ If-else.
2.​ Else if.
3.​ Switch.
A continuación, detallaremos las características y funcionamiento de cada una de
ellas. Es importante que a través de los ejemplos que vamos a ver, puedas
determinar en qué circunstancias utilizar.

Sentencia if-else:

En su forma abreviada, cuando no existe la cláusula else, esta sentencia permite


escoger entre ejecutar o no una sentencia, en función del resultado de una
expresión lógica. En su forma ampliada, cuando la cláusula else está presente,
permite escoger entre dos opciones alternativas.

●​ Descripción:​
<Condición> debe ser una expresión relacional que devuelve un valor lógico,
es decir, un bool y estar obligatoriamente entre paréntesis. Pueden
declararse variables dentro de la <Condición>. El ámbito de la variable val,
incluye toda la sentencia if, incluyendo, en su caso, el bloque <sentencia2>
de else. La cláusula else es opcional, pero no puede haber sentencias entre
el if y else. En resumen, un condicional if-else es una estructura que nos
posibilita definir las acciones que se deben llevar a cabo si se cumple cierta
condición y también determinar las acciones que se deben ejecutar en caso
de que no se cumpla; generando así una separación o bifurcación.

Sentencia else-if:

Else if, como su nombre lo sugiere, es una combinación de if y else. Del mismo
modo que else, extiende una sentencia if para ejecutar una sentencia if para
ejecutar una sentencia diferente en caso que la expresión if original se evalúe como
false.
Sin embargo, a diferencia de else, esa expresión alternativa sólo se ejecutará si la
expresión condicional del else if se evalúa como true. Puede haber varios else if
dentro de la misma sentencia if. La primera expresión else if (si hay alguna) que se
evalúe como true sería ejecutada. En PHP también se puede escribir “else if” (en
dos palabras) y el comportamiento sería idéntico al de “else if” (en una sola palabra).
La sentencia else if es ejecutada solamente si la expresión if precedente y
cualquiera de las expresiones else if precedentes son evaluadas como false y la
expresión else if actual se evalúa como true.

Sentencia switch:

Esta sentencia sirve para crear muchas condiciones de igualdad. Es útil por ejemplo
para la creación de un menú. Imagina que tenemos un menú con 4 opciones. Pues
con el switch podemos hacer que dependiendo de la opción que elijas se ejecute un
código u otro.

Se trata de una sentencia condicional multi-salida en la que las decisiones se toman


en función de un valor numérico entero de entre una serie de opciones posibles.
Puede existir una cláusula por defecto o bien no adoptarse ninguna acción.

La estructura selecciona entre varias posibilidades, dependiendo del valor de la


expresión. Cuando en la estructura si (if) todas las condiciones utilizan la igualdad
de una variable determinada con constantes predefinidas, se puede utilizar la
instrucción según sea (switch) en dicha instrucción existen más de dos opciones.

La estructura según sea, evalúa una expresión que puede tomar n valores distintos;
según con cuál de estos valores coinciden, se ejecutarán ciertas acciones, es decir,
el programa o algoritmo seguirá un determinado camino entre los n posibles. Dicha
expresión sólo acepta valores enteros o caracteres para entrar a la opción y el
operador de relación es el igual.

La sentencia switch comprueba cuando una expresión <expresion> entre paréntesis


(que se traduce en un valor numérico) coincide con alguna de una serie de valores
enteros constantes y diferentes (<constX>). En cuyo caso, se ejecuta un bloque de
código específico <sentencia>.

En caso de estar presente la cláusula opcional default y no existir concordancia con


ninguno de los valores anteriores, se ejecuta una sentencia por defecto
(<sentenciaD>).

La sentencia switch es similar a una serie de sentencias if en la misma expresión.


En muchas ocasiones, es posible que se quiera comparar la misma variable (o
expresión) con muchos valores diferentes y ejecutar una parte de código distinta
dependiendo de a qué valor es igual. Para esto es exactamente la expresión switch.
Después de ejecutar este fragmento de código, es probable que gran parte de lo
que hay aquí tenga sentido para ti. En la primera línea de la sentencia switch,
tenemos el identificador switch, seguido de una variable rodeada de paréntesis.
Cada caso incluye un posible valor para la variable. Las estructuras switch se
ejecutan un poco diferente que las sentencias If/Else if/Else.

3.12 Actividad 4.
3.13 Modificadores.
Los modificadores son elementos del lenguaje que se colocan delante de la
definición de variables locales, datos miembro, métodos o clases que alteran o
condicionan el significado del elemento.

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 entradas
futuras se describirán otros modificadores como final, abstract o synchronized.

Los modificadores de acceso, son aquellos que permiten limitar o generalizar el


acceso a los componentes de una clase o a la clase en sí misma. 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 miembro de la clase (ya sea atributo o método).

Modificadores:
●​ public: obtiene acceso al tipo o miembro, cualquier otro código del mismo
ensamblado o de otro ensamblado, que haga referencia a éste. El nivel de
accesibilidad de los miembros públicos de un tipo, se controla mediante el
nivel de accesibilidad.
●​ private: solamente el código de la misma class o struct, puede acceder al tipo
o miembro.
●​ protected: solamente el código de la misma class, o bien de una class
derivada de esa class, puede acceder al tipo.
●​ internal: puede obtener acceso al tipo o miembro cualquier código del mismo
ensamblado, pero no de un ensamblado distinto. Es decir, internal se puede
tener acceso a tipos o miembros desde el código, que forma parte de la
misma compilación.
●​ protected internal: cualquier código del ensamblado en el que se ha
declarado o desde una class derivada de otro ensamblado, puede acceder al
tipo o miembro.
●​ private protected: se puede tener acceso al tipo o miembro mediante tipos
derivados del objeto class, que se declaran dentro de su ensamblado
contenedor.
Accesibilidad:
Los miembros de clases y registros, se pueden declarar son cualquiera de los seis
tipos de acceso. Los miembros de estructura no se pueden declarar como protected,
protected internal o private protected.

Normalmente, la accesibilidad de un miembro no es mayor que la del tipo que lo


contiene. Pero un miembro public de una clase interna podría ser accesible desde
fuera del ensamblado si el miembro implementa los métodos de interfaz o invalida
los métodos. El tipo de cualquier miembro que sea un campo, propiedad o evento
debe ser al menos tan accesible como el propio miembro. El tipo devuelto y los tipos
de parámetro de cualquier método, indizador o delegado deben ser al menos tan
accesibles como el propio miembro.

Por ejemplo, no puede tener un método publicM que devuelva una clase C a menos
que C también sea public.

Tipos:

Los miembros de interfaz son public de manera predeterminada porque el propósito


de una interfaz es permitir que otros tipos accedan a una clase o estructura. Las
declaraciones de miembros de interfaz pueden incluir cualquier modificador de
acceso. Esto es muy útil para que los métodos estáticos proporcionan
implementaciones comunes necesarias para todos los implementadores de una
clase.

Los miembros de enumeración siempre son public y no se les puede aplicar ningún
modificador de acceso. Los delegados se comportan como las clases y las
estructuras. De forma predeterminada, tienen acceso internal cuando se declaran
directamente en un espacio de nombre y acceso private cuando están anidados.

Importancia:​

Los modificadores de acceso, permiten al diseñador de la clase delimitar la frontera,
lo que es estrictamente privado y “no importa” a nadie más que al diseñador,
completar o especializar el comportamiento. Con su uso, se consigue uno de los
principios básicos de la Programación, es la encapsulación: tienen un
comportamiento definido, conformado por los elementos que tienen un acceso
público, y una implementación oculta formada por los elementos.

Los otros dos modificadores, protected y acceso por defecto complementan a los
otros dos. El primero es importante cuando se utilizan relaciones de herencia entre
las clases y el segundo establece relaciones de herencia entre las clases y el
segundo establece relaciones de “confianza” entre clases afines dentro del mismo
paquete.
3.14 Implementación de métodos.
Las metodologías de implementación son un conjunto de procedimientos racionales,
que deben ser seguidos para alcanzar una serie de objetivos que rigen ya sea una
investigación científica, una exposición doctrinal o en tareas que requieren de
habilidades y conocimientos.

Existen tres métodos de implementación, utilizados por la mayoría de las empresas


de software. Es una tarea crítica y que requiere de tiempo, pero también es muy
importante para que el funcionamiento a futuro del sistema, sea adecuado y no
tenga problemas de ningún tipo.

Para reducir el tiempo y los esfuerzos y también para asegurar una correcta
implementación, las compañías intentan diferentes métodos para implementar
sistemas ERP.

Los más comunes son:


1.​ Implementación Big Bang:​
La implementación “Big Bang”, como su nombre sugiere, es una modalidad
de implementación de sistemas en un solo paso. En su momento este era el
único método de implementar software de planeación de recursos
empresariales. Con este método, todos los módulos del sistema se
implementan de forma simultánea a lo largo de toda la organización. El
abordaje “Big Bang” incrementó la complejidad del proceso de
implementación. Antes de implementar un sistema con este método los
consultores funcionales estudian todo el flujo de proceso laborales y de
negocios de la organización y demarcan los desperfectos y las áreas que
necesitan ser mejoradas. La implantación de todos los módulos a lo largo de
toda la organización, además, agobiaba a los empleados, a la dirección de la
empresa y a la compañía proveedora con muchísimas tareas que tenían que
estar listas al mismo tiempo, por lo que esto usualmente resulta en gastos
adicionales y en implementaciones inadecuadas y con demoras.
2.​ Implementación Modular:​
La implementación modular fue en su tiempo el abordaje más popular entre
los distintos métodos de implementación. De todos los métodos de
implementación ERP que existen, este abordaje resulta económico. En este,
los módulos del software de planeación de recursos empresariales se
implementan uno después del otro. Esto reduce el ámbito de la
implementación, lo que evita una sobrecarga para el personal, la dirección de
la empresa y la compañía. una vez que un módulo ha sido exitosamente
implementado se puede pasar a la implementación del módulo siguiente,
Esta metodología resulta muy adecuada para organizaciones que no
compartan muchos procesos entre sus distintos departamentos o procesos
comerciales. Después de la implementación de todos los módulos llega el
momento de la integración de los mismos entre sí, lo que ubica a todos los
procesos y departamentos de la organización bajo un solo software.
3.​ Implementación Por Procesos:​
La implementación por procesos es la metodología que resulta más
adecuada para empresas con procesos comerciales muy importantes,
incluyendo múltiples unidades de negocios. En este abordaje la
implementación se dedica a un proceso comercial por vez y llega a una
implementación completa. Procesos típicos son “de compras a pagos”, “de
ventas a cobro”, etc. La implementación en varias etapas, que cubren cada
una todo un ciclo de negocios se obtiene lo mejor de los dos métodos
anteriores, se evita el sobreesfuerzo de la implementación “Big Bang” y no
se truncan ciclos de negocios que ya estaban informatizados cómo en la
implementación “Modular”. Si la empresa ya tiene un sistema integrado en
funcionamiento, el primer proceso a implementar estará determinado por las
funciones que deben reemplazarse del viejo sistema, de modo que la
empresa pueda continuar operando sin conflictos.
4.​ Implementación:​
Una vez se ha desarrollado la evaluación del método ideado (una de las
herramientas más importantes de evaluación corresponde al muestreo de
tiempos) y se ha determinado que este representa la optimización respecto a
costos y beneficios que el proceso requiere, se procede a abordar la fase
inicial del estudio de métodos, es decir, la fase de definición, implementación.
La fase de implementación representa uno de los más grandes retos del
especialista encargado del estudio de métodos, pues de sus dotes
personales depende el éxito en la puesta en marcha de las mejoras definidas.
Es importante valorar la cooperación activa de la dirección, los sindicatos y
los supervisores, además de la capacidad personal de explicar de manera
clara y sencilla lo que propone. Es importante que previo a la implantación de
un nuevo método, se instruya tanto a directores, supervisores y empleados
acerca de lo que significa un estudio del trabajo, dado que la gente estará
más dispuesta a aceptar la idea de un cambio, si sabe y comprende lo que va
ocurriendo en el proceso de estudio.
3.15 Actividad 5.
3.16 Uso de objetos.
La programación orientada a objetos se basa en el concepto de crear un modelo del
problema de destino en sus programas. La programación orientada a objetos
disminuye los errores y promociona la reutilización del código. Python es un
lenguaje orientado a objetos. La Programación Orientada a Objetos (POO) es un
paradigma de programación, es decir, un modelo o un estilo de programación que
nos da unas guías sobre cómo trabajar con él. Se basa en el concepto de clases y
objetos. Este tipo de programación se utiliza para estructurar un programa de
software y reutilizables de planos de código (clases) para crear instancias
individuales de objetos.
lenguajes secuenciales como COBOL o procedimentales como Basic o C, se
centraban más en la lógica que en los datos. Otros más modernos como java, C# y
Python, utilizan paradigmas para definir los programas, siendo la POO la más
popular.

Concepto:
Podemos entender la Programación Orientada a Objetos (POO)como una forma
especial de programar, más cercana a cómo expresaremos las cosas en al vida real
que otros tipos de programación, que permite diseñar mejor las aplicaciones,
llegando a mayores cotas de complejidad, sin que el código se vuelva inmanejable.

Al programar orientado a objetos tenemos que aprender a pensar cómo resolver los
problemas de una manera distinta a como se realizaba anteriormente, en la
programación estructurada.

Ahora tendremos que escribir nuestros programas en términos de clases, 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 los
conceptos de este tipo de programación.

Permite que el código sea reutilizable, organizado y fácil de mantener. Sigue el


principio de desarrollo de software, utilizado por programadores DRY (Don’t Repeat
Yourself), para evitar duplicar el código y crear de esta manera programas
eficientes.

Atributos:

Así como un objeto tiene un comportamiento, los objetos también pueden tener
información o atributos (hablando de objetos y no de clases porque, aunque los
métodos se definen en la clase, se llaman sobre los objetos). Cómo decíamos
antes, una persona puede tener un nombre, estatura, edad, etc. Esos son los
atributos. A los atributos se les conoce como variables de instancia (instancia se
refiere a un objeto, la instancia de una clase).

En Ruby vas a identificar los atributos en una clase porque comienzan con el
carácter @. Por ejemplo, podemos almacenar el argumento que llega en el
constructor dentro de un atributo de Person:

class Person ​
​ def initialize (name)​
​ @name = name​
end​

end
Analiza este último ejemplo con cuidado. El constructor está recibiendo un
argumento llamado name y almacenamos el valor en el atributo @name. name no
es lo mismo que @name.

Objetos:
¿Cómo se crean los programas orientados a objetos? Consistiría en hacer clases y
crear objetos a partir de estas clases. Las clases forman el modelo a partir del que
se estructuran los datos y los comportamientos.

El primer y más importante concepto de la POO es la distinción entre clase y objeto.


Una clase es una plantilla. Define de manera genérica como van a ser los objetos de
un determinado tipo.

Por ejemplo, una clase para representar a animales puede llamarse “animal” y tener
una serie de atributos, como “nombre” o “edad” (que normalmente son
propiedades), y una serie con los comportamientos que estos pueden tener, como
caminar o comer y que a su vez se implementan como métodos.

Un ejemplo sencillo de un objeto, como decíamos antes, podría ser un animal. Un


animal tiene una edad, por lo que creamos un nuevo atributo de “edad” y, además,
puede envejecer, por lo que definimos un nuevo método. datos y lógica.

Principios:

●​ Encapsulación:​
contiene toda la información importante de un objeto dentro del mismo y solo
expone la información seleccionada al mundo exterior. Permite asegurar que
la información de un objeto esté oculta para el mundo exterior.
●​ Abstracción:​
Es cuando el usuario interactúa solo con los atributos y métodos
seleccionados de un objeto, utilizando herramientas simplificadas de alto
nivel para acceder a un objeto complejo.
●​ Herencia: ​
Define relaciones jerárquicas entre clases, de forma que atributos y métodos
comunes puedan ser reutilizados. Las clases principales extienden atributos y
comportamientos a las clases secundarias.
●​ Polimorfismo:​
Consiste en diseñar objetos para compartir comportamientos, lo que nos
permite procesar objetos de diferentes maneras. Es la capacidad de
presentar la misma interfaz para diferentes formas subyacentes o tipos de
datos.
3.17 Campos, propiedades y constructores.
Una propiedad es un miembro que proporciona un mecanismo flexible para leer,
escribir o calcular el valor de un campo privado. Las propiedades se pueden usar
como si fueran miembros de datos públicos, pero en realidad son métodos
especiales denominados descriptores de acceso. Esto permite acceder fácilmente a
los datos y a la vez proporciona la seguridad y la flexibilidad de los métodos.

Cada vez que se crea una clase o struct, se llama a su constructor. Una clase o
struct, puede tener varios constructores que toman argumentos diferentes. Los
constructores permiten al programador establecer valores predeterminados, limitar
la creación de instancias y escribir código flexible y fácil de leer.

Un constructor es un método cuyo nombre es igual que el nombre de su tipo. Su


firma de método incluye solo un modificador de acceso opcional, el nombre del
método y su lista de parámetros.

Propiedades:​
Las propiedades permiten que una clase exponga una manera pública de obtener y
establecer valores, a la vez que se oculta el código de implementación o
verificación. Para devolver el valor de la propiedad se usa un descriptor de acceso
de propiedad se usa un descriptor de acceso de propiedad get, mientras que para
asignar un nuevo valor se emplea un descriptor de acceso de propiedad set.

En C# 9 y versiones posteriores, se usa un descriptor de acceso de propiedad init


para asignar un nuevo valor sólo durante la construcción del objeto. Estos
descriptores de acceso pueden tener diferentes niveles de acceso.

Las propiedades simples que no necesitan ningún código de descriptor de acceso


personalizado se pueden implementar como definiciones de cuerpos de expresión o
como propiedades implementadas automáticamente.

Los descriptores de acceso de propiedad suelen constar de instrucciones de una


sola línea que simplemente asignan o devuelven el resultado de una expresión.
Puede implementar estas propiedades como miembros con forma de expresión. Las
definiciones de cuerpos de expresión consta del símbolo => seguido de la expresión
que se va a asignar a la propiedad o a recuperar de ella.

A partir de C# 6, las propiedades de sólo lectura pueden implementar el descriptor


de acceso get como miembro con forma de expresión. En este caso, no se usan ni
la palabra clave del descriptor de acceso get ni la palabra clave return.

En el ejemplo anterior se implementa la propiedad de solo lectura name, como


miembro con forma de expresión. A partir de C# 7.0, los descriptores de acceso get
y set se pueden implementar.
Constructores:
Cada vez que se crea una clase o struct, se llama a constructor. Una clase o struct
puede tener varios constructores que toman argumentos diferentes. Una clase o
struct también puede tener un constructor estático, que inicializa los miembros
estáticos del tipo.

Los constructores permiten al programador establecer valores predeterminados,


limitar la creación de instancias y escribir código flexible y fácil de leer. Un
constructor es un método cuyo nombre es igual que el nombre de su tipo. Su firma
método incluye solo un modificador de acceso opcional, el nombre del método y su
lista de parámetros, no incluye un tipo de valor devuelto.

En la imagen anterior se muestra el constructor de una clase denominada Person.


Si un constructor puede implementarse como una instrucción única, puede usar una
definición del cuerpo de expresión.

Usos y empleos:

Cuando se crea una instancia de una clase o estructura, se llama a su constructor.


Los constructores tienen el mismo nombre que la class o el struct y suelen inicializar
los miembros de datos del nuevo objeto. Un ejemplo es una calse denominada Taxi,
que se define mediante un constructor simple. Luego, se crea una instancia de la
clase del operador new.

El constructor Taxi se invoca con el operador new inmediatamente después de


asignar memoria para el nuevo objeto. Un constructor que no toma ningún
parámetro se denomina constructor sin parámetros. Estos se invocan cada vez que
se crea una instancia de un objeto mediante el operador new y no se especifica
ningún argumento en new.

A menos que la clase sea static, las clases sin constructores tienen un constructor
público sin parámetros por el compilador de C# con el fin de habilitar la creación de
instancias de clase.

Puede impedir que se cree una instancia de una clase convirtiendo el constructor en
privado, de la manera siguiente:
Los constructores para tipos de estructura, se asemejan a los constructores de
clase, pero structs no pueden contener un constructor sin parámetros explícito
porque el compilador proporciona uno automáticamente.

3.19 Clases estáticas.


Static es una palabra clave que se puede utilizar con clases, variables, métodos y
bloques para crear miembros estáticos. Los miembros estáticos pertenecen a clases
en lugar de instancias específicas, lo que significa que si los miembros se
establecen estáticamente.

Los miembros estáticos pueden ser:


●​ Variable estática.
●​ Método estático.
●​ Bloque estático o bloque de inicialización estática.
●​ Clase estática.
En Java, las clases estáticas son básicamente una forma de agrupar clases. Java
no permite la creación de clases estáticas de nivel superior; sólo clases anidadas
(internas). Por lo tanto, las clases estáticas también se llaman clases internas
estáticas o clases anidadas estáticas.

Puntos:
Puntos a tener en cuenta al escribir clases estáticas:
●​ Solo puede ser una clase anidada o una clase interna.
●​ Puede tener cualquier modificador de acceso (privado, protegido, público o
predeterminado) como cualquier otro miembro estático.
●​ Sólo puede acceder a los miembros estáticos de sus clases cerradas. No
puede acceder directamente a los miembros no estáticos de sus clases
cerradas.
●​ Sólo puede interactuar con miembros no estáticos a través de objetos de sus
clases cerradas.
Beneficios de las clases estáticas en Java:
●​ Podemos definir clases relacionadas o clases de ayuda dentro de una clase
haciendas estáticas.
●​ Puede acceder a los miembros privados de una clase cerrada a través de
referencias de objetos.
●​ Proporciona un buen espacio de nombres para clases anidadas. Si la clase
encapsulada se actualiza, también podemos actualizar la clase estática en el
mismo lugar.
Ejemplo:
Para comprender cómo funciona una variable estática analicemos el siguiente
ejemplo donde se inicializa una variable estática dentro de una función y,
posteriormente, se vuelve a llamar dicha función:

Salida:

Como puedes darte cuenta, aunque la función termina (es eliminada de la pila de
llamadas), cuando vuelve a ser ejecutada, la inicialización de la variable estática es
simplemente ignorada.

Intenta quitar las diagonales del comentario en la función principal y recompila el


programa. Cuando intentas llamar a la variable estática fuera de la función en que
fue declarada, el compilador no puede localizarla a pesar de que técnicamente dicha
variable sigue existiendo. Con esto podemos concluir que, aunque en C el tiempo de
vida de una variable estática es el tiempo de ejecución del programa, las reglas de
ámbitos se siguen aplicando sobre ellas.

¿Dónde están?
La razón porque estas variables siguen siendo “recordadas” por el programa a pesar
de que las funciones donde fueron declaradas terminaron es porque no fueron
almacenadas en la pila de llamadas como los demás datos de dichas funciones.

En su lugar, dependiendo de cómo fueron inicializadas, son almacenadas en los


segmentos .DATA (cuando son inicializadas con un valor diferente a 0) y .BSS
(cuando son inicializadas con el valor 0). Cuando el programa es compilado, el
espacio para las variables estáticas es reservado, a diferencia de otras variables.

●​ Funciones estáticas en C:​


Si una función es declarada como estática, solamente podrá accederse a ella
desde el archivo en que fue declarada y su identificador podrá reutilizarse en
otros archivos de código fuente sin problemas. Esto nos permite encapsular
información en C.
●​ Entidades estáticas en C++:​
Cómo sabes, C++ es un lenguaje orientado a objetos, cuando un miembro de
una clase es declarado como estático, significa que, sin importar la cantidad
de instancias que hagamos de dicha clase, solamente existirá una copia del
miembro estático que será compartida por todos los objetos de la clase. Los
métodos estáticos pueden ser llamados sin haber creado una instancia
(objeto) de la clase a la que pertenecen si usamos el operador de resolución
de ámbito.
Pros y contras:
Pros de las variables estáticas ¿Por qué utilizar variables estáticas?
●​ Son muchas las razones por las que podrías usarlas.
●​ Quieres mantener el valor de una variable local a una función a pesar de que
esta haya salido de la pila de llamadas.
●​ Necesitas encapsular información en C.
●​ Quieres tener una sola copia de cuna variable perteneciente a una clase y
que esta sea compartida por todos los objetos.
●​ Necesitas ejecutar el método de una clase sin necesidad de crear instancias.
●​ El verdadero reto es saber identificar los casos en los que estrictamente sea
necesario utilizarlas en lugar de otras alternativas más eficientes.
Contras de las variables estáticas ¿Por qué no utilizar variables estáticas?
●​ En lenguajes como C se vuelve confuso identificar el flujo del programa.
●​ Podríamos estar confundiendo su uso con el de otra alternativa más eficiente
para la situación en que se trabaje, como un singleton, por ejemplo.
●​ Vuelven más complicado el proceso (mensajes) entre bloques estáticos y
bloques no estáticos de nuestros programas.
●​ Violan muchas de las mejores características del paradigma POO.
3.20 Herencia de clases.
La herencia es una de las características fundamentales de la Programación
Orientada a Objetos, mediante la herencia podemos definir una clase a partir de otra
ya existente, la clase nueva se llama clase derivada o subclase y la clase existente
se llama clase base o superclase.

Una clase heredada no es más que una Clase que hereda de otra y que al heredar
se constituye de todos los atributos y métodos de la misma.

Es decir, si heredamos nuestra Clase Coche a otra Clase (Por ejemplo: Clase
Coche_Carreras), esta nueva clase tendrá todas las características de la Clase
Coche, más los atributos o métodos que queremos añadir a esta nueva clase.

Finalidad:
La finalidad de la herencia es:
●​ Extender la funcionalidad de la clase base: en la clase derivada se pueden
añadir atributos y métodos nuevos.
●​ Especializar el comportamiento de la clase base: en la clase derivada se
pueden modificar (sobreescribir, override) los métodos heredados para
adaptarlos a sus necesidades.
●​ La herencia permite la reutilización del código, ya que evita tener que
reescribir de nuevo una clase existente cuando necesitamos ampliarla en
cualquier sentido. Todas las clases derivadas pueden utilizar el código de la
clase base sin tener que volver a definirlo en cada una de ellas.

Reutilización de código:
El código se escribe una vez en la clase base y se utiliza en todas las clases
derivadas.

Clase base:
Una clase base puede serlo de tantas derivadas como se desee: Un solo padre,
varios hijos.
●​ Herencia múltiple en Java. No soporta la herencia múltiple. Una clase
derivada sólo puede tener una clase base.
●​ Diagrama UML de herencia múltiple no permitida en Java.
●​ La herencia expresa una relación “ES UN/UNA” entre la clase derivada y la
clase base, esto significa que un objeto de una clase derivada es también un
objeto de su clase base. Al contrario NO es cierto, un objeto de la clase base
no es un objeto de la clase derivada.
Por ejemplo, supongamos una clase vehículo como la clase base de una clase
coche. Podemos decir que un coche es un vehículo, pero un vehículo no siempre es
un coche, puede ser una moto, un camión, etc. Un objeto de una clase derivada es
a su vez un objeto de su clase base, por lo tanto se puede utilizar en cualquier lugar
donde aparezca un objeto de la clase base. Si esto no fuese posible entonces la
herencia no está bien planteada.

Ejemplo:

Ejemplo de herencia bien planteada:

A partir de una clase persona que tiene como atributos el nif y el nombre, podemos
obtener una clase derivada alumno. Un alumno es una persona que tendrá como
atributos nif, nombre y curso.

Ejemplo de herencia mal planteada:

Supongamos una clase de Punto que tiene como atributos coordenada X y


coordenada Y. Se puede crear una clase Línea a partir de la clase Punto.
Simplificando mucho para este ejemplo, podemos considerar una línea como un
punto de origen y una longitud.

Una línea NO ES un Punto. En este caso no se debe utilizar la herencia.

Características:

Una clase derivada a su vez puede ser clase base en un nuevo proceso de
derivación, formando de esta manera una Jerarquía de Clases.

●​ Las clases más generales se sitúan en lo más alto de la jerarquía. Cuánto


más arriba en la jerarquía, menor nivel de detalle.
●​ Cada clase derivada debe implementar únicamente lo que la distingue de su
clase base.
●​ En Java todas las clases derivan directa o indirectamente de la clase Object.
●​ Object es la clase base de toda la jerarquía de clases Java.
●​ Todos los objetos en un programa Java son Object.
Características de las clases derivadas:
●​ Una clase derivada hereda de la clase base sus componentes (atributos y
métodos).
●​ Los constructores no se heredan. Las clases derivadas deberán implementar
sus propios constructores.
●​ Una clase derivada puede acceder a los miembros públicos y protegidos de
la clase base como si fuesen miembros propios. Una clase derivada no tiene
acceso a los miembros privados de la clase base. Deberá acceder a través
de métodos heredados de la clase base.
●​ Si necesita tener acceso directo a los miembros privados de la clase base se
deben declarar protected en lugar de private en la clase base.
●​ Una clase derivada puede añadir a los miembros heredados, sus propios
atributos y métodos (extender la funcionalidad de la clase).
●​ También puede modificar los métodos heredados (especializar el
comportamiento de la clase base).
●​ Una clase derivada puede, a su vez, ser una clase base, dando lugar a una
jerarquía de clases.

3.21 Actividad 7
4.- Base de datos.
4.1 Introducción a los sistemas de bases de datos.
Un sistema de bases de datos es básicamente un sistema computarizado para
llevar registros. Es posible considerar a la propia base de datos como una especie
de armario electrónico para archivar; es decir, es un depósito o contenedor de una
colección de archivos de datos computarizados. Los usuarios del sistema pueden
realizar una variedad de operaciones sobre dichos archivos.

Por ejemplo:

1.​ Segregar nuevos archivos vacíos a la base de datos.


2.​ Insertar datos dentro de los archivos existentes.
3.​ Recuperar datos de los archivos existentes.
4.​ Modificar datos en archivos existentes.
5.​ Eliminar datos de los archivos existentes.
6.​ Eliminar archivos existentes de la base de datos.

Datos:
Los sistemas de bases de datos están disponibles en máquinas que van desde las
computadoras personales más pequeñas hasta las mainframes más grandes. Sobra
decir que las facilidades que proporciona un sistema están determinadas hasta
cierto punto por el tamaño y potencia de la máquina subyacente.

En particular, los sistemas que se encuentran en máquinas (“Sistemas grandes”)


tienden a ser multiusuario, mientras que los que se ejecutan en máquinas pequeñas
(“Sistemas pequeños”) tienden a ser de un solo usuario. Un sistema de un solo
usuario es aquel en el que sólo un usuario puede tener acceso a la base de datos
en un momento dado; un sistema multiusuario es aquel en el cual múltiples usuarios
pueden tener acceso simultáneo a la base de datos.

Tipos:

●​ Tipos de bases de datos: ​


Hay muchos tipos de de bases de datos que pueden estar alojadas en
servidores de respaldo Linux o cualquier otro tipo de infraestructura TI. La
mejor opción para una organización específica depende de cómo la
organización pretende utilizar los datos.
●​ Bases de datos relacionales:​
Las bases de datos relacionales se volvieron dominantes en la década de
1980. Los elementos de una base de datos relacional se organizan como un
conjunto de tablas con columnas y filas.
●​ Bases de datos orientadas a objetos:​
La información en una base de datos orientada a objetos se representa en
forma de objetos, como en la programación orientada a objetos.
●​ Bases de datos distribuidas:​
Una base de datos distribuida consta de dos o más archivos ubicados en
diferentes sitios. La base de datos puede almacenarse en varias
computadoras, ubicarse en la misma ubicación física.
●​ Almacenes de datos:​
Un repositorio central de datos, un almacén de datos es un tipo de base de
datos diseñada específicamente para consultas y análisis rápidos.
●​ Bases de datos NoSQL:​
Una base de datos NoSQL o no relacional, permite almacenar y manipular
datos no estructurados y semiestructurados (a diferencia de una base de
datos relacional, que define cómo deben componerse todos los datos
insertados en la base de datos).
●​ Bases de datos de gráficos:​
Una base de datos de gráficos almacena datos en términos de entidades y
las relaciones entre entidades.
●​ Bases de datos OLTP:​
Una base de datos OLTP es una base de datos analítica rápida diseñada
para un gran número de transacciones realizadas por múltiples usuarios.

¿Para qué sirven?


¿Para qué sirven las bases de datos?

En los servicios de almacenamiento virtual o servidores físicos, los datos, dentro de


los tipos más comunes de bases de datos en funcionamiento actualmente, se
modelan típicamente en filas y columnas en una serie de tablas para que el
procesamiento y la consulta de datos sean eficientes. A continuación, se puede
acceder, gestionar, modificar, actualizar, controlar y organizar fácilmente los datos.
La mayoría de las bases utilizan un lenguaje de consulta estructurado (SQL) para
escribir y consultar datos.

Diferencia:
Un sistema de información obtiene sus datos a través de los siguientes procesos:
●​ Entrada de información:​
Proceso mediante el cual el sistema de información toma los datos que se
requieren para procesar la información desde entradas manuales o
automáticas.
●​ Almacenamiento de información:​
Es una de las actividades o capacidades más importantes que tiene un
sistema. A través de esta propiedad el sistema puede recordar la información
guardada en las sesiones o procesos anteriores.
●​ Procesamiento de información:​
Es la capacidad del sistema de información para efectuar cálculos de acuerdo
con la secuencia de operaciones preestablecidas. Estos cálculos pueden
efectuarse con datos introducidos recientemente en el sistema o bien con
datos que están almacenados. Estas características de los sistemas de
información en las empresas permiten la transformación de datos fuente en
información que puede ser utilizada para la toma de decisiones.

4.2 Sistemas de bases de datos y sus aplicaciones.


Una base de datos es una colección de información organizada de forma que un
programa de ordenador pueda seleccionar rápidamente los fragmentos de datos
que necesite. Una base de datos es un sistema de archivos electrónico.

Las bases de datos tradicionales se organizan por campos, registros y archivos. Un


campo es una pieza única de información; un registro es un sistema completo de
campos; y un archivo es una colección de registros. Por ejemplo, una gubia de
teléfono es análoga a un archivo. Contiene una lista de registros, cada uno de los
cuales consiste en tres campos: nombre, dirección y número de teléfono.

Su utilidad es, por lo tanto, práctica, pudiendo estar orientada a distintos fines,
determinados en función de su diseño, pero por lo general se utilizan para realizar
acciones como buscar, ordenar.

Datos:
Las aplicaciones de bases de datos son programas de software diseñads para
recoger gestionar y difundir información de manera eficiente. Se utilizan bases de
datos en cualquier lugar donde sea necesario almacenar información. Los ejemplos
más comunes de uso de las bases de datos incluyen sistemas bancarios,
aplicaciones industriales, registros gubernamentales.

Los usos modernos de las bases de datos abarcan redes sociales, computación
móvil, aplicaciones de análisis de datos y la nube. Estos tipos de aplicaciones han
influido en el crecimiento de nuevos tipos de bases de datos.

Las bases de datos se caracterizan por el tipo de datos que almacenan, la forma en
que lo hacen y el método utilizado para acceder a su información. Entre todos los
tipos tenemos bases de datos relacionales, en memoria, jerárquicas, virtualizadas,
en columnas gráficas, de objetos, distribuidas, de transmisión, de series de tiempo y
en la nube.

Las bases de datos también pueden clasificarse por su función o el sector donde se
usan y podemos tener bases de datos personales, comerciales, de usuario final,
cadenas de bloques, operacionales y de red.

Etapas:
Las siguientes son algunas de las aplicaciones del software de base de datos en
diferentes industrias:
1.​ Banco:​
En el sector bancario, el DBMS se utiliza para almacenar información del
cliente, actividades de la cuenta, desembolsos, créditos e hipotecas.
2.​ Líneas aéreas: ​
La información de reservas y programación de vuelos se almacena en bases
de datos.
3.​ Educación:​
La información de los estudiantes, las inscripciones a los cursos y los
resultados se acumulan en sistemas de bases de datos.
4.​ Telecomunicación:​
Las bases de datos almacenan archivos de llamadas, facturas mensuales,
saldos retenidos y otra información relacionada con las llamadas.
Arreglos:
1.​ Economía y Finanzas: ​
DBMS almacena datos sobre bonos, transacciones y adquisiciones de
instrumentos fiscales, como acciones.
2.​ Ventas y marketing:​
La información de clientes se almacena y se accede a ella a través de bases
de datos.
3.​ Recursos humanos:​
Los registros sobre los trabajadores, las remuneraciones, la nómina, la
deducción, la generación de salarios y más información se mantienen en los
sistemas de bases de datos.
El software de base recopila programas que permiten almacenar, reformar y extraer
datos de una base de datos. Existen varios tipos de sistemas de administración de
bases de datos.

Los términos jerárquicos, relacionales, orientados a objetos y de red denotan como


un software de administración de bases de datos organiza los datos internamente.
Puede ser un desafío para empresas basadas en datos operar DBMS requiere
experiencia interna. Además el costo, el tamaño y el rendimiento de un DBMS
varían según los requisitos.
Clasificación:
Redes de la comunicación:
Google genera ventas por medio de la publicidad de sus productos u ofertas. Los
anuncios contienen por norma general un sistema de repuestos, como una tarjeta
de respuesta de negocios o un número gratuito, se confecciona la base de datos a
partir de esas respuestas, en el caso de servicios comerciales hacen uso de Google.

También Google es una base de datos que almacena información de todo tipo y que
con solo ponerle en el buscador lo que deseemos nos da como resultado varias
opciones, ademá de que ayuda en el ámbito educativo, ya que muchos estudiantes
acuden a él por su gran capacidad de almacenamiento de datos, ya que no solo se
limita a un resultado sino que brinda una gran cantidad de ellos.

4.3 Actividad 1.
4.4 Sistemas de bases de datos frente a los sistemas de archivos.
En el entorno del mercado actual, la competitividad y la rapidez de maniobra de una
empresa son imprescindibles para su éxito. Para conseguirlo existe cada vez una
mayor demanda de datos y, por tanto, más necesidad de gestionarlos. Esta
demanda siempre ha estado presente en empresas y sociedades, pero en estos
años se ha disparado.

En informática se conoce como dato a cualquier elemento informativo que tenga


relevancia para un usuario. Desde su nacimiento, la informática se ha encargado de
proporcionar herramientas que faciliten la manipulación de los datos. Antes de la
aparición de las aplicaciones informáticas, las empresas tenían como únicas
herramientas de gestión de datos los ficheros con cajones, carpetas y fichas de
cartón.

Informática:
Pero la propia informática ha adaptado sus herramientas para que los elementos
que el usuario utiliza en cuanto a manejo de datos se parezcan a los manuales. Por
eso se sigue hablando de ficheros, formularios, carpetas, directorios, etc.
La clientela fundamental del profesional informático es la empresa. La empresa se
puede entender como un sistema de información formado por diversos objetos.

Los sistemas de información actuales se basan en bases de datos (BD) y sistemas


de bases de datos (SGBD) que se han convertido en elementos imprescindibles de
la vida cotidiana de la sociedad moderna.

Predecesores:
Los predecesores de los sistemas gestores de bases de datos fueron los sistemas
de archivos tradicionales.
●​ Archivos tradicionales:​
Consiste en almacenar los datos en archivos individuales, exclusivos para
cada aplicación en particular. En este sistema los datos pueden ser
redundantes (repetidos innecesariamente).
●​ Sistemas de archivos. ​
Funcionan como una interfaz entre el sistema operativo y los dispositivos que
estén conectados a la máquina y sean internos o externos, como por
ejemplo, una memoria USB. Dentro de sus funcionalidades se encuentra la
asignación de espacio a archivos y directorios, la gestión del espacio libre del
equipo, el journaling o sistema para implementar transacciones. Otra de sus
características es que funciona como un soporte para los archivos dispersos,
las cuotas de disco y la ampliación del sistema de archivo. Además, estos
sistemas le ofrecen a los archivos características como:
a.​ Convenciones para nombrarlos:​
Es de vital importancia para mantener la organización de los datos y
las opciones específicas dependen de cada sistema operativo.
b.​ Atributos de archivo: ​
Se refiere a las características de un archivo o directorio, tales como
los nombres de archivos, su tamaño el usuario propietario, los
permisos de acceso y los enlaces.
c.​ Control de acceso:​
Permite establecer el tipo de derecho o permiso con los que contará
un determinado usuario.
d.​ Base de datos:​
Es un almacenamiento de datos formalmente definido, controlado
centralmente para intentar servir a múltiples y diferentes aplicaciones.
La base de datos es una fuente de datos que son compartidos por
numerosos usuarios para diversas aplicaciones. Así, en un sistema de
archivos tradicional la información está dispersa en varios ficheros de
datos y existe un cierto número de programas que los recuperan y
agrupan. Aunque los sistemas de ficheros o archivos supusieron un
gran avance sobre los sistemas manuales.
Tipos de sistema y archivo:
Aunque usualmente se hace referencia a los sistemas de archivo de los sistemas
operativos, también pueden estar enfocados en discos, red o con algún propósito
especial. Respecto a los sistemas de archivo en los sistemas operativos, cada uno
cuenta con uno o más gestores de almacenamiento y dependerá de las
necesidades del usuario, así por ejemplo:

●​ Sistemas de archivos Linux: ​


Linux es capaz de soportar un gran número de sistemas de ficheros que
indican la manera en la que se controlan los archivos dentro de las
particiones.
●​ Sistemas de archivos en Windows:​
El sistema operativo hace uso de ciertos gestores de archivos con el objetivo
de organizar los ficheros del sistema.

4.5 Arquitectura de los sistemas de bases de datos.


Arquitectura:
Para trabajar con nuestras BD, los SGBD necesitan conocer su estructura (qué
entidades tipo habrá, qué atributos tendrán, etc). Los SGBD necesitan que les
demos una descripción o definición de la BD. Esta descripción recibe el nombre de
esquema de la BD y los SGBD la tendrán continuamente a su alcance.

El esquema de la BD es un elemento fundamental de la arquitectura de un SGBD


que permite independizar el SGBD de la BD; de este modo, se puede cambiar el
diseño de la BD (su esquema) sin tener que hacer ningún cambio en el SGBD.

Existen dos niveles de representación informática; el nivel lógico y el físico.

El nivel lógico nos oculta los detalles de cómo se almacenan los datos, cómo se
mantienen y cómo se almacenan los datos, cómo se mantienen y cómo se accede
físicamente a ellos. En este nivel sólo se habla de entidades, atributos y reglas de
integridad.

Por cuestiones de rendimiento, nos podrá interesar describir elementos de nivel


físico, por ejemplo, que índices tendremos y qué características presentan, cómo y
dónde (en qué espacio físico) queremos que se agrupen físicamente los registros,
de qué tamaño deben ser las páginas, etc.

De acuerdo con la arquitectura ANSI/SPARC, debía haber tres niveles de esquemas


(tres niveles de abstracción). La idea básica de ANSI/SPARC consistía en
descomponer el nivel lógico en dos: el nivel lógico en dos: el nivel externo y el nivel
conceptual. Denominamos nivel interno lo que aquí hemos denominado nivel físico.

ANSI/SPARC:
De este modo, de acuerdo con ANSI/SPARC, había los tres niveles de esquemas
que mencionamos a continuación:
a.​ En el nivel externo se sitúan las diferentes visiones lógicas que los procesos
usuarios (programas de aplicación y usuarios directos) tendrán de las partes
de la BD que utilizarán. Estas visiones se denominan esquemas externos.
b.​ En el nivel conceptual hay una sola descripción lógica básica, única y global,
que denominamos esquema conceptual, y que sirve de referencia para el
resto de los esquemas.
c.​ En el nivel físico hay una sola descripción física, que denominamos esquema
interno.
Esquema:
El esquema conceptual corresponde a las necesidades del conjunto de la empresa
o del Sí, por lo que se escribirá de forma centralizada durante el denominado diseño
lógico de la BD.

Estos esquemas se pueden considerar redefiniciones del esquema conceptual, con


las partes y los términos que convengan para las necesidades de las aplicaciones (o
grupos de aplicaciones).

Al definir un esquema externo, se citarán sólo aquellos atributos y aquellas


entidades que interesen; los podremos redenominar, podemos definir datos
derivados o redefinir una entidad para que las aplicaciones que utilizan este
esquema externo crean que son dos, definir combinaciones de entidades para que
parezca una sola, etc.

El esquema interno o físico contendrá la descripción de la organización física de la


BD: caminos de acceso (índices, hashing, apuntadores, etc.), codificación de los
datos, gestión del espacio, tamaño de la página, etc. El esquema de nivel interno
responde a las cuestiones de rendimiento (espacio y tiempo) planteadas al hacer el
diseño físico de la BD y al ajustarlo posteriormente a las necesidades cambiantes.

Independencia:​
En este subapartado veremos cómo la arquitectura de tres niveles que acabamos
de presentar nos proporciona los dos tipos de independencia de los datos: la física y
la lógica. De acuerdo con la arquitectura ANSI/SPARC, habrá independencia física
cuando los cambios en el esquema interno no afecten al esquema conceptual ni a
los esquemas externos.

Si hay independencia física de los datos, lo único que variará al cambiar el esquema
interno son las correspondencias entre el esquema conceptual y el interno.
Obviamente, la mayoría de los cambios del esquema interno obligarán a rehacer la
BD real (la física).

Flujo de datos:
Para entender el funcionamiento de un SGBD, a continuación veremos los
principales pasos de la ejecución de una consulta sometida al SGBD por un
programa de aplicación. El proceso que se sigue es el siguiente:
a.​ Empieza con una llamada del programa al SGBD, en la que se le envía la
operación de consulta. El SGBD debe verificar la sintaxis de la operación.
b.​ Si la consulta es válida, el SGBD determina, consultando el esquema interno,
qué mecanismo debe seguir para responder. Ya sabemos que el programa
usuario a cómo se debe hacer físicamente la consulta.
c.​ Cuando ya se sabe cual es la página, el SGBD comprobará, si por suerte
esta página ya se encuentra en aquel momento en el área de los buffers (tal
vez como resultado de una consulta anterior de este usuario o de otro).
d.​ Ahora, la página deseada ya está en la memoria principal. El SGBD extrae,
de entre los distintos registros que la página puede contener, el registro
buscado e interpreta la codificación y el resultado según lo que diga el
esquema interno.
e.​ El SGBD aplica a los datos las eventuales transformaciones lógicas que
implica el esquema externo (tal vez cortando la dirección por la derecha) y las
lleva al área de trabajo del programa.
f.​ A continuación, el SGBD retorna el control al programa y da por terminada la
ejecución de la consulta.
4.6 Actividad 2.
4.7 Conceptos básicos.
Bases de datos:
Una base de datos es un conjunto de datos que están organizados para un uso
determinado y el conjunto de los programas que permiten gestionar estos datos es
lo que se denomina Sistema Gestor de Bases de Datos.

Casi todos los sistemas de gestión de base de datos modernos almacenan y tratan
la información utilizando el modelo de gestión de bases de datos relacional. En un
sistema de base de datos se organizan en tablas.

Las tablas almacenan información sobre un tema como pueden ser los clientes de
una empresa, o los pedidos realizados por cada uno de ellos; las tablas se
relacionan de forma que a partir de los datos de la tabla de clientes de una empresa,
o los pedidos realizados por cada uno de ellos; las tablas se relacionan de forma
que a partir de los datos de la tabla de clientes podamos obtener información sobre
los pedidos de estos y viceversa.

Tablas:
Una tabla de datos es un objeto que se define y utiliza para almacenar datos. Una
tabla contiene información sobre un tema o asunto particular, pueden ser, como se
ha visto antes, clientes o pedidos.

Las tablas contienen columnas/campos que almacenan los diferentes datos como el
código del cliente, nombre del cliente, dirección, etc. Todos los valores de una
columna determinada tienen el mismo tipo de dato. Define el conjunto de valores
que se podrán introducir en la columna.

Los tipos de datos vienen predefinidos y pueden variar de un sistema de base de


datos a otro pero suelen ser muy parecidos. Por ejemplo en el programa de Acces
tenemos el tipo entero que representa números sin decimales tanto positivos como
negativos hasta un cierto valor.
A parte de estos valores, en una columna podemos encontrar un valor especial, el
valor nulo (NULL) que indica que en esa fila, esa columna no contiene ningún valor.
Y evidentemente no es lo mismo que en un campo se encuentre el valor 0 (cero) a
que esté el valor NULL como veremos más adelante.

Nombre:
En una tabla no puede haber dos columnas con el mismo nombre pero ese nombre
si se puede utilizar en otra tabla. Normalmente todas las tablas deben tener una
clave principal definida. Una clave principal es una columna (o combinación de
columnas) que permite identificar de forma inequívoca cada fila de la tabla dos filas
con el mismo valor en la columna definida como clave principal.

Una clave foránea es una columna (o combinación de columnas) que contiene un


valor que hace referencia a una fila de otra tabla (en algunos casos puede ser la
misma tabla). Las claves ajenas no permiten relacionar tablas entre sí. Una tabla
tiene una única clave primaria y puede contener cero o más claves foráneas.

Columna:
Cuando se define una columna como clave principal, ninguna fila de la tabla puede
contener un valor nulo en esa columna ni tampoco se pueden repetir valores en la
columna. Cuando se define una columna como clave foránea, las finales de la tabla
pueden contener en esa columna o bien el valor nulo, o bien un valor que existe en
la otra tabla. Eso es lo que se denomina integridad referencial.

Finalmente para poder manejar la información almacenada en la base de datos


tenemos un lenguaje estándar (varía poco de un sistema gestor a otro), el lenguaje
sino que se utilizan las herramientas gráficas que nos proporciona Access para
manejar la información almacenada en la base de datos.

Consultas:
●​ Consultas:​
Es un objeto que proporciona una visión personal de los datos almacenados
en las tablas ya creadas. Existen varios tipos de consultas para seleccionar,
actualizar, borrar datos, etc.
●​ Formularios:​
Un formulario es el objeto diseñado para la introducción, visualización y
modificación de los datos de las tablas. Existen diferentes tipos de
formularios pero los que más se utilizan tienen la forma de pestañas de datos
para la introducción por ejemplo de los diferentes clientes de la tabla.
●​ Estructuras con una tabla única:​
Algunas bases de datos tienen una tabla única. Puede utilizar una tabla única
para categorías como empleados, empresas, inventario, etc. Puede definir
hasta 32,767 campos por tablas.
●​ Estructuras multitablas: ​
Una base de datos que utiliza más de una tabla puede almacenar muchos
más datos y acceder a la información de forma más eficiente. Una buena
regla para tener en cuenta es que los diferentes tipos de información deben
almacenarse en diferentes tablas.
4.8 Modelo relacional.
Un modelo relacional es una forma de organizar los datos de una base de datos en
tablas. Una base de datos que utiliza el modelo relacional se llama base de datos
relacional. Las bases de datos relacionales pueden utilizar SQL como lenguaje, pero
las bases de datos relacionales no son lo mismo que una base de datos SQL, por lo
que técnicamente no se consideran una base de datos relacional.

Utilizar el modelo relacional para organizar los datos tiene muchas ventajas y
aunque es un modelo que existe desde hace décadas, puede seguir siendo muy útil.
En el modelo relacional, los datos se relacionan con otros datos a través de la forma
en que se organizan las tablas, de manera que los datos relevantes están
vinculados entre sí.

Las bases de datos relacionales son el tipo de bases de datos actualmente más
difundido. Los motivos de este éxito son fundamentalmente dos: ofrecen sistemas
simples y eficaces para representar y manipular. El modelo relacional fue propuesto
originalmente por E.F. Codd en un ya famoso artículo de 1970. Gracias a su
coherencia y facilidad de uso, el modelo se ha convertido en los años 80 en el más
usado para la producción de DBMS.

La estructura fundamental del modelo relacional es precisamente esa “relación” es


precisamente esa “relación”, es decir una tabla bidimensional constituida por líneas
(tuplas) y columnas (atributos).

Utilización:
Dado que el modo relacional se utiliza para las bases de datos, cualquiera que
utilice una base de datos relacional está utilizando el modelo relacional. Esto incluye
a empleados como los administradores y gestores de bases de datos, asó como a
los programadores. También puede incluir a otros empleados que necesiten acceder
a los datos o a veces, incluso a los clientes.

Por ejemplo, si un cliente accede a su cuenta en un sitio web, si esa empresa utiliza
el modelo relacional para organizar los datos de los clientes, ese cliente está
utilizando el modelo relacional.

Objetivo:
El principal objetivo del modelo de datos relacional es facilitar que la base de datos
sea percibida o vista por el usuario como una estructura lógica que consiste en un
conjunto de relaciones y no como una estructura física de implementación.
Un objetivo adicional del modelo es conseguir que esta estructura lógica con la que
se percibe la base de datos sea simple y uniforme.

Con el fin de proporcionar simplicidad y uniformidad, toda la información se


representa de una única manera: mediante valores explícitos que contienen las
relaciones (no se utilizan conceptos como por ejemplo apuntadores entre las
relaciones). Con el mismo propósito, todos los valores de datos se consideran
atómicos; es decir, no es posible descomponerlos.

Ventajas:
Estas son algunas de las ventajas de utilizar el modelo relacional para crear su base
de datos:
●​ Escalable: ​
El modelo relacional es escalable cuando se utiliza para bases de datos, lo
que significa que puede utilizarse para bases de datos muy pequeñas o
grandes, y puede crecer con las necesidades de una organización. Otros
modelos de bases de datos pueden ser útiles para datos más complejos o big
data, pero para las empresas que necesitan una base de datos sencilla que
pueda crecer con su negocio.
●​ Simple: ​
Las bases de datos relacionales son bastante sencillas de configurar y
mantener, lo que constituye una de sus mayores ventajas. Algunas empresas
pueden optar por mantener su base de datos relacional en una hoja de
cálculo, que no siempre se asocia con ser una base de datos. Dado que las
bases de datos relacionales pueden crearse con tanta facilidad, son lo
suficientemente sencillas para que las organizaciones que no tienen personal
de bases de datos las utilicen.
Facilidad:
La simplicidad de las bases de datos relacionales y del modelo relacional en general
significa que suele ser bastante fácil de usar. Si se crea una base de datos
relacional en una hoja de cálculo, su uso suele ser sencillo.

Si tienes un programa de base de datos más complejo que contiene tu base de


datos relacional, normalmente el acceso a la información dentro de la base de datos
es accesible y fácil.

La forma en que la información está vinculada en una base de datos relacional


significa que es fácil acceder a toda la información relacionada con un elemento.
●​ Independencia estructural y de datos.​
Debido a que la estructura de una base de datos relacional es flexible dentro
del formato de la tabla, puede crear una base de datos relacional que tenga
independencia estructural y de datos. Esto significa que la estructura y los
datos dentro de la base de datos se pueden cambiar fácilmente sin afectar a
otras partes de la base de datos o de la aplicación.
4.9 Actividad 3.
4.10 Diagramas entidad-relación (ER).
El modelo entidad-relación es una herramienta para generar el modelo de datos que
describe la estructura y relaciones de una BD. Estos modelos al mismo tiempo están
describiendo una situación real, con elementos reales que se relacionan entre sí.
Por ejemplo: La actividad de un almacén de fruta o sin ir más lejos, la actividad de
este mismo foro.

El modelo entidad-relación es un diagrama que ayuda a generar la estructura de


datos con la que gestionar un problema o actividad real. El modelo de datos entidad
relación (ER) está basado en una percepción del mundo real consistente en objetos
básicos llamados entidades y de relaciones entre estos objetos.

Se desarrolló para facilitar el diseño de bases de datos permitiendo la especificación


de un esquema de la empresa que representa la estructura lógica completa de una
base de datos.

Modelo:
El modelo E-R (Entidad-Relación) además de entidades y relaciones representan
las uniones que los contenidos de la base de datos deben cumplir. Una unión es la
correspondencia de cardinalidades, que expresan el número de entidades.

Una vez este modelo se ha convertido en una estructura dentro de la BD, es decir,
las tablas con sus claves primarias y foráneas, mediante SQL es posible tanto
mantener el funcionamiento de la actividad alimentando la base de datos.

Por ejemplo, en el caso del almacén de fruta, la estructura de datos debería permitir
registrar pedidos de los clientes, pero también y en consecuencia, obtener las
ventas por cliente en un periodo determinado. En el caso de este foro, la estructura
de datos permite registrar nuevos usuarios, pero también conocer cuántos usuarios
hay registrados hasta la fecha, o cuántos de ellos están online en un momento
dado.

Conceptos:
Conceptos básicos:
Existen tres conceptos fundamentales que se emplean en el modelo de datos E-R
(Entidad-Relación): conjunto de entidades, conjunto de relaciones y atributos, las
cuales se definen a continuación.
●​ Entidad: ​
Se puede definir como Entidad a cualquier objeto, real o abstracto, que existe
en un contexto determinado o puede llegar a existir y del cual deseamos
guardar información. Una entidad tiene propiedades y valores que identifican
a un sujeto u objeto el cual existe y es distinguible de otros objetos, se
representan por un conjunto de atributos. Un conjunto de entidades es un
conjunto de entidades del mismo tipo que comparten las mismas
propiedades, o atributos.
●​ Atributos: ​
Los atributos son características o propiedades asociadas a la entidad que
toman valor en una instancia particular.
●​ Dominio del atributo: ​
Para cada atributo hay un conjunto de valores permitidos, llamados el
dominio, o el conjunto de valores, de ese atributo.

Un atributo, como se usa en el modelo E-R, se puede caracterizar por los siguientes
tipos de atributo:

●​ Atributos simples:​
Un atributo simple es aquel que no se puede subdividir, por ejemplo la edad y
el sexo de una persona.
●​ Atributos compuestos: ​
Un atributo compuesto, es un atributo que puede ser subdividido en otros
atributos adicionales, por ejemplo la dirección de una persona, puede
subdividirse en calle, número, código postal, etc.
●​ Atributos monovalorados y multivalorados.
●​ Atributos derivados.
Clave:
●​ Llave o clave de la relación: ​
Es el identificador único de cada tupla.
●​ Clave primaria: ​
Clave candidata que el diseñador elige de la base de datos como el medio
principal de identificar entidades dentro de un conjunto de entidades.
●​ Clave compuesta: ​
Una clave compuesta de más de un atributo.
●​ Clave candidata:​
Cualquier conjunto de atributos que puede ser elegido como clave de una
relación.
●​ Clave externa: ​
Un conjunto de atributos o un atributo, en una relación que constituyen una
clave en alguna otra relación, usada para establecer enlaces lógicos entre
relaciones.
●​ Tupla: ​
Conjunto de atributos que representan a una unidad. Valor nulo: El valor dado
a un atributo en una tupla si el atributo es inaplicable o su valor es
desconocido.
●​ Cardinalidad: ​
Número específico de ocurrencias de una entidad, asociadas con un
ocurrencia de la entidad relacionada, esto es el número máximo de instancias
de un conjunto de objetos que puede estar relacionado con una sola instancia
de otro conjunto de objetos.
●​ Relación: ​
Una relación es una asociación entre entidades, se denomina de igual modo
a una tabla que se genera a partir de la relación o asociación de dos o más
tablas o entidades existentes.

4.11 Diseño de un esquema de base de datos.


El diseño de una base de datos consiste en extraer todos los datos relevantes de un
problema, por ejemplo, saber qué datos están implicados en el proceso de
facturación de una empresa que vende articulos de informatica, o, que datos son
necesarios para llevar el control de pruebas diagnósticas en un centro de
radiológico.

Para extraer estos datos, se debe realizar un análisis en profundidad del problema,
para averiguar qué datos son esenciales para la base de datos y descartar los que
no sean necesarios. Una vez extraídos los datos esenciales comenzamos a
construir los modelos adecuados.

Es decir, construimos, mediante una herramienta de diseño de base de datos, un


esquema que exprese con total exactitud todos los datos que el problema requiere
almacenar.

Análisis:
●​ Fase de análisis: ​
Especificación de requisitos Software (E.R.S). ​
Antes de pasar a diseñar una BD hay que tener claro qué es lo que queremos
hacer. Para ello, típicamente los informáticos se reúnen con los futuros
usuarios del sistema para recopilar la información que necesitan para saber
que desean dichos usuarios. Normalmente se hace una reunión inicial a partir
de ella se elabora una batería de ella se elabora una batería de preguntas
para entrevistar a los usuarios finales en una segunda reunión y obtener de
ella una información detallada de lo que se espera de nuestra BD. De estas
entrevistas, se extrae el documento más importante del análisis, el
documento de Especificación de Requisitos Software o E.R.S Se extrae toda
la información necesaria para la modelización de datos.
●​ Fase 1 del diseño:​
Diseño conceptual: Modelo Entidad/Relación (E/R).​
Habitualmente quien realiza la modelización es un analista informático que no
tiene porqué ser un experto en el problema que pretende resolver
(Contabilidad, gestión de Reservas hoteleras, medicina, economía. etc.). Por
esto que es imprescindible contar con la experiencia de una futuro usuario de
la BD que conozca a fondo todos los entresijos, del negocio y que, a su vez,
no tienen porqué tener ningún conocimiento de informática. El objetivo de sta
fase del diseño consiste en representar la información obtenida del usuario
final y concretada en el E.R.S mediante estándares para que el resto de la
comunidad informática pueda entender y comprender el modelo realizado. El
modelo que se utiliza en esta primera fase del diseño tiene un gran poder
expresivo para poder comunicarse con el usuario que no es experto en
informática y se denomina Modelo Conceptual.
●​ Fase 2 del diseño: ​
Diseño Lógico: Modelo relacional. ​
Este modelo es más técnico que el anterior porque está orientado al personal
informático y generalmente tiene traducción directa al modelo físico que
entiende el SGBD. Se obtienen a partir del modelo conceptual y dependerá
de la implementación de la BD. Así, no es lo mismo implementar una base de
datos jerárquica u orientada a objetos que una BD relacional. El modelo que
se usará en este módulo es el Modelo Relacional.
●​ Fase 3 del diseño: ​
Diseño Físico: Modelo físico. ​
Es el resultado de aplicar el modelo lógico a un SGBD concreto.
Generalmente está expresado en un lenguaje de programación de BBDD tipo
SQL. En este módulo, transformaremos el Modelo Relacional en el modelo
físico mediante el sub lenguaje DDL de SQL.
Ejemplo:
1.​ Descripción del proceso:​
Se trata de una base de datos que debe almacenar datos sobre los
suministros que ingresan los proveedores hacia un determinado almacén,
para lo cual se debe llevar un control de los suministros y de sus cuentas
contables.
2.​ Identificar conjuntos de entidades:​
A primera vista, tenemos tres conjuntos de entidades: proveedor, suministro,
cuenta_contable.
3.​ Identificar conjuntos de relaciones: ​
Cada proveedor ingresa uno o más suministros y estos pueden ser vendidos
por uno o más proveedores, dándose una relación de muchos a muchos. Por
otra parte estos suministros pertenecerán a una determinada cuenta
contable, y esta cuenta contendrá múltiples suministros, dándose una
relación de muchos a uno.
4.​ Trazar primer diagrama.
5.​ Identificar atributos. ​
El siguiente paso es identificar los atributos para cada conjunto de entidades.
Proveedor:
●​ Cod Proveedor.
●​ RUC.
●​ Razón.
●​ Direc
Suministro:
●​ Cod Suministro.
●​ Descripción.
●​ Medida.
●​ Stockactual.
Cuenta_Contable
●​ Cuenta.
●​ Subcuenta.
●​ Clase.
●​ Descripción.
6.​ Seleccionar claves principales. ​
El proveedor tendría como clave principal al código, ya que es un único
atributo. Pero también tendría como clave candidata al número de RUC. Así
mismo el suministro y la cuenta contable por el número de cuenta. La relación
ingresa es una entidad compuesta, que va a estar conformada por las claves
principales de proveedor y suministro, además contará con sus propios
atributos, como fecha, moneda, tipo de cambio, etc.
7.​ Verificar el modelo.
4.12 Actividad: Modelos BD.
4.13 Modelado de base de datos.
El modelado de datos es uno de los elementos más importantes a la hora de iniciar
el desarrollo de cualquier proyecto. Esta es la estructura, sobre la que realmente
reside la verdadera esencia de la aplicación. Incluso determina si el proyecto va a
cumplir con su verdadero objetivo.

El modelado de datos es una técnica independiente de la implementación a la base


de datos. Esto es importante porque la metodología L5, siempre busca que se
saque el máximo provecho de diversas herramientas.

En particular, el esquema final y su implementación pueden sufrir cambios sin


afectar de manera drástica la Lógica de Programación.

Modelado:
Uno de los puntos importantes que se deben indicar es que el modelado de los
datos debe ser llevado como una guía general. Para los profesionales expertos, esto
implica el desarrollo de los Diagramas de Entidades y del Modelo Entidad-Relación.

Independientemente de la metodología a utilizar, esta herramienta siempre será


importante, para entender las relaciones entre las diversas entidades de la Base de
Datos.

El manejo de información implica saber cómo organizar los datos. Un apoyo lo


encontramos en las herramientas de bases de datos, que a su vez se apoyan en el
modelo de datos. Para que este se encargue de organizar y manipular los datos.
Tipos:
En los sistemas de bases de datos, que son los que nos ayudan a almacenar la
información y recuperarla mediante la realización de preguntas.

●​ ¿Pero qué tipos de modelados de datos podemos encontrarnos? Entre ellos


nos encontramos los siguientes:
a.​ Modelado de datos relacional.
b.​ Modelado de datos orientado a objetos.
c.​ Modelado de datos objeto-relacional.
Estos tres modelos serán analizados y definidos a continuación, así como lo que
son las bases de datos, para tener un mejor conocimiento del tema.

●​ Modelado de datos relacional: ​


En el modelo relacional se utiliza un grupo de tablas para representar los
datos y las relaciones entre ellos. Cada tabla está compuesta por varias
columnas, y cada columna tiene un nombre único. El modelo relacional es un
ejemplo de un modelo basado en registros. Los modelos basados en
registros se denominan así porque la base de datos se encuentra en registros
de un tipo particular. Cada tipo de registro define un número fijo de campos, o
atributos. Las columnas de la tabla corresponden a los atributos del tipo de
registro.
Orientado a objetos:
Modelo orientado a objetos:
El modelo orientado a objetos se puede observar como una extensión del modelo
E-R con las nociones de encapsulación, métodos (funciones) e identidad de objeto.
EL modelo de datos relacional orientado a objetos combina. Los modelos de datos
semi estructurados permiten la especificación de datos donde los elementos de
datos individuales del mismo tipo pueden tener diferentes conjuntos de atributos.

Modelo de datos objeto-relacional:


Los principales sistemas de gestión de bases de datos relacionales en los últimos
años los han sido significativamente extendidos con conceptos del modelo de bases
de datos orientados a objetos. De esta manera, aunque las estructuras de datos que
se utilizan para almacenar la información siguen siendo tablas, los usuarios pueden
utilizar muchos de los mecanismos. Se reconoce el concepto de objeto, de tal
manera que un objeto tiene un tipo, se almacena en cierta fila de cierta tabla y tiene
un identificador único (OID).

Esquema:
¿Cómo definir el esquema de la Base de Datos?

Cuando definimos el esquema de la base datos estamos implementando en el


lenguaje SQL del SGBD, el esquema de Modelado de Datos, anteriormente
mencionado. Es preciso notar que se define “en el lenguaje SQL del SGBD”, este
punto es importante que sea ampliado. Sabemos que SQL es uno solo y que por
eso es estándar, pero las diferentes distribuciones lo han implementado con ciertas
variaciones. Estas variaciones, son una de las causas en que el modelo de
desarrollo, se ha separado el Modelado de los Datos.

El esquema de las Bases de Datos, debe a nuestro parecer ser definido en el


lenguaje SQL de nuestro Sistema Gestor de Base de Datos. La razón es
básicamente sencilla: es más portable. Si lo hiciésemos en una aplicación nativa.

4.14 Diseño de esquemas relacionales de bases de datos:


El objetivo del diseño de bases de datos relacionales es la creación de esquemas
relacionales que almacene la información sin redundancias y que recupere la
información eficientemente.

Todo este proceso de normalización, tiene como fin conseguir que la información
sea accesible independientemente de la aplicación que lo usa, obteniendo datos con
una estructura óptima en un modelo relacional.

El modelo relacional se basa en dos ramas de las matemáticas; la teoría de


conjuntos y la lógica de predicados de primer orden. El hecho de que el modelo
relacional está basado en la teoría de las matemáticas es lo que lo hace tan seguro
y robusto.

Al mismo tiempo, estas ramas de las matemáticas proporcionan los elementos


básicos necesarios para crear una base de datos relacional con una buena
estructura.

Teoría:
La teoría matemática proporciona la base para el modelo relacional, y por lo tanto,
hace que el modelo sea predecible, fiable y seguro. La teoría describe los elementos
básicos que se utilizan para crear una base de datos relacional y proporciona las
líneas a seguir para construirla. El organizar estos elementos para conseguir el
resultado deseado es lo que se denomina diseñado.

El primer paso para la definición del Problema del diseño de una base de datos es la
producción del esquema conceptual. Normalmente, se construyen varios esquemas
conceptuales, cada uno para representar las distintas visiones que los usuarios
tienen de la información.

Esquemas:
A los esquemas conceptuales correspondientes a cada vista de usuario se les
denomina esquemas conceptuales locales. Cada uno de estos esquemas se
compone de entidades relacionales, atributos, dominios de atributos e
identificadores.
El esquema conceptual también tendrá una documentación, que se irá produciendo
durante su desarrollo. Las tareas a realizar en el diseño conceptual son las
siguientes:
1.​ Identificar las entidades.
2.​ Identificar las relaciones.
3.​ Identificar los atributos y asociarlos a entidades y relaciones.
4.​ Determinar los dominios de los atributos.
5.​ Determinar los identificadores.
6.​ Determinar las jerarquías de generalización (sí las hay).
7.​ Dibujar el diagrama entidad-relación.
8.​ Revisar el esquema conceptual local con el usuario.

Modelo:
El modelo entidad-relación (E/R) se basa en un representación del mundo real en
que los datos se describen como entidades, relaciones y atributos. El principal
concepto del modelo E/R es la entidad que es una “cosa” en el mundo real con
existencia independiente. Una entidad puede ser un objeto físico (una persona, un
auto, una casa o un empleado).

Una relación se puede definir como una asociación entre entidades. Por ejemplo, la
entidad “libro” puede estar relacionada con la entidad “persona” por medio de la
relación “está pedido”. La entidad “curso” por la relación “está inscrito”. Una relación
también puede tener atributos.

Ejemplo:
Suponga que estamos modelando los datos de una COMPAÑÍA. La base de datos
COMPAÑÍA debe mantener los Datos sobre los empleados de la compañía, los
departamentos y los proyectos.
1.​ La compañía está organizada en departamentos. Cada departamento tiene
un nombre único. Un número único, y un empleado particular quien lo
administra. Se requiere saber la fecha en que el empleado.
2.​ Cada departamento controla un cierto número de proyectos. Cada proyecto
tiene un nombre y números únicos y un local.
3.​ Para cada empleado se desea tener su nombre, ruta, dirección, salario, sexo
y aun año de nacimiento. Un empleado es asignado a un departamento, pero
puede trabajar en varios proyectos, los que no son necesariamente
controlados por el mismo departamento. Se quiere saber el número de horas
semanales que un empleado trabaja en cada proyecto. Se quiere saber cuál
es el supervisor directo de cada empleado.
4.​ Se desea conocer las personas dependientes de cada empleado para
propósitos de seguros. De cada dependiente se desea conocer el nobre,
sexo, fecha de nacimiento y relación con el empleado. La siguiente figura
muestra el esquema de esta base de datos, a través de una notación gráfica
llamada diagrama E/R. En este diagrama los rectángulos representan
conjuntos de entidades, las elipses representan atributos y los rombos
representan conjuntos de relaciones.

4.15 Actividad 5.
4.16 Relaciones anidadas.
Nacen como una extensión del modelado relacional, en el que los dominios de dicha
base de datos ya no son sólo atómicos, por lo que no se cumple la 1FN, debido a
que las tuplas también pueden ser una relación, que llevará a la creación de una
relación de relaciones.

De este modo, se genera la posibilidad de guardar objetos más complejos en una


sola tabla con referencias a otras relaciones, con lo que se acerca más al paradigma
de POO.

Consultas:
Las consultas anidadas, en Ciencias de la computación, en el contexto de los
lenguajes de consulta, son una herramienta sintética muy importante para realizar
consultas complejas en bases de datos.Es una subconsulta, una consulta que se
lanza dentro de otra consulta. Se utiliza una subconsulta para devolver datos
utilizados en la consulta principal como una condición para restringir aún más los
datos que se van a recuperar.

Por ejemplo:

select nombre, edad from Jugadores where NomEquipo in (select Nombre from
Equipos where títulos=2);

Esto nos da el nombre y edad de los jugadores cuyos equipos tengan dos títulos.
Primero se resuelve la subconsulta anidada dando los nombres de los equipos que
tienen dos títulos y luego este dato se compara con la tabla jugadores resolviendo la
otra consulta.

Hay problemas con ellas porque son lentas al tener que resolver una por una cada
consulta, por eso se recomienda usar consultas multitabla que hacen la consulta
directamente en más de una tabla a la vez.

select Jugadores.nombre, Jugadores.edad from Jugadores inner join Equipos on


Jugadores.NomEquipo = Equipos.Nombre where Equipos.títulos=2;

En general, consultar una base de datos es una de las operaciones que se realiza
con mayor frecuencia. Una consulta anidada (o subconsulta) es una consulta que se
encuentra dentro de otra consulta; la consulta interna, es decir, la subconsulta, pasa
los resultados a la consulta externa que los verifica en la condición siguiente a la
cláusula WHERE.
Tipos:
Hay varios tipos de subconsulta, pero principalmente se pueden dividir en
subconsulta que devuelven un solo valor y subconsulta que devuelven un conjunto
de valores.

●​ Ejemplo de una sub consulta que devuelve solo un valor:


La consulta devuelve todos los empleados cuya edad exceda la edad
promedio de todos los empleados. La tarea de calcular este promedio de
todos los empleados. La tarea de calcular este promedio la realiza la consulta
interna (subconsulta), pero se supone que tiene una base de datos.
●​ Ejemplo de una subconsulta que devuelve un conjunto de valores: ​
La consulta devuelve a todos los estudiantes que nunca han tomado un
examen, la subconsulta busca en su lugar a todos los estudiantes de primer
año que han tomado al menos un examen.
La cláusula distintiva permite eliminar la repetición de estudiantes de primer año que
han tomado más de un examen. Los operadores agregados (o funciones de
agregación) son de suma importancia para realizar subconsultas complejas.

Estos operadores se caracterizan por el hecho se caracterizan por el hecho de que


devuelven un valor en correspondencia con un grupo de valores o valores que
forman una columna de una tabla contenida en una base de datos.

Lenguajes:
En la mayoría de los lenguajes de consulta, incluido SQL, los más importantes son:
una tabla derivada. Es una que se crea durante la ejecución de la consulta externa,
luego es un conjunto de resultados simple.

Representa un tipo especial de subconsulta, colocado en la cláusula FROM de la


consulta y es referenciado a través de un alias.

Ejemplo de una subconsulta con tablas derivadas:

Esta consulta, a través de la subconsulta en la cláusula FROM permite extrapolar de


la tabla workers el salario más alto de la suma de salarios entre todos los sectores.
Las consultas entre campos le permiten calcular una suma, un promedio, un
recuento u otros tipos de operaciones de agregación en ciertos atributos. Se debe
especificar este tipo de consulta.
●​ Las consultas entre campos le permiten agrupar las tuplas según dos
campos.
●​ El primero representará las columnas de las tuplas resultantes, mientras que
el segundo representará las filas.

Ejemplo de una consulta de campo cruzado:

Esta consulta de campo cruzado le permite contar el número de estudiantes y el


número de estudiantes mujeres para cada clase.

Funciones:
●​ Puede anidar funciones escalares y de columna incorporadas dentro de otras
funciones.
●​ Puede anidar funciones escalares dentro de otras funciones escalares y
dentro de funciones de columna.
●​ Puede anidar funciones de columna de funciones escalares.
●​ No puede anidar funciones de columna dentro de otras funciones de
columnas.

Anidamiento de funciones escalares dentro de funciones escalares.

Supongamos que desea conocer el mes y el día de una entrevista para todos los
candidatos entrevistados por el director 140 y desea el resultado en formato USA.

4.17 Tipos complejos.


Utilice tipos de datos complejos para representar varios valores de datos en una
sola posición de fila o columna en una transformación. Se utilizan tipos de datos
complejos para habilitar las asignaciones que se ejecutan.

Se asignan tipos de datos complejos en una asignación para procesar datos


jerárquicos. Se realizan llamadas a puertos de datos complejos que se usarán para
procesar datos desde un puerto complejo en la configuración de Developer Tool.
Array:
Una matriz es una colección ordenada de elementos. Los elementos pueden ser
tipos de datos primitivos, como enteros o cadenas, o tipos de datos complejos,
como matrices, estructuras o asignaciones. Un tipo de datos de array representa
una colección ordenada de elementos pueden ser tipos de datos primitivos, como
enteros o cadenas, o tipos de datos complejos, como matrices, estructuras o
asignaciones.

Un tipo de datos de array representa una colección ordenada de elementos. Para


pasar, generar o procesar datos de array, asigne el tipo de datos de array y los
puertos.

Una matriz es una lista indexada basada en cero. Un índice de matriz indica la
posición del elemento de una matriz 0 indica la posición del primer elemento de una
matriz. El lenguaje de transformación incluye operadores para acceder a los
elementos.

Una matriz puede ser unidimensional o multidimensional. Una matriz unidimensional


es una matriz lineal. Una matriz multidimensional es una matriz de matrices.

Map:
Una asignación contiene una colección desordenada de pares de clave y valor. La
parte de valor puede ser un tipo de datos primitivo o un tipo de datos complejo. El
valor solo puede ser de un único tipo de datos.

Un tipo de datos de map representa una colección desordenada de pares de clave y


valor. Para pasar los datos del mapa a través de transformaciones, asigne el tipo de
datos de mapa a los puertos. Un elemento de mapa es un par de clave y valor que
asigna un elemento a otro. El motor de Spark puede leer y escribir datos de mapas
en archivos complejos y pasar datos de mapeo en una asignación.

Estructura:
Una estructura es una colección de elementos de diferentes tipos de datos. Un tipo
de datos de estructura es conceptualmente similar a una fila de tabla. El tipo de
datos contiene un número fijo de campos con nombre, cada uno con un tipo de
datos predefinido.

Los tipos de datos complejos pueden contener tipos de datos primitivos o tipos de
datos complejos. No hay restricciones en el número de caracteres contenidos en un
tipo de datos complejo.

Puede utilizar un tipo de datos anidado en un puerto complejo. Un tipo de datos


anidado es un tipo de datos complejo que contiene otros tipos de datos complejos.
Por ejemplo, puede crear una matriz de otras estructuras. Un tipo de datos anidado
puede contener hasta 10 niveles de anidación.

Un tipo de datos de estructura es una colección de elementos de diferentes tipos de


datos. Un tipo de datos de estructura tiene un esquema asociado que define la
estructura de los datos para pasar, generar o procesar datos de estructura.

El esquema del tipo de datos de estructura determina los nombres de elementos y el


número de elementos en los datos de struct. El esquema también determina el
orden de los elementos de los datos de struct. Informática utiliza definiciones de
tipos de datos.

El lenguaje de transformación incluye operadores para acceder a los elementos de


struct. También incluye funciones para generar y procesar datos de estructura y para
modificar el esquema de los datos.

Tipos:
Los tipos de datos complejos representan conjuntos de valores.
●​ Contexto. ​
El contexto es un tipo de datos nativo que se puede utilizar para almacenar
conjuntos de datos.
●​ Matriz.​
Es un tipo de datos nativo que se puede utilizar para almacenar conjuntos de
valores relacionados.
●​ Elemento de datos.​
Es un tipo de datos de nivel política que se utiliza para representar
elementos de datos en el modelo de datos de Netcool/Impact.
●​ Contenedor de sucesos. ​
El contenedor de sucesos es un tipo de datos de nivel de política que
representan un suceso.
4.18 Actividad 6.
4.19 Herencia.
En la programación Orientada a Objetos, existe un concepto con el cual podemos
tener un gran potencial a la hora de realizar grandes sistemas, su nombre es La
Herencia.

Una descripción sencilla de Herencia es: la creación de una clase a partir de una ya
existente (clase padre), teniendo la clase nueva la funcionalidad de su padre
(dependiendo de su encapsulamiento).

La herencia en programación orientada a objetos, nos sirve para organizar nuestra


lógica en la creación de clases, ahorrar métodos y tener una manera abstracta de
programar.
En ocasiones se nos darán objetos de la misma naturaleza que compartirán
características pero tendrán otras diferentes. En este caso crearemos clases que
pueden dar lugar a bastante código repetido, la forma de evitar esto y reutilizar
código, es mediante la herencia.

Podemos decir pues que la herencia es un tipo de relación entre clases, en la cual
una clase denominada subclase (o clase hija), comparte la estructura y/o
comportamiento definidos en una (herencia simple). Una subclase añade sus
propios atributos y métodos a los de la superclase, por lo que generalmente es
mayor que esta y representará a un grupo menor de objetos.

Tipos:
Tenemos dos tipos:
●​ Herencia de implementación: ​
Herencia simple en la que reutilizamos código.
●​ Herencia de interfaz: ​
La clase hija heredará una lista de propiedades y métodos vacíos para que
su codificación sea personalizada. Los objetos están vinculados por
relaciones. Normalmente tendremos objetos de una clase que sean
subclases de otras clases porque dichas clases tendrán propiedades
comunes. Por ejemplo, en la imagen siguiente tanto la clase Alumno como la
clase profesor. El objeto Profesor “hereda” las propiedades y los
comportamientos de la clase base o padre persona (Profesor es una
Persona). Si Persona tiene una propiedad que es DNI y un comportamiento
que es “actualizar DNI”. Tanto el profesor como el Alumno dispondrán de esa
propiedad y comportamiento. Inclusive, podremos añadir sus propios
atributos y comportamientos de forma independiente.

Clases:
Las clases no están aisladas, sino que se relacionan entre sí, formando una
jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento
de todas las clases a las que pertenecen. La herencia organiza y facilita el
polimorfismo y el encapsulamiento, permitiendo a los objetos ser definidos.

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


implementarlo. Esto suele hacerse habitualmente agrupando los objetos en clases y
estas en árboles o enrejados que reflejan un comportamiento común.

Mecanismo:
La herencia se implementa mediante un mecanismo que se denomina derivación de
clases: las superclases pasan a llamarse clases base, mientras que las subclases
se constituyen en clases derivadas.
El mecanismo de herencia está fuertemente entroncado con la reutilización del
código en OOP. Una clase derivada posibilita, el fácil uso de código ya creado en
cualquiera de las clases base ya existentes.

Decimos que una gallina es un ave; esto quiere decir que las gallinas tienen
características comunes con otras aves (pico, plumas, etc.), es decir que la gallina
hereda las características comunes de todas las aves.

Pero además, resulta que un ave es un animal, lo que significa que también
comparte características comunes al caballo, el perro, y cualquier otra cosa que
pueda ser clasificada como animal.

La herencia nos permite, entre otras cosas, evitar tener que escribir el monismo
código una y otra vez, puesto que al definir que una vez, puesto que al definir que
una categoría (clase) pertenece a otra, automáticamente estamos atribuyéndose las
características generales de la primera, sin tener que definirlas de nuevo.

Ventajas y desventajas:
Ventajas de la herencia:
Ayuda a los programadores a ahorrar código y tiempo ya que la clase padre ha sido
implementada y verificada con anterioridad, restando solo referenciar desde la clase
derivada a la clase base.

Los objetos pueden ser construídos a partir de otros similares. Para ello es
necesario que exista una clase base, que incluso puede formar parte de una
jerarquía de clases más amplia.

La clase derivada hereda el comportamiento y los atributos de la clase base y es


común que se le añada su propio comportamiento o que modifique lo heredado.
Toda clase puede servir como clase base para crear otras.

Desventajas de la herencia:
Si la jerarquía de clases es demasiado compleja, el programador puede tener
problemas para comprender el funcionamiento de un programa. Puede volverse
más complejo detectar y resolver errores de programación, por ejemplo al modificar
una clase padre que afecta el funcionamiento de las subclases.

4.20 Tipos de referencia.


Los tipos de referencia se pueden dividir en dos categorías como tipos definidos por
el usuario y tipos predefinidos. Algunos ejemplos de tipos definidos por el usuario
son clases, interfaces y matrices.
Una clase se utiliza para crear objetos. Una clase consiste en miembros de datos y
métodos. Los miembros de los datos describen los atributos y los métodos
describen el comportamiento.

Una interfaz contiene solo la declaración de los miembros. Los miembros deben ser
definidos por la clase derivada. Una matriz puede almacenar múltiples elementos
del mismo tipo de datos.

Objeto:
Los tipos predefinidos son un tipo de objeto y una cadena. El tipo de objeto es el tipo
base para todos los demás tipos definidos por el usuario. Las referencias de objeto
se utilizan para enlazar a un objeto de cualquier tipo en particular.

Los literales de cadena se almacenan en objetos de cadena como valores. Las


operaciones tales como copiar, comparar y concatenar se pueden hacer con ellos.
Esos con algunos ejemplos de un tipo de referencia.

Los tipos de referencia se almacenan en el montón. Al asignar una variable de


referencia, solo se copia la referencia. El valor real sigue siendo el mismo.

Usuario:
Existen seis tipos definidos por el usuario:
●​ Tipo diferenciado: ​
Un tipo diferenciado es un tipo de datos definido por el usuario que comparte
su representación interna con un tipo de datos incorporado existente (su tipo
“fuente”). Los tipos diferenciados incluyen identificadores calificados. Si no se
utiliza el nombre de esquema para calificar el nombre del tipo diferenciado
cuando se utiliza en sentencias que no son CREATE TYPE (diferenciado),
DROP o COMMENT. Los tipos diferenciados derivados de tipos LOB están
sujetos a las mismas restricciones que su tipo fuente. Un tipo diferenciado se
define para utilizar normas de tipificación firme o tipificación no firme. Las
normas de tipificación firme son el valor por omisión.
●​ Tipo estructurado: ​
Es un tipo de datos definido por el usuario con una estructura definida en la
base de datos. Contiene una secuencia de atributos con nombre, cada uno
de los cuales tiene un tipo de datos. Un tipo estructurado también incluye un
conjunto de especificaciones de método. Un tipo estructurado se puede
utilizar como tipo de una tabla, vista o columna. Cuando se utiliza como tipo
para una tabla o vista, esa tabla o vista se denomina tabla con tipo o vista
con tipo. Para las tablas con tipo y vistas con tipo, los nombres y tipos de
datos de los atributos del tipo estructurado pasan a ser los nombres y tipos
de datos de las columnas de esta tabla o vista con tipo. Las filas de la tabla o
vista con tipo pueden considerarse una representación de instancias del tipo
estructurado.
●​ Tipo de referencia: ​
Un tipo de referencia es un tipo compañero de un tipo estructurado. De
manera similar a un tipo escalar que comparte una representación común con
uno de los tipos de datos internos. Todos los tipos de la jerarquía de tipos
comparten esta misma representación. La representación de un tipo de
referencia se define cuando se crea el tipo raíz de una jerarquía de tipos.
Cuando se utiliza un tipo de referencia, se especifica un tipo estructurado
como parámetro del tipo.
●​ Tipo de matriz: ​
Un tipo de matriz definido por el usuario es un tipo de datos que se define
como matriz con elementos de otro tipo de datos. Cada tipo de matriz común
tiene un índice con el tipo de datos INTEGER y tiene definida una
cardinalidad. Cada matriz asociativa tiene un índice con el tipo de datos
INTEGER o VARCHAR y no tiene definida una cardinalidad máxima.
●​ Tipo de fila: ​
Un tipo de fila es un tipo de datos que se define como una secuencia
ordenada de campos con nombre, cada uno con un tipo de datos asociado,
que representa efectivamente una fila. Un tipo de fila se puede utilizar como
tipo de datos para variables y parámetros en SQL PL a fin de proporcionar
una manipulación sencilla de una fila de datos.
●​ Tipo de cursor: ​
Un tipo de cursor definido por el usuario es un tipo de datos definido por el
usuario con la palabra clave CURSOR y opcionalmente con un tipo de fila
asociado. Un tipo de cursor definido por el usuario con un tipo de fila
asociado es un tipo de cursor con tipo firme; de otro modo, es un tipo de
cursor definido por el usuario representa una referencia a un cursor
subyacente.
4.12 Actividad 7.
4.13

También podría gustarte