Tec. Ingeniera de Software
Tec. Ingeniera de Software
Tec. Ingeniera de Software
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.
Software,
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.
Desarrollo.
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.
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.
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.
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.
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.
Categorización.
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.
Repetitivo.
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:
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:
Diferencias:
Estructura:
Instrucciones:
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.
● Conector: conexión entre dos puntos del organigrama situado en páginas diferentes.
Tareas de análisis:
Modelado:
Funciones:
Requisitos:
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:
Lenguajes:
Componentes:
Fases:
La compilación permite crear un programa de computadora que puede ser ejecutado por
esta y comprende tres pasos:
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:
Características:
Estructura:
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:
Medición:
Pruebas:
1.15 Actividad 6.
1.16 Actividad final.
2. - Lógica de programación.
2.1 Introducción a la programación.
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:
CPU.
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.
● Solución:
Dispositivos:
Tanto las memorias como las unidades de almacenamiento, utilizan unidades para ser
medidas como son el bit, byte, megabyte, gigabyte, terabyte y kilobyte.
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.
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:
Herramientas.
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:
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:
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.
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.
Variables:
● 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 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 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.
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:
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:
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:
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:
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.
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.
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) | |
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:
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:
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.
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:
Flujo:
Tipos:
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:
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:
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.
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.
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.
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:
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:
Operaciones:
Programación de algoritmos:
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.
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.
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
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.
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).
Ahora supongamos que tenemos una computadora 10 veces más rápida, ¿De qué tamaño
es el problema que podemos resolver?
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:
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:
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.
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.
¿Qué es?
Diseño:
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.
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.
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.
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?
Lenguajes:
● 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:
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:
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:
¿Qué es?
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#?
Variables en C#:
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.
Identificadores:
Ejemplo:
public class GFG {
static public void Main ()
{
int x;
}
}
Identificadores:
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.
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:
Datos enumerados:
Los tipos enumerados son un mecanismo usado en C++ que nos permite agrupar
constantes simbólicas.
Tipos:
● 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:
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.
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.
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 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:
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).
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.
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.
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.
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.
Sentencia if-else:
● 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.
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.
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.
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.
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 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.
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.
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.
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.
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.
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.
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.
Usos y empleos:
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.
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.
¿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.
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:
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.
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.
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:
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.
Tipos:
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.
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.
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.
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.
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:
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Esquema:
¿Cómo definir el esquema de la Base de Datos?
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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