es un paradigma de programación que usa objetos y sus interacciones, para diseñar aplicaciones y programas informáticos. Está basado en varias técnicas, incluyendo herencia, abstracción, polimorfismo y encapsulamiento. Su uso se popularizó a principios de la década de los años 1990. En la actualidad, existe variedad de lenguajes de programación que soportan la orientación a objetos.
Introducción
Los objetos son entidades que combinan estado (atributo), comportamiento (método) e identidad:
- El estado está compuesto de datos, será uno o varios atributos a los que se habrán asignado unos valores concretos (datos).
- El comportamiento está definido por los procedimientos o métodos con que puede operar dicho objeto, es decir, qué operaciones se pueden realizar con él.
- La identidad es una propiedad de un objeto que lo diferencia del resto, dicho con otras palabras, es su identificador (concepto análogo al de identificador de una variable o una constante).
Los métodos (comportamiento) y atributos (estado) están estrechamente relacionados por la propiedad de conjunto. Esta propiedad destaca que una clase requiere de métodos para poder tratar los atributos con los que cuenta. El programador debe pensar indistintamente en ambos conceptos, sin separar ni darle mayor importancia a alguno de ellos. Hacerlo podría producir el hábito erróneo de crear clases contenedoras de información por un lado y clases con métodos que manejen a las primeras por el otro. De esta manera se estaría realizando una programación estructurada camuflada en un lenguaje de programación orientado a objetos.
La POO difiere de la programación estructurada tradicional, en la que los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida. La programación estructurada anima al programador a pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esos procedimientos manejan. En la programación estructurada sólo se escriben funciones que procesan datos. Los programadores que emplean POO, en cambio, primero definen objetos para luego enviarles mensajes solicitándoles que realicen sus métodos por sí mismos.
Origen
Los conceptos de la programación orientada a objetos tienen origen en Simula 67, un lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard del Centro de Cómputo Noruego en Oslo. En este centro, se trabajaba en simulaciones de naves, que fueron confundidas por la explosión combinatoria de cómo las diversas cualidades de diferentes naves podían afectar unas a las otras. La idea ocurrió para agrupar los diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de objetos de definir sus propios datos y comportamientos. Fueron refinados más tarde en Smalltalk, que fue desarrollado en Simula en Xerox PARC (cuya primera versión fue escrita sobre Basic) pero diseñado para ser un sistema completamente dinámico en el cual los objetos se podrían crear y modificar "en marcha" (en tiempo de ejecución) en lugar de tener un sistema basado en programas estáticos.La programación orientada a objetos tomó posición como el estilo de programación dominante a mediados de los años ochenta, en gran parte debido a la influencia de C++, una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al auge de las Interfaces gráficas de usuario, para las cuales la programación orientada a objetos está particularmente bien adaptada. En este caso, se habla también de programación dirigida por eventos.
Las características de orientación a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, entre otros. La adición de estas características a los lenguajes que no fueron diseñados inicialmente para ellas condujo a menudo a problemas de compatibilidad y en la capacidad de mantenimiento del código. Los lenguajes orientados a objetos "puros", por su parte, carecían de las características de las cuales muchos programadores habían venido a depender. Para saltar este obstáculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en métodos orientados a objetos, pero permitiendo algunas características imperativas de maneras "seguras". El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos pero ahora ha sido esencialmente reemplazado por Java, en gran parte debido a la aparición de Internet, y a la implementación de la máquina virtual de Java en la mayoría de navegadores. PHP en su versión 5 se ha modificado, soporta una orientación completa a objetos, cumpliendo todas las características propias de la orientación a objetos.
Espacio de nombre:
en su acepción más simple, es un conjunto de nombres en el cual todos los nombres son únicos.
Un espacio de nombres es un contexto en el que un grupo de uno o más identificadores pueden existir. Un identificador definido en un espacio de nombres está asociado con ese espacio de nombres. El mismo identificador puede independientemente ser definido en múltiples espacios de nombres, eso es, el sentido asociado con un identificador definido en un espacio de nombres es independiente del mismo identificador declarado en otro espacio de nombres. Los lenguajes que manejan espacio de nombres especifican las reglas que determinan a qué espacio de nombres pertenece una instancia de un identificador.
Por ejemplo, Pedro trabaja para la compañía X y su número de empleado es 123. María trabaja para la compañía Y y su número de empleada también es 123. La razón por la cual Pedro y María pueden ser identificados con el mismo número de empleado es porque trabajan para compañías diferentes. Diferentes compañías simbolizan en este caso diferentes namespaces.
En programas grandes o en documentos no es infrecuente tener cientos o miles de identificadores. Los namespaces (O técnicas similares como la emulación de namespaces) disponen de un mecanismo para ocultar los identificadores locales. Ellos proveen los medios para agrupar lógicamente los identificadores relacionados en sus correspondientes namespaces, haciendo así el sistema más modular.
Muchos lenguajes de programación manejan espacios de nombres. En algunos lenguajes, como C++ o Python, estos identificadores nombrando espacios de nombres están asociados con un espacio de nombres que los agrupa. Así pues, en estos lenguajes, los espacios de nombres se pueden anidar formando un árbol de espacios de nombres. En la raíz de éste árbol se encuentra el espacio de nombres anónimo global.
Comando de Visual Studio:
Backgroundworker: El control BackgroundWorker fue introducido en el .NET Framework 2.0 y permite realizar operaciones costosas o duraderas en un hilo diferente al del interfaz, de manera que la aplicación sigue respondiendo al usuario mientras este trabajo se procesa en segundo plano.
Usando este control, la gestión de hilos está encapsulada en el control de manera que el programador no tiene que lidiar con hilos (threads), invokes o delegados (delegates).
Evento backgroundWorker1_DoWork:
El evento backgroundWorker1_DoWork es desencadenado por el control cuando el método RunWorkerAsync() es invocado. Este método se ejecuta en un segundo hilo que crea el control BackgroundWorker. Al no ser el hilo principal del interfaz, no intentes acceder a ningún control aquí, o si lo haces utiliza para ello un delegado.
Evento backgroundWorker1_ProgressChanged:
Este evento es lanzado en el hilo principal, por lo que aquí SI podemos acceder a controles del formulario de manera segura.Evento backgroundWorker1_RunWorkerCompleted
Este método se ejecuta cuando la tarea ha sido finalizada. Una tarea se finaliza cuando:
- a) termina de manera normal
- b) termina con error
- c) es cancelada.
En el objeto de tipo RunWorkerCompletedEventArgs encontraremos información detallada del tipo de finalización, así como los datos que hemos podido pasar en la propiedad Result.
Button: Este control es el típico botón que aparece en todas las aplicaciones y que al hacer click sobre él nos permite realizar alguna operación concreta, normalmente Aceptar o Cancelar. Aunque según el código que le asociemos podremos realizar las operaciones que queramos.Optionbutton. Este control nos permite elegir una opción entre varias de las que se nos plantean. Cada opción será un control optionbutton diferente.
Bloquear los Controles
Cuando estén situados los controles en el formulario se pueden bloquear para que no puedan moverse de forma accidental.
Cuando actives este botón y mientras no desbloquees los controles utilizando la misma opción no se podrán mover ninguno de los controles del formulario activo.
Sin embargo en si abres otro formulario que no tenga los controles bloqueados si se podrán mover. Si añades más controles a un formulario bloqueado estos quedan bloqueados automáticamente.
CheckBox: permite elegir una opción (activada / desactivada, True/False) que el usuario puede establecer o anular haciendo click. Una X en una casilla de verificación indica que está seleccionada, activada, o con valor True. Cada casilla de verificación es independiente de las demás que puedan existir en el formulario, pudiendo tomar cada una de ellas el valor True o False, a voluntad del operador.
Un control OptionButton muestra una opción que se puede activar o desactivar, pero con dependencia del estado de otros controles OptionButton que existan en el formulario.
Generalmente, los controles OptionButton se utilizan en un grupo de opciones para mostrar opciones de las cuales el usuario sólo puede seleccionar una. Los controles OptionButton se agrupan dibujándolos dentro de un contenedor como un control Frame, un control PictureBox o un formulario. Para agrupar controles OptionButton en un Frame o PictureBox, dibuje en primer lugar el Frame o PictureBox y, a continuación, dibuje dentro los controles OptionButton. Todos los controles OptionButton que están dentro del mismo contenedor actúan como un solo grupo, e independientes de los controles OptionButton de otros grupos distintos.
Aunque puede parecer que los controles OptionButton y CheckBox funcionan de forma similar, hay una diferencia importante: Cuando un usuario selecciona un OptionButton, los otros controles del mismo grupo OptionButton dejan de estas disponibles automáticamente. Por contraste, se puede seleccionar cualquier número de controles CheckBox.
ListBox y ComboBox: Un control ListBox muestra una lista de elementos en la que el usuario puede seleccionar uno o más. Si el número de elementos supera el número que puede mostrarse, se agregará automáticamente una barra de desplazamiento al control ListBox.
Un control ComboBox combina las características de un control TextBox y un control ListBox. Los usuarios pueden introducir información en la parte del cuadro de texto y seleccionar un elemento en la parte de cuadro de lista del control. En resumen, un ComboBox es la combinación de un ListBox, que se comporta como si de un ListBox se tratase, y de un TextBox, con comportamiento análogo a un TextBox sencillo, con la particularidad aquí de que el texto se le puede introducir por teclado, o elegir uno de los que figuran en la parte ListBox del Combo.
HscrollBar y VscrollBar : Son dos controles similares, para introducir un dato cuasi-analógico en una aplicación. Se toman directamente de la caja de herramientas, y tienen un aspecto parecido al de un control de volumen de un equipo de música. El HScrollBar está en posición horizontal, y el VScrollBar en posición vertical.
ColorDialog: El componente ColorDialog de formularios Windows Forms es un cuadro de diálogo preconfigurado que permite que el usuario seleccione un color de una paleta y agregue colores personalizados a la paleta. Es el mismo cuadro de diálogo que se ve en otras aplicaciones para Windows y que permite seleccionar colores. Utilícelo dentro de la aplicación para Windows como una solución sencilla, en lugar de configurar un cuadro de diálogo propio.
ContextMenuStrip: El control ContextMenuStrip está pensado para funcionar de forma transparente con los nuevos controles ToolStrip relacionados, pero puede asociar un ContextMenuStrip con otros controles de forma igualmente sencilla.
ToolStripMenuItem. Representa una opción seleccionable mostrada en un MenuStrip o ContextMenuStrip.
ToolStripDropDown. Representa una control que permite al usuario seleccionar un elemento de la lista que se muestra cuando el usuario hace clic en un ToolStripDropDownButton o en un elemento de menú de nivel superior.
ToolStripDropDownItem. Proporciona la funcionalidad básica para controles derivados de ToolStripItem que muestra los elementos desplegables cuando se hace clic en ellos.
DataGridView: El control DataGridView proporciona una tabla personalizable para mostrar los datos. La clase DataGridView permite personalizar celdas, filas, columnas y bordes mediante propiedades como DefaultCellStyle, ColumnHeadersDefaultCellStyle, CellBorderStyle y GridColor. Para obtener más información, vea Estilo y formato básicos del control DataGridView en formularios Windows Forms.
Puede utilizar un control DataGridView para mostrar datos con o sin un origen de datos subyacente. Sin especificar un origen de datos, puede crear las columnas y filas que contendrán los datos y agregarlas directamente a DataGridView utilizando las propiedades Rows y Columns. También puede utilizar la colección Rows para obtener acceso a los objetos DataGridViewRow y la propiedad DataGridViewRow.Cells para leer o escribir directamente los valores de celda. El indizador Item también proporciona acceso directo a las celdas.
DataTimePicker: El control DateTimePicker se utiliza para permitir al usuario seleccionar una fecha y una hora, y mostrarlas en el formato especificado. Es posible limitar las fechas y las horas que se pueden seleccionar al establecer las propiedades MinDate y MaxDate.
Para cambiar la presentación de la parte del control que corresponde al calendario, establezca las propiedades CalendarForeColor, CalendarFont, CalendarTitleBackColor, CalendarTitleForeColor, CalendarTrailingForeColor y CalendarMonthBackground.
La propiedad Format establece la clase DateTimePickerFormat del control. La propiedad Format predeterminada de la fecha es DateTimePickerFormat.Long. Si la propiedad Format se establece en DateTimePickerFormat.Custom, se puede crear un estilo de formato propio mediante el establecimiento de la propiedad CustomFormat y la construcción de una cadena de formato personalizado. La cadena de formato personalizado puede ser una combinación de caracteres de campos personalizados y de otros literales de cadena. Por ejemplo, se puede presentar la fecha como "June 01, 2001 - Friday" al establecer la propiedad CustomFormat en "MMMM dd, yyyy - dddd". Para obtener más información, vea Cadenas de formato de fecha y hora.
Si desea utilizar un control de botón de número (también conocido como control de flechas) para ajustar el valor de fecha y hora, establezca la propiedad ShowUpDown en true. El control de calendario no se desplegará cuando se seleccione el control. Para ajustar la fecha y la hora, se puede seleccionar cada elemento por separado y utilizar los botones de flecha arriba y abajo para cambiar el valor.
Si se necesita aplicar un formato de fecha personalizado (por ejemplo, limitando la selección a una sola fecha), se puede utilizar un control DateTimePicker en lugar de un MonthCalendar. Al utilizar DateTimePicker, se limitará la necesidad de validar muchos datos de valores de fecha y hora.
DomainUpDown: Un control DomainUpDown muestra un único valor de cadena seleccionado de una colección Object haciendo clic en los botones Arriba o Abajo del control. El usuario también puede escribir texto en el control, a menos que se establezca la propiedad ReadOnly en true (la cadena escrita debe coincidir con uno de los elementos de la colección para que pueda aceptarse). Al seleccionar un elemento, el objeto se convierte a un valor de cadena para que pueda mostrarse en el cuadro de número.
Para crear una colección de objetos que se mostrarán en el control DomainUpDown, es posible agregar o quitar los elementos por separado mediante los métodos Add y Remove. Se puede llamar a dichos métodos en un controlador de eventos, como el correspondiente al evento Click de un botón. La colección de objetos puede ordenarse alfabéticamente estableciendo la propiedad Sorted en true. Cuando se establece la propiedad Wrap en true, si se desplaza la lista más allá del primer o último objeto de la colección, la lista comenzará con el primer o último objeto, respectivamente, y parecerá avanzar en una lista continua.
Cuando se llama a los métodos UpButton o DownButton, bien en el código o mediante el clic de los botones Arriba o Abajo, se llama a UpdateEditText para actualizar la nueva cadena. Si se establece UserEdit en true, se compara la cadena con uno de los valores de la colección antes de actualizar el texto mostrado en el control.
TextBox: TextBox es un control compuesto de varios componentes encapsulados. Por consiguiente, algunos eventos no traspasan hasta el control contenedor porque están administrados por elementos secundarios encapsulados. Debido a esto, los programadores de aplicaciones deben realizar escuchas para la versión de túnel de un evento (se indica por el prefijo "Vista previa").
TextBox sólo admite texto sin formato. Para aplicaciones que requieran compatibilidad con contenido más complejo, consulte RichTextBox. Para aplicaciones que necesitan aceptar contraseñas u otras entradas confidenciales, vea PasswordBox.
La alineación horizontal y vertical de texto en TextBox se realiza mediante las propiedades HorizontalContentAlignment y VerticalContentAlignment. La alineación de TextBox en el diseño de la página se realiza mediante las propiedades HorizontalAlignment y VerticalAlignment.
La mejor manera de ocultar el borde alrededor de TextBox es establecer la propiedad BorderThickness de TextBox en 0.
CheckedListBox: Este control presenta una lista de elementos por los que el usuario se puede desplazar mediante el teclado o la barra de desplazamiento situada a la derecha del control. El usuario puede colocar una marca de verificación junto a uno o más elementos, y puede explorar los elementos activados con CheckedListBox.CheckedItemCollection y CheckedListBox.CheckedIndexCollection.
Para agregar objetos a la lista en tiempo de ejecución, asigne una matriz de referencias a objetos con el método AddRange. De este modo la lista muestra el valor de cadena predeterminado para cada objeto. Es posible agregar elementos individuales a la lista con el método Add.
El objeto CheckedListBox admite tres estados a través de la enumeración CheckState: Checked, Indeterminate y Unchecked. Hay que establecer el estado de Indeterminate en el código, ya que la interfaz de usuario de CheckedListBox no proporciona ningún mecanismo para ello.
Si UseTabStops es true, CheckedListBox reconocerá y extenderá los caracteres de tabulación en el texto de un elemento, creando columnas. Sin embargo, las posiciones de tabulación están preestablecidas y no pueden modificarse.
Label: Este control es también uno de los más utilizados, aunque su utilidad queda restringida a la visualización de datos en el mismo, no permitiendo la introducción de datos por parte del usuario.
FolderBrowserDialog: El componente FolderBrowserDialog de formularios Windows Forms muestra una interfaz con la que los usuarios pueden buscar y seleccionar una carpeta o crear una nueva. Es un complemento del componente OpenFileDialog (Componente, formularios Windows Forms), que se utiliza para buscar y seleccionar archivos.
FontDialog: El componente FontDialog de los formularios Windows Forms es un cuadro de diálogo preconfigurado. Es el mismo cuadro de diálogo Fuente que expone el sistema operativo Windows. El componente hereda de la clase CommonDialog.
ImgaeList: se utiliza para almacenar imágenes que, a partir de ese momento, podrán mostrar otros. Una lista de imágenes permite escribir código para un catálogo de imágenes único y consistente.
TabControl: TabControl contiene páginas de fichas, representadas por objetos TabPage, que se agregan mediante la propiedad TabPages. El orden de las páginas de fichas de esta colección refleja el orden en que las fichas aparecen en el control.
El usuario puede cambiar el objeto TabPage actual haciendo clic en una de las fichas del control. También se puede cambiar mediante programación el objeto TabPage actual utilizando una de las propiedades de TabControl siguientes:
En Microsoft .NET Framework versión 2.0, también puede utilizar uno de los métodos siguientes:
En .NET Framework 2.0, puede responder cuando la ficha actual cambie controlando uno de los eventos siguientes:
· Selected
GorupBox: GroupBox es HeaderedContentControl, lo que significa que las propiedades Header y Content pueden ser de cualquier tipo (como cadena, imagen o panel). Para obtener más información, vea la clase HeaderedContentControl. La ilustración siguiente es un ejemplo de GroupBox que contiene TabControl y Button que se incluyen en StackPanel.
El estilo predeterminado de control podría establecer las propiedades de dependencia para este control. Si un estilo predeterminado establece una propiedad, ésta podría cambiar con respecto a su valor predeterminado cuando el control aparece en la aplicación. Se determina el estilo predeterminado por el tema de escritorio que se usa cuando la aplicación se está ejecutando. Para obtener más información, vea Default WPF Themes.
HelpProvider: Cada instancia de HelpProvider mantiene una colección de referencias a los controles asociados a ella. Para asociar un archivo de ayuda al objeto HelpProvider, establezca la propiedad HelpNamespace. Para especificar el tipo de ayuda que se desea proporcionar, llame al método SetHelpNavigator y asigne un valor de HelpNavigator al control especificado. Para proporcionar la palabra clave o tema de la ayuda, llame al método SetHelpKeyword. Para abrir la ayuda sobre un tema concreto, la palabra clave se debe pasar en el formulario topicName.htm.
Para asociar una cadena de Ayuda específica a un control, utilice el método SetHelpString. La cadena que se asocia a un control utilizando este método se muestra en una ventana emergente cuando el usuario presiona la tecla F1 mientras el control tiene el foco.
Si no se ha establecido la propiedad HelpNamespace, se debe utilizar el método SetHelpString para proporcionar el texto de ayuda. Si ha establecido tanto la propiedad HelpNamespace como el texto de Ayuda, tendrá prioridad la Ayuda de la propiedad HelpNamespace.
El control HelpProvider llama a los métodos de la clase Help para proporcionar la funcionalidad de ayuda.
ListView: La propiedad View permite especificar el tipo de presentación que utiliza el control ListView para mostrar elementos. Se puede establecer la propiedad View para mostrar los elementos con iconos grandes o pequeños, o en una lista vertical. La opción más completa es la vista de detalles, que permite ver no sólo los elementos sino también cualquier subelemento especificado para cada elemento. Los elementos se muestran en una cuadrícula, con cada elemento presentado de forma vertical y sus subelementos en una columna, con encabezados de columna. La vista de detalles es una forma perfecta de mostrar información de base de datos a un usuario. Con Windows XP y Windows Server 2003, se pueden presentar también los elementos como mosaicos que equilibran la información gráfica y textual, mostrando un icono grande junto con información de los subelementos elegidos. Para habilitar la vista en mosaico, la aplicación debe llamar al método Application.EnableVisualStyles. La vista de imágenes pequeñas muestra cada elemento con un icono e información textual a la derecha del icono. La vista de imágenes grandes muestra cada elemento con un icono e información textual debajo del icono. El tamaño de los iconos para la lista de imágenes lo especifica el valor de la propiedad ImageSize de ImageList para las propiedades SmallImageList o LargeImageList.
MaskedTextBox: El control TextBox es el control más utilizado en el programa de la ventana. También causan muchos problemas ya sea de control de calidad o el usuario, ya que los datos no válidos que hayan sido inscritos. Usando el control de enmascarados va a resolver estos problemas y ahorrar un montón de tiempo para el desarrollador.
Este control enmascarados usuario inteligente mejora la función del control TextBox, que puede enmascarar la fecha, la dirección IP, número de seguro social, número de teléfono, dígito decimal, y compruebe la validación, automáticamente ubicación delimitar.
La propiedad enmascarados se establece en None por defecto y el control funciona como un normal control TextBox.
Si establece la propiedad de DateOnly, el control se enmascara a Formato de fecha.
MenuStrip: MenuStrip es el contenedor de nivel superior que reemplaza MainMenu. También proporciona características de control de claves y de la interfaz de múltiples documentos (MDI). Funcionalmente, ToolStripDropDownItem y ToolStripMenuItem cooperan con MenuStrip, aunque se derivan de ToolStripItem. Este control enmascarados usuario inteligente mejora la función del control TextBox, que puede enmascarar la fecha, la dirección IP, número de seguro social, número de teléfono, dígito decimal, y compruebe la validación, automáticamente ubicación delimitar.
La propiedad enmascarados se establece en None por defecto y el control funciona como un normal control TextBox.
Si establece la propiedad de DateOnly, el control se enmascara a Formato de fecha.
Los elementos siguientes están diseñados específicamente para trabajar sin problemas con ToolStripSystemRenderer y ToolStripProfessionalRenderer en todas las orientaciones. Están disponibles de forma predeterminada en tiempo de diseño para el control MenuStrip:
El control MenuStrip representa el contenedor para la estructura de menú de un formulario. Puede agregar objetos ToolStripMenuItem al objeto MenuStrip, que representan los comandos de menú individuales de la estructura de menú. Cada objeto ToolStripMenuItem puede ser un comando de la aplicación o un menú primario para otros elementos de submenú.
Aunque MenuStrip reemplaza y agrega funcionalidad al control MainMenu de versiones anteriores, se conserva MainMenu a efectos de compatibilidad con versiones anteriores y uso futuro, en su caso.
MonthCalendar: muestra una intuitiva interfaz gráfica de usuario para que los usuarios vean y establezcan información relativa a fechas. El control muestra una cuadrícula que contiene los días numerados del mes actual, organizados en columnas bajo los días de la semana. Para seleccionar un mes diferente, puede hacer clic en los botones de fecha a los lados del título del mes. A diferencia del control DateTimePicker, de apariencia similar, con este control es posible seleccionar un intervalo de fechas; sin embargo, el control DateTimePicker le permite establecer horas y fechas.
NotifyIcon: Los iconos del área de notificación son accesos directos a procesos que se ejecutan en segundo plano como, por ejemplo, un programa de protección antivirus o un control de volumen. Estos procesos no incluyen sus propias interfaces de usuario. La clase NotifyIcon proporciona una manera de programar en esta funcionalidad. La propiedad Icon define el icono que aparece en el área de notificación. Los menús emergentes de un icono se definen con la propiedad ContextMenu. La propiedad Text asigna texto de información sobre herramientas. Para que el icono aparezca en el área de notificación, la propiedad Visible debe establecerse en true.
NumericUpDown: El control Microsoft.Office.Tools.Excel.Controls.NumericUpDown es diferente de un control System.Windows.Forms.NumericUpDown. El objeto Microsoft.Office.Tools.Excel.Controls.NumericUpDown tiene miembros adicionales que permiten que se agregue a una hoja de cálculo de Excel y le proporcionan métodos y propiedades adicionales.
No utilice el constructor New para crear un nuevo control NumericUpDown. Utilice el método AddNumericUpDown para agregar un nuevo control NumericUpDown a una hoja de cálculo.
OpenFileDialog: Esta clase permite comprobar si existe un archivo y abrirlo. La propiedad ShowReadOnly determina si aparece una casilla de verificación de sólo lectura en el cuadro de diálogo. La propiedad ReadOnlyChecked indica si la casilla de verificación de sólo lectura está activada.
La mayor parte de la funcionalidad de esta clase se encuentra en la clase FileDialog.
Si desea dar al usuario la capacidad de seleccionar una carpeta en lugar de un archivo, utilice FolderBrowserDialog en su lugar.
PageSetupDialog: El cuadro de diálogo PageSetupDialog modifica la información PageSettings y PrinterSettings para un determinado documento. El usuario puede habilitar secciones del cuadro de diálogo para manipular la impresión y los márgenes, orientación del papel, tamaño y fuente, y para mostrar botones de ayuda y de la red. La propiedad MinMargins define los márgenes mínimos de un usuario puede seleccionar.
Cuando se crea una instancia de la clase PageSetupDialog, la lectura / escritura de las propiedades se ajustan a los valores iniciales. Para obtener una lista de estos valores, vea el constructor PageSetupDialog.
Debido a que un PageSetupDialog necesidades configuración de página para mostrar, es necesario establecer la propiedad Document, PrinterSettings o PageSettings antes de llamar a ShowDialog, de lo contrario, se producirá una excepción.
Panel: Panel es un control que contiene otros controles. Se puede utilizar Panel para agrupar colecciones de controles, como un grupo de controles RadioButton. Al igual que sucede con otros controles contenedores, como el control GroupBox, si la propiedad Enabled del control Panel está establecida en false, los controles contenidos dentro de Panel también se deshabilitarán.
El control Panel se muestra de forma predeterminada sin bordes. Para proporcionar un borde estándar o tridimensional, se utiliza la propiedad BorderStyle para distinguir el área del panel de otras áreas del formulario. Debido a que el control Panel deriva de la clase ScrollableControl, se puede utilizar la propiedad AutoScroll para habilitar barras de desplazamiento en el control Panel. Cuando la propiedad AutoScroll está establecida en true, es posible desplazarse a cualquier control situado dentro de Panel, aunque fuera de su región visible, con las barras de desplazamiento proporcionadas.
El control Panel no muestra ningún título. Si necesita un control similar a Panel que puede mostrar un título, vea el control GroupBox.
PictureBox: Se suele utilizar el control PictureBox para mostrar gráficos de un archivo de mapa de bits, metarchivo, icono, JPEG, GIF o PNG.
Establezca la propiedad Image en el objeto Image que desea mostrar, ya sea en tiempo de diseño o en tiempo de ejecución. Además, puede especificar la imagen estableciendo la propiedad ImageLocation y cargar la imagen de forma sincrónica utilizando el método Load o de forma asincrónica mediante el método LoadAsync.
PrintDialog: Cuando se crea una instancia de PrintDialog, se establecen las propiedades de lectura y escritura en sus valores iniciales. Para obtener una lista de esos valores, vea el constructor PrintDialog. Para obtener la configuración de impresora que el usuario ha modificado con PrintDialog, utilice la propiedad PrinterSettings.
PrintDocument: Normalmente, se crea una instancia de la clase PrintDocument, se establecen las propiedades que describen cómo imprimir, y llame al método de impresión para iniciar el proceso de impresión. Controle el evento PrintPage donde se especifica que la salida de impresión, utilizando los gráficos incluidos en el PrintPageEventArgs.
Para obtener más información sobre la impresión, consulte la información general de espacio de nombres System.Drawing.Printing.
PrintPreviewDialog: Cuando se crea una instancia de la clase PrintPreviewDialog, se establecen algunas propiedades de lectura y escritura en sus valores iniciales. Para obtener una lista de esos valores, vea el constructor PrintPreviewDialog.
ProgressBar: Un control ProgressBar indica visualmente el progreso de una operación larga en uno de los tres estilos siguientes:
· Bloques segmentados que aumentan en pasos de izquierda a derecha.
· Una barra continua que se rellena de izquierda a derecha.
· Un bloque que se desplaza por una ProgressBar en modo de marquesina.
La propiedad Style determina el estilo de ProgressBar que se muestra. Tenga en cuenta que el control ProgressBar sólo puede tener orientación horizontal. Para obtener un ejemplo de cómo crear un ProgressBar orientado verticalmente, vea la clase ProgressBarRenderer. Normalmente, el control ProgressBar se utiliza cuando una aplicación realiza tareas como copiar archivos o imprimir documentos. Los usuarios de una aplicación podrían pensar que ésta no responde si no se les ofrece una señal visual. Utilizando el control ProgressBar en la aplicación, se indica al usuario que la aplicación responde y que está realizando una tarea larga.Las propiedades Maximum y Minimum definen el intervalo de valores que representarán el progreso de una tarea. Normalmente, la propiedad Minimum se establece en 0, y la propiedad Maximum se establece en un valor que indica que la tarea ha terminado. Por ejemplo, para mostrar correctamente el progreso al copiar un grupo de archivos, la propiedad Maximum se podría establecer en el número total de archivos que se van a copiar.
La propiedad Value representa el progreso que la aplicación realiza para terminar la operación. El valor mostrado por ProgressBar sólo aproxima el valor actual de la propiedad Value. Según el tamaño del control ProgressBar, la propiedad Value determina cuándo se debe mostrar el siguiente bloque o aumentar el tamaño de la barra.
Existen varias maneras de modificar el valor que muestra el control ProgressBar además de modificar la propiedad Value directamente. Se puede utilizar la propiedad Step para especificar el valor con que se incrementará la propiedad Value y, después, llamar al método PerformStep para incrementar ese valor. Para variar el valor de incremento, utilice el método Increment y especifique el valor con que se incrementará la propiedad Value.
PropertyGrid: Grid es una de las de control nos ocupamos de todo el tiempo para escribir aplicaciones de interfaz de usuario. Este artículo y el código fuente adjunto muestra cómo utilizar el control de la propiedad de cuadrícula en las aplicaciones.
RadioButton: El control RadioButton puede mostrar texto, una imagen, o ambas cosas.
Cuando el usuario selecciona un botón de opción (también conocido como un botón de radio) dentro de un grupo, los otros se borran automáticamente. Todos los controles RadioButton de un contenedor determinado, como un formulario, constituyen un grupo. Para crear varios grupos en un formulario, coloque cada grupo en su propio contenedor, como un control GroupBox o Panel.
Controles RadioButton y CheckBox tienen una función similar: ofrecen opciones que un usuario puede activar o desactivar. La diferencia es que varios controles CheckBox se puede seleccionar al mismo tiempo, pero los botones de opción se excluyen mutuamente.
Utilice la propiedad Checked para obtener o establecer el estado de un RadioButton. El aspecto del botón de opción se puede modificar para que aparezca como un botón de activación de estilo o como un botón de opción estándar al establecer la propiedad Appearance.
Cuando el usuario selecciona un botón de opción (también conocido como un botón de radio) dentro de un grupo, los otros se borran automáticamente. Todos los controles RadioButton de un contenedor determinado, como un formulario, constituyen un grupo. Para crear varios grupos en un formulario, coloque cada grupo en su propio contenedor, como un control GroupBox o Panel.
Controles RadioButton y CheckBox tienen una función similar: ofrecen opciones que un usuario puede activar o desactivar. La diferencia es que varios controles CheckBox se puede seleccionar al mismo tiempo, pero los botones de opción se excluyen mutuamente.
Utilice la propiedad Checked para obtener o establecer el estado de un RadioButton. El aspecto del botón de opción se puede modificar para que aparezca como un botón de activación de estilo o como un botón de opción estándar al establecer la propiedad Appearance.
ReportViewer: ReportViewer es un control de libre distribución que permite incrustar informes en las aplicaciones desarrolladas con. NET Framework. Los informes se han diseñado con la simplicidad de arrastrar y soltar utilizando el Diseñador de informes incluidos en Visual Studio 2010.
Ver imágenes de algunas aplicaciones que tienen el control ReportViewer incrustado en ellos.
El control ReportViewer ofrece los siguientes beneficios:
* Procesos de datos de manera eficiente. El motor de informes integrado en ReportViewer pueden realizar operaciones tales como el filtrado, clasificación, agrupación y agregación.
* Soporta una variedad de maneras de presentar los datos. Usted puede presentar los datos como listas, tablas, diagramas y matrices (también conocido como tablas de referencias cruzadas.)
* Agrega atractivo visual. Usted puede especificar las fuentes, colores, estilos de borde, imágenes de fondo, etc para hacer su informe visualmente atractivo.
* Permite la interactividad en los informes. Usted puede tener secciones plegables, mapa del documento, marcadores, etc ordenación interactiva en su informe.
* Soporta el formato condicional. Puedes integrar las expresiones en el informe para cambiar el estilo de visualización dinámica en función de valores de datos.
* Soporta la impresión y vista preliminar.
* Soporta la exportación a Excel, Word y PDF. (Palabra de exportación en Visual Studio 2010 en adelante.)
El control puede procesar y hacer informes de forma independiente mediante un motor integrado ("modo local") o puede mostrar los informes que se procesan y se representan en un servidor de informes ("el modo de control remoto). Hay un WinForms y WebForms una versión del control.
SaveFileDialog: Esta clase permite abrir y sobrescribir un archivo existente o crear un archivo nuevo. Ver imágenes de algunas aplicaciones que tienen el control ReportViewer incrustado en ellos.
El control ReportViewer ofrece los siguientes beneficios:
* Procesos de datos de manera eficiente. El motor de informes integrado en ReportViewer pueden realizar operaciones tales como el filtrado, clasificación, agrupación y agregación.
* Soporta una variedad de maneras de presentar los datos. Usted puede presentar los datos como listas, tablas, diagramas y matrices (también conocido como tablas de referencias cruzadas.)
* Agrega atractivo visual. Usted puede especificar las fuentes, colores, estilos de borde, imágenes de fondo, etc para hacer su informe visualmente atractivo.
* Permite la interactividad en los informes. Usted puede tener secciones plegables, mapa del documento, marcadores, etc ordenación interactiva en su informe.
* Soporta el formato condicional. Puedes integrar las expresiones en el informe para cambiar el estilo de visualización dinámica en función de valores de datos.
* Soporta la impresión y vista preliminar.
* Soporta la exportación a Excel, Word y PDF. (Palabra de exportación en Visual Studio 2010 en adelante.)
El control puede procesar y hacer informes de forma independiente mediante un motor integrado ("modo local") o puede mostrar los informes que se procesan y se representan en un servidor de informes ("el modo de control remoto). Hay un WinForms y WebForms una versión del control.
La mayor parte de la funcionalidad de esta clase se encuentra en la clase FileDialog.
SplitContainer: se puede considerar como un elemento compuesto: se trata de dos paneles separados por una barra movible. Cuando el puntero del mouse está encima de la barra, cambia de forma para indicar que la barra es movible.
El control SplitContainer permite crear interfaces de usuario complejas; con frecuencia, una selección en un panel determina qué objetos se muestran en el otro panel. Esta organización es muy eficaz para mostrar y explorar información. Disponer de dos paneles permite agregar información en las áreas y la barra o "divisor" facilita al usuario la tarea de cambiar el tamaño de los paneles.
StatusStrip: StatusStrip reemplaza el control StatusBar. Las características especiales de StatusStrip incluyen un diseño de tabla personalizada, compatibilidad con los controles de tamaño y movimiento del formulario y con la propiedad Spring, que permite que ToolStripStatusLabel rellene automáticamente espacio disponible.
Los elementos siguientes están diseñados específicamente para trabajar sin problemas con ToolStripSystemRenderer y ToolStripProfessionalRenderer en todas las orientaciones. Están disponibles de forma predeterminada en tiempo de diseño para el control StatusStrip:
Los controles StatusStrip muestran información sobre objetos que se van a visualizar en una ventana o cuadro de diálogo Form, los componentes del objeto o información contextual respecto a esa operación del objeto dentro de la aplicación. Normalmente, un control StatusStrip está compuesto de objetos ToolStripStatusLabel, que muestran texto, iconos o ambos. El control StatusStrip también puede contener los controles: ToolStripDropDownButton, ToolStripSplitButton y ToolStripProgressBar.
El control StatusStrip predeterminado no tiene ningún panel. Para agregar paneles a un StatusStrip, utilice el método ToolStripItemCollection.AddRange en tiempo de diseño, o utilice Editor de la colección de elementos StatusStrip en tiempo de diseño para agregar, quitar o reorganizar elementos y modificar propiedades. Utilice el Tareas de StatusStrip (Cuadro de diálogo) en tiempo de diseño para ejecutar los comandos comunes.
Aunque el control StatusStrip reemplaza y amplía al control StatusBar respecto a las versiones anteriores, StatusBar se conserva a efectos de compatibilidad con versiones anteriores y uso futuro, si se desea.
Timer: El componente Timer es un temporizador basado en servidor que permite especificar un intervalo recurrente en el que se provoca el evento Elapsed en la aplicación. Entonces, se puede controlar este evento para proporcionar un procesamiento normal. Por ejemplo, supongamos que un servidor crítico debe mantenerse en funcionamiento las 24 horas del día y los 7 días de la semana. Puede crearse un servicio que utilice Timer para comprobar periódicamente el servidor y asegurarse de que el sistema se encuentra en funcionamiento. Si el sistema no responde, el servicio podría intentar reiniciar el servidor o notificárselo a un administrador.
El Timer basado en servidor está diseñado para utilizarlo con subprocesos de trabajo en un entorno multiproceso. Los temporizadores basados en servidor pueden desplazarse entre subprocesos para controlar el evento Elapsed provocado, dando lugar a una mayor precisión que la proporcionada por los temporizadores de Windows al provocar el evento en el momento exacto. Para obtener más información sobre los temporizadores basados en servidor, vea Introducción a los temporizadores basados en servidor.
El componente Timer provoca el evento Elapsed, que se basa en el valor de la propiedad Interval. Se puede controlar este evento para realizar el procesamiento que se necesite. Por ejemplo, si se supone que se tiene una aplicación de ventas en línea que envía continuamente pedidos de ventas a una base de datos. El servicio que recopila las instrucciones de envío funciona con lotes de pedidos, en vez de procesar cada pedido individualmente. Se puede utilizar Timer para iniciar el procesamiento de lotes cada 30 minutos.
ToolStrip: ToolStrip es la clase base para MenuStrip, StatusStrip y ContextMenuStrip.
Utilice ToolStrip y sus clases asociadas en nuevas aplicaciones de Windows Forms para crear barras de herramientas que pueden tener Windows XP, Office, Internet Explorer o una apariencia y un comportamiento personalizado, todos con o sin temas, y con compatibilidad para desbordamiento y reorganización de elementos en tiempo de ejecución. Los controles ToolStrip también proporcionan una experiencia en tiempo de diseño enriquecida que incluye la activación y edición en contexto, diseño personalizado y uso compartido de espacio horizontal o vertical dentro de un ToolStripContainer especificado.
La clase ToolStrip proporciona muchos miembros que administran el dibujo y la entrada de datos mediante mouse y teclado, además de la funcionalidad de arrastrar y colocar. Utilice la clase ToolStripRenderer con la clase ToolStripManager para tener aún más control y posibilidad de personalización del estilo de dibujo y de diseño de todos los controles ToolStrip en un formulario Windows Forms.
Los elementos siguientes están diseñados específicamente para trabajar sin problemas con ToolStripSystemRenderer y ToolStripProfessionalRenderer en todas las orientaciones. Están disponibles de forma predeterminada en tiempo de diseño para ToolStrip:
Puede unir controles ToolStrip en un ToolStripContainer especificado y combinar controles ToolStrip entre sí. Utilice ToolStripPanel en lugar de ToolStripContainer para las aplicaciones de interfaz de múltiples documentos (MDI). Normalmente, ToolStrip no participa en el orden de tabulación a menos que tenga una posición absoluta en lugar de estar acoplado o en un ToolStripPanel.
Utilice la clase ToolStripControlHost para hospedar cualquier otro control de formularios Windows Forms en ToolStrip.
De forma predeterminada, ToolStrip tiene un búfer doble y saca partido de la configuración de OptimizedDoubleBuffer.
Aunque el control ToolStrip reemplaza y agrega funcionalidad al control ToolBar de versiones anteriores, se conserva ToolBar a efectos de compatibilidad con versiones anteriores y uso futuro, en su caso.
ToolStripContainer: ToolStripContainer es similar a SplitContainer. Utiliza cuatro paneles laterales acoplados (instancias de ToolStripPanel) y un panel central (una instancia de ToolStripContentPanel) para crear una organización típica. No puede quitar los paneles laterales, pero puede ocultarlos si establece sus propiedades TopToolStripPanelVisible, BottomToolStripPanelVisible, LeftToolStripPanelVisible y RightToolStripPanelVisible respectivas en false. De manera predeterminada, cada una de estas propiedades es true en tiempo de diseño. También en tiempo de diseño, el control ToolStripContainer aparece con su panel superior ya expandido. No puede quitar ni ocultar ToolStripContentPanel. Puede organizar uno o varios controles ToolStrip, MenuStrip o StatusStrip en los paneles laterales y utilizar el panel central para otros controles. ToolStripContentPanel también facilita compatibilidad con el representador en el cuerpo del formulario para obtener una apariencia coherente.
ToolStripContainer no admite las aplicaciones de interfaz de múltiples documentos (MDI). Utilice ToolStripPanel para las aplicaciones MDI.
ToolTip: es una herramienta de ayuda visual patentada por Microsoft el 19 de diciembre de 2002 (patente 20020191027 (parece que esto último no es cierto, ver el texto de la patente 20020191027)), que funciona al situar o pulsar con el ratón sobre algún elemento gráfico, mostrando una ayuda adicional para informar al usuario de la finalidad del elemento sobre el que se encuentra.
Los tooltip son una variación de los globos de ayuda y es un complemento muy usado en programación, dado que proporcionan información adicional sin necesidad de que el usuario la solicite.
TrackBar: TrackBar es un control desplazable similar al control ScrollBar. Para configurar los intervalos entre los que se desplaza el valor de la propiedad Value de una barra de seguimiento, establezca la propiedad Minimum para especificar el extremo inferior del intervalo y la propiedad Maximum para especificar el extremo superior del intervalo.
La propiedad LargeChange define el incremento que se debe sumar o restar de la propiedad Value al hacer clic en uno de los lados del cuadro de desplazamiento. La barra de seguimiento se puede mostrar horizontal o verticalmente.
Este control se puede utilizar para entrar los datos numéricos obtenidos mediante la propiedad Value. Estos datos numéricos se pueden mostrar en un control o se pueden utilizar en el código.
TreeView: El control TreeView se utiliza para mostrar datos jerárquicos, tales como una tabla de contenido o un directorio de archivos, en una estructura de árbol y admite las siguientes características:
· Enlace de datos que permite enlazar los nodos del control a datos XML, tabulares o relacionales.
· Exploración del sitio mediante la integración con el control SiteMapDataSource.
· Texto de nodo que se puede mostrar como texto sin formato o hipervínculos.
· Acceso mediante programación al modelo de objetos TreeView para crear árboles, rellenar nodos, establecer propiedades, etc., de forma dinámica.
· Relleno de nodos del lado cliente (en exploradores compatibles).
· La capacidad para mostrar una casilla de verificación al lado de cada nodo.
· Aspecto personalizable por medio temas, imágenes definidas por el usuario y estilos.
WebBrowser: El control WebBrowser le permite alojar páginas Web y otros documentos habilitados por explorador de las aplicaciones de Windows Forms. Puede utilizar el control WebBrowser, por ejemplo, para proporcionar ayuda a los usuarios basada en HTML integrado o funcionalidad de exploración Web en la aplicación. Además, puede utilizar el control WebBrowser para agregar los controles basados en Web existentes a las aplicaciones cliente de formularios Windows Forms.Lenguaje SQL:
es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones en éstas. Una de sus características es el manejo del álgebra y el cálculo relacional permitiendo efectuar consultas con el fin de recuperar -de una forma sencilla- información de interés de una base de datos, así como también hacer cambios sobre ella.
Orígenes y evolución
Los orígenes del SQL están ligados a las de las bases de datos relacionales. En 1970 E. F. Codd propone el modelo relacional y asociado a éste un sublenguaje de acceso a los datos basado en el cálculo de predicados. Basándose en estas ideas, los laboratorios de IBM definen el lenguaje SEQUEL (Structured English QUEry Language) que más tarde sería ampliamente implementado por el sistema de gestión de bases de datos (SGBD) experimental System R, desarrollado en 1977 también por IBM. Sin embargo, fue Oracle quien lo introdujo por primera vez en 1979 en un programa comercial.
El SEQUEL terminaría siendo el predecesor de SQL, siendo éste una versión evolucionada del primero. El SQL pasa a ser el lenguaje por excelencia de los diversos sistemas de gestión de bases de datos relacionales surgidos en los años siguientes y es por fin estandarizado en 1986 por el ANSI, dando lugar a la primera versión estándar de este lenguaje, el "SQL-86" o "SQL1". Al año siguiente este estándar es también adoptado por la ISO.
Sin embargo, este primer estándar no cubre todas las necesidades de los desarrolladores e incluye funcionalidades de definición de almacenamiento que se consideraron suprimir. Así que en 1992 se lanza un nuevo estándar ampliado y revisado del SQL llamado "SQL-92" o "SQL2".
En la actualidad el SQL es el estándar de facto de la inmensa mayoría de los SGBD comerciales. Y, aunque la diversidad de añadidos particulares que incluyen las distintas implementaciones comerciales del lenguaje es amplia, el soporte al estándar SQL-92 es general y muy amplio.
Características generales del SQL
El SQL es un lenguaje de acceso a bases de datos que explota la flexibilidad y potencia de los sistemas relacionales permitiendo gran variedad de operaciones en éstos últimos.
Es un lenguaje declarativo de "alto nivel" o "de no procedimiento", que gracias a su fuerte base teórica y su orientación al manejo de conjuntos de registros, y no a registros individuales, permite una alta productividad en codificación y la orientación a objetos. De esta forma una sola sentencia puede equivaler a uno o más programas que se utilizarían en un lenguaje de bajo nivel orientado a registros.
Relaccion entre tablas:
Para que los datos de las tablas se puedan seleccionar, encontrar y procesar de forma rápida y eficaz, es necesario que las talas no se encuentren aisladas unas de otras. Las tablas tienen que estar relacionadas con otras formando estructuras relacionales. La relación es una asociación establecida entre campos comunes (columnas) en dos tablas. Los campos que entran en relación pueden llamarse de distinta manera, pero tienen que ser del mismo tipo de datos. La relación permite al motor de Acces, encontrar datos relacionados en ambas tablas. Por ejemplo podemos encontar NOMBRE, APELLIDO (de la tabla EMPLEADO_PERSONAL), SALARIO, y DEPART (de la tabla EMPLEADO_LABORAL) de uno o varios empleados.
Las relaciones pueden ser de tres tipos:
- 1. De uno a uno.
- 2. De uno a varios.
- 3. De varios a varios.
- 4. Indeterminada, indefinida o inconsistente.
A la hora de establecer relaciones entre tablas pueden presentarse tres situaciones diferentes:
====== Relación un======
La relación uno a varios es el tipo de relación más común. En este tipo de relación, un registro de la Tabla A puede tener muchos registros coincidentes en la Tabla B, pero un registro de la Tabla B sólo tiene un registro coincidente en la Tabla A.
Relación uno a uno
En una relación uno a uno, cada registro de la Tabla A sólo puede tener un registro coincidente en la Tabla V, y viceversa. Este tipo de relación no es habitual, debido a que la mayoría de la información relacionada de esta forma estaría en una sola tabla. Puede utilizar la relación uno a uno para dividir una tabla con muchos campos, para aislar parte de una tabla puto por razones de seguridad o para almacenar información que sólo se aplica a un subconjunto de la tabla principal. Por ejemplo, puede crear una tabla que registre los empleados acogidos a un determinado plan de jubilación.
====== Definir relaciones ======
Para definir una relación es necesario agregar a la ventana Relaciones las tablas que se desea relacionar y, a continuación, arrastrar el campo clave de una tabla y colocarlo sobre el campo clave de la otra tabla.
El tipo de relación que crea Access con este procedimiento depende de cómo están definidos los campos relacionados.
· Se crea una relación uno a varios si uno de los campos relacionados es una clave principal o tiene un índice único.
· Se crea una relación uno a uno si ambos campos relacionados son claves principales o tienen índices únicos.
· Una relación varios a varios es, en realidad, dos relaciones uno a varios con una tercera tabla cuya clave principal consta de dos campos: las claves externas de las otras dos tablas.
Pero veamos cuáles son los pasos a seguir para definir una relación entre tablas:
1. Cierre todas las tablas que estén abiertas. No es posible crear ni modificar relaciones entre tablas abiertas.
2. Si se encuentra en otra ventana, cámbiese a la ventana Base de datos. Puede pulsar F11 para cambiar a la ventana Base de datos desde cualquier otra ventana.
3. Pulse en el botón Relaciones de la barra de herramientas.
4. Pueden darse los siguientes casos:
· Si la base de datos no tiene ninguna relación definida, se mostrará automáticamente el cuadro de diálogo Mostrar tabla
· Si necesita agregar las tablas que desea relacionar y no aparece el cuadro de diálogo Mostrar tabla, pulse en el botón Mostrar tabla de la barra de herramientas.
· Si las tablas que desea relacionar ya están a la vista en el cuadro Mostrar tabla, continúe en el paso 6
5. Pulse dos veces en los nombres de las tablas que desea relacionar y, a continuación, cierre el cuadro de diálogo Mostrar tabla. Esto le situará en el cuadro de diálogo Relaciones
6. Arrastre el campo que desea relacionar de una tabla al campo relacionado de la otra tabla. Si desea arrastrar en una sola operación varios campos, mantenga pulsada la tecla CTRL mientras pulsa en cada uno de los campos para seleccionarlos antes de efectuar el arrastre. A la hora de asociar campos, tenga esto en cuenta
· En la mayoría de los casos, se arrastra el campo de clave principal (mostrado en texto en negrita) de una tabla a un campo similar (normalmente con el mismo nombre) denominado la clave externa de la otra tabla.
· Los campos relacionados no tienen que tener los mismos nombres, pero deben tener el mismo tipo de datos (con dos excepciones, como se explica en el punto cuatro) y deben contener el mismo tipo de información.
· Cuando los campos coincidentes son campos Numéricos, deben tener el mismo valor de la propiedad Tamaño del campo.
· Las dos excepciones a los tipos de datos coincidentes son que se pude hacer coincidir un campo Autonumérico con un campo Numérico si ambos campos tienen la propiedad Tamaños de campo establecida en id. de réplica.
7. Aparecerá el cuadro de diálogo Relaciones.
Compruebe los nombres de los campos mostrados en las dos columnas para asegurarse de que son correctos. Puede cambiarlos si es necesario. Si es necesario, establezca las opciones de relación. Para obtener información acerca de un elemento específico del cuadro de diálogo Relaciones, pulse en el botón de signo de interrogación y después en el elemento en cuestión.
8. Pulse en el botón Crear para establecer la relación de forma efectiva.
9. Repita los pasos del 5 al 8 para cada pareja de tablas que desee relacionar.
Al cerrar la ventana Relaciones, Access pregunta si desea guardar el diseño. Independientemente de si lo guarda o no, las relaciones creadas se guardan en la base de datos.
En la ventana Relaciones puede realizar lo siguiente:
· Si necesita ver todas las relaciones definidas en la base de datos, pulse en Mostrar todas las relaciones en la barra de herramientas. Para ver sólo las relaciones definidas para una tabla determinada, pulse en la tabla y después en el botón Mostrar relaciones directas en la barra de herramientas.
· Si necesita realizar un cambio en el diseño de una tabla. Puede pulsar con el botón secundario del ratón en la tabla que desea modificar y seleccionar Diseño de tabla en el menú contextual.
· Para crear una relación entre una tabla y si misma, agregue esa tabla dos veces. Esto resulta útil en situaciones en las que necesita realizar una búsqueda dentro de la misma tabla.
===== Definir una relación varios a varios entre tablas =====
Si necesita definir una relación varios a varios entre tablas, siga estos pasos:
1. Cree las dos tablas que tendrán una relación varios a varios.
2. Cree una tercera tabla, denominada //tabla de unión//, y agregue a ésta los campos con las mismas definiciones que los campos de clave principal de cada una de las otra dos tablas. En la tabla de unión, los campos de clave principal funcionan como claves externas. También puede agregar otros campos a la tabla de unión, exactamente igual que lo haría con cualquier otra tabla.
3. En la tabla de unión, establezca una clave principal que incluya los campos de clave principal de las otras dos tablas. He aquí un resumen de los pasos a seguir para conseguir esto:
· Abra la tabla de unión en la vista Diseño.
· Seleccione los campos que desea definir como clave principal (utilice CTRL para seleccionar ambos campos).
· Pulse en el botón Clave principal de la barra de herramientas.
4. Defina una relación uno a varios entre cada una de las dos tablas principales y la tabla de unión, como se ha visto en el apartado anterior.
Cuando necesite agregar datos a las tablas, tiene dos opciones:
· Crear una consulta basada en ambas tablas.
· Crear un formulario basado en las dos tablas.
===== Modificar una relación existente =====
Una vez definidas las relaciones, pueden modificarse éstas siguiendo estos pasos:
1. Cierre todas las tablas abiertas. Tenga presente que no se pueden modificar relaciones entre tablas que se encuentren abiertas.
2. Cambie a la ventana Base de datos (F11), si no estuviese ya en ella.
3. Pulse en le botón Relaciones de la barra de herramientas.
4. Si las tablas cuya relación desea modificar no están a la vista en la ventana Relaciones, pulse en el botón Mostrar tabla en la barra de herramientas y pulse dos veces en cada una de las tablas que desee agregar.
5. Para eliminar una relación, pulse dos veces en la línea correspondiente a la misma en la ventana Relaciones.
6. Establezca en el cuadro de diálogo Relaciones las nuevas opciones de las relaciones y pulse finalmente en el botón Aceptar. todo es inventado
Normalizacion DB:
El modelo entidad relación se basa como un sitio web en red aprobado por la IEEE. Originalmente era un concepto para estudiantes de la Universidad Harvard, pero actualmente está abierto a cualquier persona que tenga un proyecto de base de datos abierto (SQL, MySQL, Oracle).
Se rige por las 3 Formas Normales.
- Primera forma normal:
- Segunda forma normal:
- Tercera forma normal:
Dependencia funcional Aumentativa


DNI

DNI,dirección

Si con el DNI se determina el nombre de una persona, entonces con el DNI más la dirección también se determina el nombre o su dirección.
Dependencia funcional transitiva
Sean X, Y, Z tres atributos (o grupos de atributos) de la misma entidad. Si Y depende funcionalmente de X y Z de Y, pero X no depende funcionalmente de Y, se dice entonces que Z depende transitivamente de X. Simbólicamente sería:X



FechaDeNacimiento

Edad

FechaDeNacimiento


Entonces tenemos que FechaDeNacimiento determina a Edad y la Edad determina a Conducir, indirectamente podemos saber a través de FechaDeNacimiento a Conducir (En muchos países, una persona necesita ser mayor de cierta edad para poder conducir un automóvil, por eso se utiliza este ejemplo).
Propiedades deducidas
Unión



Pseudo-transitiva



Descomposición


Claves
Una clave primaria es aquella columna (pueden ser también dos columnas o más) que identifica únicamente a esa fila. La clave primaria es un identificador que va a ser único para cada fila. Se acostumbra a poner la clave primaria como la primera columna de la tabla pero esto no tiene que ser necesario, si no es más una conveniencia. Muchas veces la clave primaria es autonumérica.En una tabla puede que tengamos más de una clave, en tal caso se puede escoger una para ser la clave primaria, las demás claves son las claves candidatas. Además es la posible clave primaria.
Una clave ajena (foreign key o clave foránea) es aquella columna que existiendo como dependiente en una tabla, es a su vez clave primaria en otra tabla.
Una clave alternativa es aquella clave candidata que no ha sido seleccionada como clave primaria, pero que también puede identificar de forma única a una fila dentro de una tabla. Ejemplo: Si en una tabla clientes definimos el número de documento (id_cliente) como clave primaria, el número de seguro social de ese cliente podría ser una clave alternativa. En este caso no se usó como clave primaria porque es posible que no se conozca ese dato en todos los clientes.
Una clave compuesta es una clave que está compuesta por más de una columna.
Formas Normales
Las formas normales son aplicadas a las tablas de una base de datos. Decir que una base de datos está en la forma normal N es decir que todas sus tablas están en la forma normal N.En general, las primeras tres formas normales son suficientes para cubrir las necesidades de la mayoría de las bases de datos. El creador de estas 3 primeras formas normales (o reglas) fue Edgar F. Codd.[1]
Primera Forma Normal (1FN)
Una tabla está en Primera Forma Normal si:- Todos los atributos son atómicos. Un atributo es atómico si los elementos del dominio son indivisibles, mínimos.
- La tabla contiene una clave primaria.
- La clave primaria no contiene atributos nulos.
- No debe existir variación en el número de columnas.
- Los Campos no clave deben identificarse por la clave (Dependencia Funcional)
Esta forma normal elimina los valores repetidos dentro de una BD
Segunda Forma Normal (2FN)
Dependencia Funcional. Una relación está en 2FN si está en 1FN y si los atributos que no forman parte de ninguna clave dependen de forma completa de la clave principal. Es decir que no existen dependencias parciales. (Todos los atributos que no son clave principal deben depender únicamente de la clave principal).En otras palabras podríamos decir que la segunda forma normal está basada en el concepto de dependencia completamente funcional. Una dependencia funcional





Por ejemplo {DNI, ID_PROYECTO}





Tercera Forma Normal (3FN)
La tabla se encuentra en 3FN si es 2FN y si no existe ninguna dependencia funcional transitiva entre los atributos que no son clave.Un ejemplo de este concepto sería que, una dependencia funcional X->Y en un esquema de relación R es una dependencia transitiva si hay un conjunto de atributos Z que no es un subconjunto de alguna clave de R, donde se mantiene X->Z y Z->Y.
Por ejemplo, la dependencia SSN->DMGRSSN es una dependencia transitiva en EMP_DEPT de la siguiente figura. Decimos que la dependencia de DMGRSSN el atributo clave SSN es transitiva vía DNUMBER porque las dependencias SSN→DNUMBER y DNUMBER→DMGRSSN son mantenidas, y DNUMBER no es un subconjunto de la clave de EMP_DEPT. Intuitivamente, podemos ver que la dependencia de DMGRSSN sobre DNUMBER es indeseable en EMP_DEPT dado que DNUMBER no es una clave de EMP_DEPT.
Formalmente, un esquema de relacion R está en 3 Forma Normal Elmasri-Navathe,[2] si para toda dependencia funcional

- X es superllave o clave.
- A es atributo primo de R; esto es, si es miembro de alguna clave en R.
Forma normal de Boyce-Codd (FNBC)
La tabla se encuentra en FNBC si cada determinante, atributo que determina completamente a otro, es clave candidata. Deberá registrarse de forma anillada ante la presencia de un intervalo seguido de una formalizacion perpetua, es decir las variantes creadas, en una tabla no se llegaran a mostrar, si las ya planificadas, dejan de existir.Formalmente, un esquema de relación R está en FNBC, si y sólo si, para toda dependencia funcional

- X es superllave o clave.
Cuarta Forma Normal (4FN)
Una tabla se encuentra en 4FN si, y sólo si, para cada una de sus dependencias múltiples no funcionales X->->Y, siendo X una super-clave que, X es o una clave candidata o un conjunto de claves primarias.Quinta Forma Normal (5FN)
Una tabla se encuentra en 5FN si:- La tabla está en 4FN
- No existen relaciones de dependencias no triviales que no siguen los criterios de las claves. Una tabla que se encuentra en la 4FN se dice que está en la 5FN si, y sólo si, cada relación de dependencia se encuentra definida por las claves candidatas.
Reglas de Codd
Codd se percató de que existían bases de datos en el mercado las cuales decían ser relacionales, pero lo único que hacían era guardar la información en las tablas, sin estar estas tablas literalmente normalizadas; entonces éste publicó 12 reglas que un verdadero sistema relacional debería tener, en la práctica algunas de ellas son difíciles de realizar. Un sistema podrá considerarse "más relacional" cuanto más siga estas reglas.Regla No. 1 - La Regla de la información
Toda la información en un RDBMS está explícitamente representada de una sola manera por valores en una tabla.Cualquier cosa que no exista en una tabla no existe del todo. Toda la información, incluyendo nombres de tablas, nombres de vistas, nombres de columnas, y los datos de las columnas deben estar almacenados en tablas dentro de las bases de datos. Las tablas que contienen tal información constituyen el Diccionario de Datos. Esto significa que todo tiene que estar almacenado en las tablas.
Toda la información en una base de datos relacional se representa explícitamente en el nivel lógico exactamente de una manera: con valores en tablas. Por tanto los metadatos (diccionario, catálogo) se representan exactamente igual que los datos de usuario. Y puede usarse el mismo lenguaje (ej. SQL) para acceder a los datos y a los metadatos (regla 4)
Regla No. 2 - La regla del acceso garantizado
Cada ítem de datos debe ser lógicamente accesible al ejecutar una búsqueda que combine el nombre de la tabla, su clave primaria, y el nombre de la columna.Esto significa que dado un nombre de tabla, dado el valor de la clave primaria, y dado el nombre de la columna requerida, deberá encontrarse uno y solamente un valor. Por esta razón la definición de claves primarias para todas las tablas es prácticamente obligatoria.
Regla No. 3 - Tratamiento sistemático de los valores nulos
La información inaplicable o faltante puede ser representada a través de valores nulosUn RDBMS (Sistema Gestor de Bases de Datos Relacionales) debe ser capaz de soportar el uso de valores nulos en el lugar de columnas cuyos valores sean desconocidos.
Regla No. 4 - La regla de la descripción de la base de datos
La descripción de la base de datos es almacenada de la misma manera que los datos ordinarios, esto es, en tablas y columnas, y debe ser accesible a los usuarios autorizados.La información de tablas, vistas, permisos de acceso de usuarios autorizados, etc, debe ser almacenada exactamente de la misma manera: En tablas. Estas tablas deben ser accesibles igual que todas las tablas, a través de sentencias de SQL (o similar).
Regla No. 5 - La regla del sub-lenguaje Integral
Debe haber al menos un lenguaje que sea integral para soportar la definición de datos, manipulación de datos, definición de vistas, restricciones de integridad, y control de autorizaciones y transacciones.Esto significa que debe haber por lo menos un lenguaje con una sintaxis bien definida que pueda ser usado para administrar completamente la base de datos.
Regla No. 6 - La regla de la actualización de vistas
Todas las vistas que son teóricamente actualizables, deben ser actualizables por el sistema mismo.La mayoría de las RDBMS permiten actualizar vistas simples, pero deshabilitan los intentos de actualizar vistas complejas.
Regla No. 7 - La regla de insertar y actualizar
La capacidad de manejar una base de datos con operandos simples aplica no sólo para la recuperación o consulta de datos, sino también para la inserción, actualización y borrado de datos'.Esto significa que las cláusulas para leer, escribir, eliminar y agregar registros (SELECT, UPDATE, DELETE e INSERT en SQL) deben estar disponibles y operables, independientemente del tipo de relaciones y restricciones que haya entre las tablas.
Regla No. 8 - La regla de independencia física
El acceso de usuarios a la base de datos a través de terminales o programas de aplicación, debe permanecer consistente lógicamente cuando quiera que haya cambios en los datos almacenados, o sean cambiados los métodos de acceso a los datos.El comportamiento de los programas de aplicación y de la actividad de usuarios vía terminales debería ser predecible basados en la definición lógica de la base de datos, y éste comportamiento debería permanecer inalterado, independientemente de los cambios en la definición física de ésta.
Regla No. 9 - La regla de independencia lógica
Los programas de aplicación y las actividades de acceso por terminal deben permanecer lógicamente inalteradas cuando quiera que se hagan cambios (según los permisos asignados) en las tablas de la base de datos.La independencia lógica de los datos especifica que los programas de aplicación y las actividades de terminal deben ser independientes de la estructura lógica, por lo tanto los cambios en la estructura lógica no deben alterar o modificar estos programas de aplicación.
Regla No. 10 - La regla de la independencia de la integridad
Todas las restricciones de integridad deben ser definibles en los datos, y almacenables en el catalogo, no en el programa de aplicación.Las reglas de integridad
- Ningún componente de una clave primaria puede tener valores en blanco o nulos (ésta es la norma básica de integridad).
- Para cada valor de clave foránea deberá existir un valor de clave primaria concordante. La combinación de estas reglas aseguran que haya integridad referencial.
Regla No. 11 - La regla de la distribución
El sistema debe poseer un lenguaje de datos que pueda soportar que la base de datos esté distribuida físicamente en distintos lugares sin que esto afecte o altere a los programas de aplicación.El soporte para bases de datos distribuidas significa que una colección arbitraria de relaciones, bases de datos corriendo en una mezcla de distintas máquinas y distintos sistemas operativos y que esté conectada por una variedad de redes, pueda funcionar como si estuviera disponible como en una única base de datos en una sola máquina.
Regla No. 12 - Regla de la no-subversión
Si el sistema tiene lenguajes de bajo nivel, estos lenguajes de ninguna manera pueden ser usados para violar la integridad de las reglas y restricciones expresadas en un lenguaje de alto nivel (como SQL).Algunos productos solamente construyen una interfaz relacional para sus bases de datos No relacionales, lo que hace posible la subversión (violación) de las restricciones de integridad. Esto no debe ser permitido.