PROGRAMACIÓN 2
MSIG. Antonio Rodríguez Andrade
Objetivos
• Que el estudiante adquiera habilidades y destrezas en el manejo de técnicas especiales de programación orientada a objetos.
Unidades
• UNIDAD 1: Introducción
• UNIDAD 2: Contacto con C#
• UNIDAD 3: Estructuras de control y Repetitivas
• UNIDAD 4: Arreglos, estructuras y funciones
• UNIDAD 5: Programación Orientada a Objetos
• UNIDAD 6: Manejo de archivos
• UNIDAD 7: Contacto con el entorno gráfico
Introducción
Paradigmas de programación
Paradigmas de programación
En la programación imperativa, de la cual hacen parte muchos de los principales lenguajes de programación tales como C, Java y PHP, un programa se describe en términos de instrucciones, condiciones y pasos que modifican el estado de un programa al permitir la mutación de variables, todo esto con el objetivo de llegar a un resultado. En contraparte, en la programación declarativa un programa se describe en términos de proposiciones y afirmaciones que son declaradas para describir el problema, sin especificar los pasos para resolverlo; en este tipo de programas, el estado no puede ser modificado ya que todos los tipos de datos son inmutables.
De esta familia hacen parte lenguajes como Scala, Haskell, Erlang y Elixir.
Javascript
Erlang 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144,…
Técnicas de programación
Programación declarativa
Programación estucturada
Programación modular
Programación ooorientada a objetos
Programación declarativa
Paradigma de programación que está basado en el desarrollo de programas especificando o “declarando” un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solución. La solución es obtenida mediante mecanismos internos de control, sin especificar exactamente cómo encontrarla (tan sólo se le indica a la computadora qué es lo que se desea obtener o qué es lo que se está buscando).
Programación declarativa
Paradigma de programación que está basado en el desarrollo de programas especificando o “declarando” un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan su solución. La solución es obtenida mediante mecanismos internos de control, sin especificar exactamente cómo encontrarla (tan sólo se le indica a la computadora qué es lo que se desea obtener o qué es lo que se está buscando).
Tipos
• Los lenguajes lógicos, como Prolog.
• Los lenguajes algebraicos, como Maude y SQL
• Los lenguajes funcionales, como Haskell y Erlang
Ventajas
Se ha dicho que los lenguajes declarativos tienen la ventaja de ser razonados matemáticamente, lo que permite el uso de mecanismos matemáticos para optimizar el rendimiento de los programas.
Son fiables, elegantes y expresivos.
Programación estructurada
paradigma de programación orientado a mejorar la claridad, calidad y tiempo de desarrollo de un programa de computadora, utilizando únicamente subrutinas y tres estructuras: secuencia, selección (if y switch) e iteración (bucles for y while), considerando innecesario y contraproducente el uso de la instrucción de transferencia incondicional (GOTO), que podría conducir a “código espagueti”, que es mucho más difícil de seguir y de mantener, y era la causa de muchos errores de programación.
Ventajas
• Los programas son más fáciles de entender, pueden ser leídos de forma secuencial y no hay necesidad de hacer engorrosos seguimientos en saltos de líneas (GOTO) dentro de los bloques de código para intentar entender la lógica.
• La estructura de los programas es clara, puesto que las instrucciones están más ligadas o relacionadas entre sí.
• Reducción del esfuerzo en las pruebas y depuración.
• El seguimiento de los fallos o errores del programa (debugging) se facilita debido a su estructura más sencilla y comprensible, por lo que los errores se pueden detectar y corregir más fácilmente.
Lenguajes
• ALGOL, Pascal, PL/I y Ada
Programación modular
Paradigma de programación que consiste en dividir un programa en módulos o subprogramas con el fin de hacerlo más legible y manejable.
Al aplicar la programación modular, un problema complejo debe ser dividido en varios subproblemas más simples, y estos a su vez en otros subproblemas más simples. Ésta técnica se llama refinamiento sucesivo, divide y vencerás ó análisis descendente (Top-Down).
Ventajas
• Facilitan la escritura y depuración de un programa
• Localización rápida de errores
• La modificación de un módulo no afecta a los demás
• Un grupo de instrucciones que se repite en varias partes de un programa puede incluirse en un módulo y llamarlo en el programa.
Lenguajes
• C++
Programación orientada a objetos
Paradigma de programación que usa los objetos en sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, cohesión, abstracción, polimorfismo, acoplamiento y encapsulamiento.
Objeto
Compuesto de datos e información
Estado Está definido por los
métodos o mensajes a los que sabe responder dicho objeto, es decir, qué operaciones se pueden realizar con él
Comporta miento
Propiedad que lo diferencia del resto.
Identidad
Instancia de una clase. Entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos), los mismos que consecuentemente reaccionan a eventos. Se corresponden con los objetos reales del mundo que nos rodea, o con objetos internos del sistema (del programa). Es una instancia a una clase.
Conceptos básicos
Clases en POO
Las clases son declaraciones de objetos, también se podrían definir como abstracciones de objetos. Esto quiere decir que la definición de un objeto es la clase. Cuando programamos un objeto y definimos sus características y funcionalidades en realidad lo que estamos haciendo es programar una clase. En los ejemplos anteriores en realidad hablábamos de las clases coche o fracción porque sólo estuvimos definiendo, aunque por encima, sus formas.
Propiedades en clases
Las propiedades o atributos son las características de los objetos. Cuando definimos una propiedad normalmente especificamos su nombre y su tipo.
Nos podemos hacer a la idea de que las propiedades son algo así como variables donde almacenamos datos relacionados con los objetos.
Conceptos básicos
Métodos en las clases
Son las funcionalidades asociadas a los objetos. Cuando estamos programando las clases las llamamos métodos. Los métodos son como funciones que están asociadas a un objeto.
Objetos en POO
Los objetos son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que especificar la clase a partir de la cual se creará. Esta acción de crear un objeto a partir de una clase se llama instanciar. Por ejemplo, un objeto de la clase fracción es por ejemplo 3/5. El concepto o definición de fracción sería la clase, pero cuando ya estamos hablando de una fracción en concreto 4/7, 8/1000 o cualquier otra, la llamamos objeto.
• Pensar en términos de objetos es muy parecido a cómo lo haríamos en la vida real. Por ejemplo vamos a pensar en un coche. Describa los atributos y los métodos
Cómo se piensa en objetos
• El diagrama de clase es una representación semi-gráfica de la clase, que ayuda al programador a visualizar cuales son las propiedades y métodos que contendrá una clase o conjunto de clases en particular.
En un diagrama de clase se pueden representar también relaciones entre clases.
Diagrama de Clase
Conociendo el lenguaje
• Operadores aritméticos
Conociendo el lenguaje
• Tipos de datos
Conociendo el lenguaje
• Tipos de datos
Conociendo el lenguaje
Procedencia operadores lógicos
• En primer lugar se realizarán las operaciones indicadas entre paréntesis.
• Después las multiplicaciones, divisiones y el resto de la división.
• Finalmente, las sumas y las restas.
• En caso de tener igual prioridad, se analizan de izquierda a derecha.
Conociendo el lenguaje
Ejercicios propuestos
• Crea un programa que calcule el producto de los números 121 y 132, usando variables.
• Crea un programa que calcule la suma de 285 y 1396, usando variables.
• Crea un programa que calcule el resto de dividir 3784 entre 16, usando variables.
Conociendo el lenguaje
Variables
• Los nombres de variables (lo que se conoce como "identificadores") pueden estar formados por letras, números o el símbolo de
subrayado (_) y deben comenzar por letra o subrayado. No deben
tener espacios intermedios. También hay que recordar que las vocales acentuadas y la eñe 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.
Nota: Las mayúsculas y minúsculas se consideran diferentes
Conociendo el lenguaje
Ejercicios propuestos interacciones con el usuario
• Crea un programa que calcule el producto de dos números introducidos por el usuario.
• Crea un programa que calcule la división de dos números
introducidos por el usuario, así como el resto de esa división.
• Suma tres números tecleados por usuario.
• Pide al usuario una cantidad de "millas náuticas" y muestra la equivalencia en metros, usando: 1 milla náutica = 1852 metros.
Conociendo el lenguaje
Estructuras de control
if Switch
Conociendo el lenguaje
Operadores relacionales Operadores lógicos
Conociendo el lenguaje
Ejercicios propuestos
• Crea un programa que pida al usuario un número entero y diga si es par .
• Crea un programa que pida al usuario dos números enteros y diga cuál es el mayor de ellos.
• Crea un programa que pida al usuario dos números enteros y diga si el primero es múltiplo del segundo.
• Crea un programa que pida al usuario un número entero y responda si es múltiplo de 2 o de 3.
• Crea un programa que pida al usuario un número entero y responda si es múltiplo de 2 y de 3 simultáneamente.
• Crea un programa que pida al usuario un número entero y responda si es múltiplo de 2 pero no de 3.
Conociendo el lenguaje
Ejercicios propuestos
• Crea un programa que pida un número del 1 al 5 al usuario, y escriba el nombre de ese número, usando "switch" (por ejemplo, si introduce
"1", el programa escribirá "uno").
Conociendo el lenguaje
Estructuras repetitivas (bucles)
while do
while for foreach
Conociendo el lenguaje
Ejercicios propuestos
• Crea un programa que pida al usuario su contraseña (numérica).
Deberá terminar cuando introduzca como contraseña el número 1111, pero volvérsela a pedir tantas veces como sea necesario.
• Crea un "calculador de cuadrados": pedirá al usuario un número y
mostrará su cuadrado. Se repetirá mientras el número introducido no sea cero
• Crea un programa que escriba en pantalla los números del 1 al 10, usando "while".
Conociendo el lenguaje
Ejercicios propuestos
• Crear un programa que pida números positivos al usuario, y vaya
calculando y mostrando la suma de todos ellos (terminará cuando se teclea un número negativo o cero).
• Crea un programa que escriba en pantalla los números del 1 al 10, usando "do..while".
• Crea un programa que escriba 6 líneas de texto, cada una de las cuales estará formada por los números del 1 al 7. Debes usar dos variables llamadas "linea" y "numero", y ambas deben estar
declaradas en el "for".
Conociendo el lenguaje
Ejercicios propuestos
• Crea un programa que cuente cuantas veces aparece la letra 'a' en una frase que teclee el usuario, utilizando "foreach".
Conociendo el lenguaje: Excepciones
Try Catch
Conociendo el lenguaje
Tipos de datos para números enteros
Conociendo el lenguaje
Operaciones abreviadas
Conociendo el lenguaje
Ejercicios propuestos
• ¿Cuál sería el resultado de las siguientes operaciones? a=5; b=a+2; b-
=3; c=-3; c*=2; ++c; a*=b; Crea un programa que te lo muestre. ".
Conociendo el lenguaje
Tipos de datos para números reales
Conociendo el lenguaje: char y string
Cadena de caracteres
Conociendo el lenguaje
Tipos de datos booleanos
En C# tenemos también un tipo de datos llamado "booleano" ("bool"), que puede tomar dos valores: verdadero ("true") o falso ("false")
Conociendo el lenguaje
Arreglos
Conociendo el lenguaje
Ejercicios propuestos
• Un programa que pida al usuario 4 números, los memorice (utilizando un array), calcule su media aritmética y después muestre en pantalla la media y los datos tecleados.
• Crea un programa que pida al usuario 6 números enteros cortos y luego los muestre en orden inverso (pista: usa un array para
almacenarlos y "for" para mostrarlos).
• Crea un programa que pregunte al usuario cuántos números enteros va a introducir (por ejemplo, 10), le pida todos esos números, los
guarde en un array y finalmente calcule y muestre la media de esos números.
Conociendo el lenguaje
Ejercicios propuestos
• Un programa que almacene en una tabla el número de días que tiene cada mes (supondremos que es un año no bisiesto), pida al usuario que le indique un mes (1=enero, 12=diciembre) y muestre en pantalla el número de días que tiene ese mes.
Estructuras
Agrupación de datos, llamados campos, los cuales no necesariamente son del mismo tipo. Los datos que forman un "struct" pueden ser
públicos o privados
Conociendo el lenguaje
Ejercicios propuestos
• Crea un "struct" que almacene datos de una canción en formato MP3:
Artista, Título, Duración (en segundos), Tamaño del fichero (en KB).
Un programa debe pedir los datos de una canción al usuario,
almacenarlos en dicho "struct" y después mostrarlos en pantalla.
• Amplia el programa para que almacene datos de hasta 100 canciones.
Deberá tener un menú que permita las opciones: añadir una nueva canción, mostrar el título de todas las canciones, buscar la canción que contenga un cierto texto (en el artista o en el título).
Cadenas
Un programa que te pida tu nombre y lo muestre en pantalla
separando cada letra de la siguiente con un espacio. Por ejemplo, si tu nombre es "Juan", debería aparecer en pantalla "J u a n".
Un programa que pida una frase al usuario y la muestra en orden inverso (de la última letra a la primera).
Un programa que te pida tu nombre y lo muestre en pantalla como un triángulo creciente. Por ejemplo, si tu nombre es "Juan", debería
aparecer en pantalla:
Cadenas (Split)
Un programa que pida al usuario una frase y muestre sus palabras en orden inverso.
Un programa que pida al usuario varios números separados por espacios y muestre su suma.
Un programa que pida tu nombre y lo muestre con un espacio entre cada par de letras, usando "foreach".
Ejemplo completo
Crearemos un programa que pueda almacenar datos de hasta 1000 ficheros (archivos de ordenador). Para cada fichero, debe guardar los siguientes
datos: Nombre del fichero, Tamaño (en KB, un número de 0 a
8.000.000.000). El programa mostrará un menú que permita al usuario las siguientes operaciones:
1. Añadir datos de un nuevo fichero
2. Mostrar los nombres de todos los ficheros almacenados
3. Mostrar ficheros que sean de más de un cierto tamaño (por ejemplo, 2000 KB).
4. Ver todos los datos de un cierto fichero (a partir de su nombre)
5. Salir de la aplicación (como no usamos ficheros, los datos se perderán).
Funciones
Crea una función llamada "DibujarCuadrado3x3", que dibuje un cuadrado formato por 3 filas con 3 asteriscos cada una. Incluye un "Main" para probarla.
Crea una función "DibujarCuadrado" que dibuje en pantalla un cuadrado del ancho (y alto) que se indique como parámetro. Completa el programa con un Main que permita probarla.
Crea una función "DibujarRectangulo" que dibuje en pantalla un rectángulo del ancho y alto que se indiquen como parámetros. Incluye un Main para probarla.
Crea una función "DibujarRectanguloHueco" que dibuje en pantalla un rectángulo hueco del ancho y alto que se indiquen como parámetros, formado por una letra que también se indique como parámetro. Completa el programa con un Main que pida esos datos al usuario y dibuje el rectángulo.
Funciones
Crea una función "Cubo" que calcule el cubo de un número real (float) que se indique como parámetro. El resultado deberá ser otro número real.
Prueba esta función para calcular el cubo de 3.2 y el de 5.
Crea una función "Menor" que calcule el menor de dos números enteros que recibirá como parámetros. El resultado será otro número entero.
Crea una función llamada "Signo", que reciba un número real, y devuelva un número entero con el valor: -1 si el número es negativo, 1 si es positivo o 0 si es cero.
Crea una función "MostrarPerimSuperfCuadrado" que reciba un número entero y calcule y muestre en pantalla el valor del perímetro y de la superficie de un cuadrado que tenga como lado el número que se ha indicado como parámetro.
Programacion Orientada a Objetos
• Clase: Plantilla para la creación de objetos de datos según un modelo predefinido. Las clases se utilizan para representar entidades o
conceptos, como los sustantivos en el lenguaje. Está formado por atributos y métodos
• Objeto: Instancia de una clase
Ejercicios de Clases
Crea una clase llamada Persona, en el fichero "persona.cs". Esta clase deberá tener un atributo "nombre", de tipo string. También deberá tener un método "SetNombre", de tipo void y con un parámetro string, que permita cambiar el valor del nombre. Finalmente, también tendrá un método "Saludar", que escribirá en pantalla "Hola, soy " seguido de su nombre. Crea también una clase llamada PruebaPersona. Esta clase deberá contener sólo la función Main, que creará dos objetos de tipo Persona, les asignará un nombre a cada uno y les pedirá que saluden.
Para guardar información sobre libros, vamos a comenzar por crear una clase "Libro", que contendrá atributos "autor", "titulo", "ubicacion" (todos ellos strings) y métodos Get y Set adecuados para leer su valor y cambiarlo. Prepara también un Main (en la misma clase), que cree un objeto de la clase Libro, dé valores a sus tres atributos y luego los muestre.
Crea una clase "Coche", con atributos "marca" (texto), "modelo" (texto), "cilindrada"
(número entero), potencia (número real). No hace falta que crees un Main de prueba.
Programacion Orientada a Objetos
• Constructores: El objetivo de un constructor es el de inicializar un objeto cuando éste es creado. Asignaremos los valores iniciales así como los procesos que ésta clase deba realizar.
Se utiliza para crear tablas de métodos virtuales y poder así desarrollar el polimorfismo, una de las herramientas de la programación orientada a objetos (POO). Al utilizar un constructor, el compilador determina cual de los objetos va a responder al mensaje (virtual) que hemos creado. Tiene un tipo de acceso, un nombre y un paréntesis.
Programacion Orientada a Objetos
• Constructor por defecto: Un constructor por defecto es un constructor sin parámetros que no hace nada. Sin embargo será invocado cada vez que se construya un objeto sin especificar ningún argumento, en cuyo caso el objeto será iniciado con los valores predeterminados por el sistema (los atributos numéricos a ceros, los alfanuméricos a nulos, y las referencias a objetos a null)
Programacion Orientada a Objetos
• Destructores: Un destructor en algunos lenguajes de programación orientados a objetos es un método de una clase que se llama justo antes de una instancia de esa clase y se elimina de la memoria.
Programacion Orientada a Objetos
• Herencia: Mecanismo que permite crear nuevas clases partiendo de una clase o de una jerarquía de clases preexistente evitando con ello el rediseño, la modificación y verificación de la parte ya implementada
Ejercicios de Herencia
Crea una variante ampliada del ejercicio de clase de Persona. En ella, la clase Persona no cambia. Se creará una nueva clase PersonaInglesa, en el fichero
"personaInglesa.cs". Esta clase deberá heredar las características de la clase
"Persona", y añadir un método "TomarTe", de tipo void, que escribirá en pantalla
"Estoy tomando té". Crear también una clase llamada PruebaPersona2, en el fichero "pruebaPersona2.cs". Esta clase deberá contener sólo la función Main, que creará dos objetos de tipo Persona y uno de tipo PersonaInglesa, les asignará un nombre, les pedirá que saluden y pedirá a la persona inglesa que tome té.
Ejercicio Libro: crea una clase "Documento", de la que Libro heredará todos sus atributos y métodos. Ahora la clase Libro contendrá sólo un atributo "paginas", número entero, con sus correspondientes Get y Set.
Crea una clase "Vehiculo", de la que heredarán "Coche" y una nueva clase "Moto".
La clase Vehiculo contendrá todos los atributos y métodos que antes estaban en Coche, y tanto Coche como Moto heredarán de ella
Polimorfismo
• El concepto de "polimorfismo" se refiere a que una misma función (un método) puede tener varias formas, ya sea porque reciba distintos tipos de parámetros y/o en distinta cantidad, o porque incluso se aplique a distintos objetos.
Ejercicios Polimorfismo
Añade a la clase "Persona" un nuevo método Saludar, que reciba un parámetro, que será el texto que debe decir esa persona cuando salude.
Amplía el proyecto del ejercicio (Libro): la clase Libro tendrá un segundo constructor que permita dar valores al autor y el título, pero no a la ubicación, que tomará el valor por defecto "No detallada".
La clase Libro tendrá un segundo constructor que permita dar valores al autor y el título, pero no a la ubicación, que tomará el valor por defecto
"No detallada".
Static
• La palabra "static" delante de un atributo (una variable) de una clase, indica que es una "variable de clase", es decir, que su valor es el
mismo para todos los objetos de la clase.
• De igual modo, si un método (una función) está precedido por la palabra "static", indica que es un "método de clase", es decir, un
método que se podría usar sin necesidad de declarar ningún objeto de la clase.
Ejercicios
• Amplía el proyecto Libro, de modo que permita guardar hasta 1.000 libros. Main mostrará un menú que permita añadir un nuevo libro o ver los datos de los ya existentes.
Bases de datos
69
Información y datos
• La información se registra mediante datos.
• Los datos se pueden mecanizar.
• Los datos se interpretan para obtener una información.
• La interpretación depende del hombre, no se “puede” mecanizar.
• Es necesario un almacenamiento persistente.
70
Datos
• Tipo de información representada con datos:
• Atómica:
• Números (enteros, coma flotante)
• Cadenas de caracteres
• Estructurada:
• Números complejos (partes real e imaginaria)
• Registros
• Ej: coche(matrícula,modelo,color)
71
• Fichero: almacenamiento persistente (no volátil) de datos usado para representar información.
• Ejemplos: Ficheros de texto, documentos XML
• Base de datos: colección persistente de datos relacionados usada para representar información.
• Ejemplos MS Access, MS SQL Server, MySQL, PostgreSQL, Oracle, IBM DB2
Ficheros vs. Bases de datos
72
73
Ficheros secuenciales
Application
Cola aplicaciones para acceso a los datos
Application
Appl i c ati o n
Archivo Application
Acceso serializado
199712150007 Widget 100 4 400
199712150007 Thingamabob 275 1 275
199712150008 Widget 100 3 300
74
Problemas de las organizaciones de ficheros
• Redundancia e inconsistencia de datos
• Costes de mantenimiento de los programas:
• Dificultad en el acceso. Cada consulta de datos implica generalmente escribir un nuevo programa
• Aislamiento de datos. Formatos diferentes y en medios diferentes
• Integridad. Para implementar restricciones de integridad es necesario modificar todos los programas que accedan a los datos
75
Problemas de las organizaciones de ficheros
• Atomicidad.
• Cuando hay un fallo informático (corte de corriente, error de disco, ...) se puede producir una inconsistencia en una transferencia bancaria. La transferencia debe ser una operación atómica (ocurre totalmente o no ocurre).
76
Problemas de las organizaciones de ficheros
• Acceso concurrente.
Application
Application
Trabajo con una copia de
los datos
Trabajo con una copia de los datos
Yo también!
Archivo
199712150007 Widget 100 4 400 199712150007 Thingamabob 275 1 275 199712150008 Widget 100 3 300
Archivo
199712150007 Widget 100 4 400
199712150007 Thingamabob 275 1 275
199712150008 Widget 100 3 300
Archivo
199712150007 Widget 100 4 400
199712150007 Thingamabob 275 1 275
199712150008 Widget 100 3 300
Application
77
Problemas de las organizaciones de ficheros
• Las bases de datos solucionan los problemas de los ficheros.
• Sin embargo, no sustituyen a los ficheros en todas las aplicaciones.
• Por ejemplo: ficheros temporales, datos no relacionados.
• Además, las bases de datos se implementan con ficheros.
78
Problemas de las organizaciones de ficheros
• Los ficheros se prefieren a los SGBD cuando:
• BD y aplicaciones simples, bien definidas y sin visos de cambio.
• Requisitos de tiempo real que no pueden cubrir los SGBD.
• No se requiere acceso concurrente.
79
Sistemas gestores de bases de datos (SGBDs)
Usuario 1 Usuario n Aplicación 1 Aplicación m
SGBD
BD 1 BD k
... ...
...
80
Tipos de SGBDs
• Relacionales.
• Orientados a objetos.
• Geográficos.
• Temporales.
• XML.
81
Los SGBDs proporcionan:
C oncurrencia
I ntegridad
S eguridad
82
Concurrencia a nivel de fila
Last Name
First
Name Address Phone
Adams Bobby 1426 Main 555-1423
Adams Sandy 214 Cisco Lane 555-4297 Brown Terry 45 River Walk 555-8495 Caldwell Simone 122 42ND ST 555-5367 Fridrich John 956 Billings 555-4311 Gaines Lois 6094 Beaker 555-0945 Jones Larry 567 Yale Ave. 555-6932 Jones Larry 240 Boston Blvd. 555-5390 Jones LaVerne South Star Route 555-2345 Mitchell Jean 504 1ST Ave. 555-1777 Mitchell Ted 504 1ST Ave. 555-1778 Smith Diana 2253 Dahlia 555-6098 Smith Grace 983 Fairfax 555-8764 Wise Sara 9023 Colorado Blvd. 555-3242
Application
¡Estoy leyendo la 3ª
fila!
Application
Application
¡Estoy cambiando
la 6ª fila!
¡Estoy leyendo la 8ª fila y luego la
modificaré!
83
Integridad
• Restricciones de integridad:
• Dominio.
• Clave primaria.
• Clave externa.
• Definidas por el usuario.
84
Seguridad
• Un SGBD es un sistema software capaz de manejar grandes colecciones de datos:
• Relacionados.
• Compartidos.
• Persistentes.
• Aseguran su fiabilidad y privacidad.
• Usuarios.
• Roles.
• Restricciones de acceso.
85
Ventajas
• Como consecuencia de estas características se obtienen las siguientes ventajas:
• Normalización.
• Tiempo de desarrollo de aplicaciones reducido.
• Flexibilidad.
• Facilidad para añadir o eliminar datos necesarios.
• Disponibilidad inmediata de las actualizaciones de datos para todos los usuarios.
86
SGBDs
SQL/DS de IBM, 1981
ORACLE de RSI, 1981
DB2 de IBM, 1983
Informix, 1985
Sybase, 1991
MS SQL Server (1989, 1992)
MS Access (1992)
MySQL (1995)
PostgreSQL (1995)
HyperSQL (2001) IBM: Industrial Business Machines RSI: Relational Software, Inc.
MS: Microsoft
Gestores de ficheros
("databases")
DBase
Paradox87
Tipos de datos SGBDRs
• Texto
• Memo
• Numérico
• Autonumérico
• Fecha/Hora
• Moneda
• Sí/No
• Objeto OLE
• Hipervínculo
88
Visión de los datos
• Objetivo de un SGBD:
• Proporcionar una visión abstracta de los datos
• Se ocultan los detalles de cómo se almacenan y mantienen los datos.
• Niveles:
• Físico
• Cómo se almacenan los datos.
• Lógico
• Qué datos y qué relaciones se almacenan.
• Vistas
• Subconjunto del nivel lógico.
89
Vistas
CREATE VIEW BLUEDEP AS SELECT *
FROM EMPL
WHERE DEP LIKE 'BLU%;
JOB SAL S 31000 S 30000 C 27000 S 29000 JOB SAL DEP
S 31000 BLU M 32000 RED S 30000 BLU C 27000 GRE S 33000 GRE M 31000 BLU S 32000 RED C 28000 GRE S 30000 RED M 33000 GRE S 31000 RED S 35000 GRE C 27000 BLU S 29000 RED S 29000 BLU
S 31000 BLU S 30000 BLU M 31000 BLU C 27000 BLU S 29000 BLU Columns and rows defined by BLUEDEP
SELECT JOB, SAL FROM BLUEDEP WHERE JOB <> 'M';
90
Modelo relacional
• Los modelos de datos se usan para poder definir una interpretación de los datos conforme a su estructura, relaciones y operaciones que se les pueden aplicar.
• Def: Colección de conceptos que se usan para describir la estructura de una BD.
• La estructura son los tipos de datos, las relaciones y las restricciones.
• Llevan asociados operaciones básicas.
91
Modelo relacional
Se usa una colección de tablas para representar los datos y sus relaciones.
PROPIET1.TABLA_A
COL1 COL2 COL3
ABC 7 1987-11-14 DEF 4 1963-01-01 GHI 6 1946-07-12 JKL 7 1951-12-30 MNO 0 1992-08-12 PROPIET2.TABLA_B Una "BBDD
relacional"
es una "BBDD de Tablas"
"RELACION" = TABLA
COL1 COL2 COL3
ABC 7 1987-11-14 DEF 4 1963-01-01 GHI 6 1946-07-12 JKL 7 1951-12-30 MNO 0 1992-08-12
RDBMS = Sistema de Gestión de Bases de Datos Relacionales
92
Diseño de bases de datos
• Proceso de creación de un esquema de la base de datos.
• Fases:
• Conceptual.
• Lógico.
• Físico.
93
Conceptual: Modelo entidad-relación
Dept Locations
M
Skills
Employees Projects
1
M M
M
M M
1 1
1
1
1
1
1
1 1
A LOCATION HAS MANY
DEPTS
MANY EMPLOYEES
WORK ON MANY PROJECTS
94
Lenguajes de consulta
• QBE (Query By Example)
• Gráfico.
• SQL (Structured Query Language)
• Textual.
95
Lenguaje SQL
Es el lenguaje de facto para el acceso a los datos en las bases de datos relacionales.
Se divide en tres partes:
• Lenguaje de definición de datos (DDL)
• Lenguaje de manipulación de datos (DML)
• Lenguaje de control de datos (DCL)