Powered By Blogger

lunes, 11 de febrero de 2013

CONCEPTOS POO


                                         PROGRAMACION ORIENTADA A OBJETOS II


                            CONCEPTUALIZACION PROGRAMACION ORIENTADA A OBJETOS



                                                     FABIAN DORADO CARVAJAL
                                                           SIMEON CARDENAS


                                                         ING. PEDRO ALVAREZ





                        INSTITUCION UNIVERSITARIA COLEGIO MAYOR DEL CAUCA
                                                      FACULTAD DE INGENIERIA
                                TECNOLOGIA EN DESARROLLO DE SOFTWARE
                                                                 POPAYAN
                                                                     2013



PROGRAMACION ORIENTADA A OBJETOS
La orientación a objetos es un paradigma de programación que facilita la creación de software de calidad por sus factores que potencian el mantenimiento, la extensión y la reutilización del software generado bajo este paradigma.
La programación orientada a objetos trata de amoldarse al modo de pensar del hombre y no al de la máquina. Esto es posible gracias a la forma racional con la que se manejan las abstracciones que representan las entidades del dominio del problema, y a propiedades como la jerarquía o el encapsulamiento.
El elemento básico de este paradigma no es la función (elemento básico de la programación estructurada), sino un ente denominado objeto. Un objeto es la representación de un concepto para un programa, y contiene toda la información necesaria para abstraer dicho concepto: los datos que describen su estado y las operaciones que pueden modificar dicho estado, y determinan las capacidades del objeto.
Java incorpora el uso de la orientación a objetos como uno de los pilares básicos de su lenguaje
TIPO DE DATO ABSTRACTO (TDA)

Con mucha frecuencia se utilizan los términos TDA y Abstracción de Datos de manera equivalente, y esto es debido a la similitud e interdependencia de ambos. Sin embargo, es importante definir por separado los dos conceptos.

Los Lenguajes de Programación Orientados a Objetos son lenguajes formados por diferentes métodos o funciones y que son llamados en el orden en que el programa lo requiere, o el usuario lo desea. La abstracción de datos consiste en ocultar las características de un objeto y obviarlas, de manera que solamente utilizamos el nombre del objeto en nuestro programa. Esto es similar a una situación de la vida cotidiana. Cuando yo digo la palabra “perro”, usted no necesita que yo le diga lo que hace el perro. Usted ya sabe la forma que tiene un perro y también sabe que los perros ladran. De manera que yo abstraigo todas las características de todos los perros en un solo término, al cual llamo “perro”. A esto se le llama ‘Abstracción’ y es un concepto muy útil en la programación, ya que un usuario no necesita mencionar todas las características y funciones de un objeto cada vez que éste se utiliza, sino que son declaradas por separado en el programa y simplemente se utiliza el término abstracto (“perro”) para mencionarlo.
En el ejemplo anterior, “perro” es un Tipo de Dato Abstracto y todo el proceso de definirlo, implementarlo y mencionarlo es a lo que llamamos Abstracción de Datos.
Vamos a poner un ejemplo real de la programación. Supongamos que en algún Lenguaje de Programación Orientado a Objetos un pequeño programa saca el área de un rectángulo de las dimensiones que un usuario decida. Pensemos también que el usuario probablemente quiera saber el área de varios rectángulos. Sería muy tedioso para el programador definir la multiplicación de ‘base’ por ‘altura’ varias veces en el programa, además que limitaría al usuario a sacar un número determinado de áreas. Por ello, el programador puede crear una función denominada ‘Área’, la cual va a ser llamada el número de veces que sean necesitadas por el usuario y así el programador se evita mucho trabajo, el programa resulta más rápido, más eficiente y de menor longitud. Para lograr esto, se crea el método Área de una manera separada de la interfaz gráfica presentada al usuario y se estipula ahí la operación a realizar, devolviendo el valor de la multiplicación. En el método principal solamente se llama a la función Área y el programa hace el resto.
Al hecho de guardar todas las características y habilidades de un objeto por separado se le llama Encapsulamiento y es también un concepto importante para entender la estructuración de datos. Es frecuente que el Encapsulamiento sea usado como un sinónimo del Ocultación de información, aunque algunos creen que no es así.

VENTAJAS DE USO:

-Reusabilidad (mecanismos de abstracción y herencia)
-En programación convencional: uso de funciones y procedimiento
-Adecuación a entornos de bases de datos.
-Idónea para tratamiento de Interfaces de Usuario.
- Adecuada en prototipos y simulación.
-Construcción de sistemas complejos a partir de componentes.
-Modelado más fiel del mundo real.
-Estimación de reducción de 40% con respecto la programación convencional

Otras Ventajas de POO 
-Mejor mantenimiento.
-Estructuras más reales de la información.
-Escalabilidad.
-Adaptabilidad.
-Más apropiada para aplicaciones dirigidas por eventos.

INCONVENIENTES DE POO

-Necesidades de estandarización: Notación de Modelado ( , j (OMG, Object Management Group).Lenguajes de Programación.
-Coste de conversión de software legado






CLASE

 El elemento básico de la programación orientada a objetos en Java es la clase. Una clase define la forma y comportamiento de un objeto. Para crear una clase sólo se necesita un archivo fuente que contenga la palabra clave reservada class seguida de un identificador legal y un bloque delimitado por dos llaves para el cuerpo de la clase.  class MiPunto. {} Un archivo de Java debe tener el mismo nombre que la clase que contiene, y se les suele asignar la extensión ".java". Por ejemplo la clase MiPunto se guardaría en un fichero que se llamase MiPunto.java. Hay que tener presente que en Java se diferencia entre mayúsculas y minúsculas; el nombre de la clase y el de archivo fuente han de ser exactamente iguales.
Aunque la clase MiPunto es sintácticamente correcta, es lo que se viene a llamar una clase vacía, es decir, una clase que no hace nada. Las clases típicas de Java incluirán variables y métodos de instancia. Los programas en Java completos constarán por lo general de varias clases de Java en distintos archivos fuente.
Una clase es una plantilla para un objeto. Por lo tanto define la estructura de un objeto y su interfaz funcional, en forma de métodos. Cuando se ejecuta un programa en Java, el sistema utiliza definiciones de clase para crear instancias de las clases, que son los objetos reales. Los términos instancia y objeto se utilizan de manera indistinta. La forma general de una definición de clase es:
class Nombre_De_Clase {

  tipo_de_variable nombre_de_atributo1;

  tipo_de_variable nombre_de_atributo2;

  // . . .

  tipo_devuelto nombre_de_método1( lista_de_parámetros ) {

    cuerpo_del_método1;

  }

  tipo_devuelto nombre_de_método2( lista_de_parámetros ) {

    cuerpo_del_método2;

  }

  // . . .

}

Los tipos tipo_de_variable y tipo_devuelto, han de ser tipos simples Java o nombres de otras clases ya definidas. Tanto Nombre_De_Clase, como los nombre_de_atributo y nombre_de_método, han de ser identificadores Java válidos.
OBJETOS
En el paradigma de programación orientada a objetos (POO, o bien OOP en inglés), un objeto se define como la unidad que en tiempo de ejecución realiza las tareas de un programa. También a un nivel más básico se define como la instancia de una clase.
Estos objetos interactúan unos con otros, en contraposición a la visión tradicional en la cual un programa es una colección de subrutinas (funciones o procedimientos), o simplemente una lista de instrucciones para el computador. Cada objeto es capaz de recibir mensajes, procesar datos y enviar mensajes a otros objetos de manera similar a un servicio.
En el mundo de la programación orientada a objetos (POO), un objeto es el resultado de la instanciación de una clase. Una clase es el anteproyecto que ofrece la funcionalidad en ella definida, pero ésta queda implementada sólo al crear una instancia de la clase, en la forma de un objeto. Por ejemplo: dado un plano para construir sillas (una clase de nombre clase_silla), entonces una silla concreta, en la que podemos sentarnos, construida a partir de este plano, sería un objeto de clase_silla. Es posible crear (construir) múltiples objetos (sillas) utilizando la definición de la clase (plano) anterior. Los conceptos de clase y objetos son análogos a los de tipo de datos y variable; es decir, definida una clase podemos crear objetos de esa clase, igual que disponiendo de un determinado tipo de dato (por ejemplo el tipo entero), podemos definir variables de dicho tipo:
int a,b;
( 'int' es un tipo de dato y 'a' y 'b' son variables de tipo entero con las que podemos operar)
Para utilizar la funcionalidad definida en una clase en particular (salvo en las clases abstractas), primeramente es necesario crear un objeto de esa clase. De la misma manera, para una persona que desea sentarse, las especificaciones para construir una silla serán de poca utilidad; lo que se necesita es una silla real construida a partir de esas especificaciones. Siguiendo con la analogía anterior, también se puede decir que para hacer operaciones aritméticas, de nada sirve por sí solo el tipo entero (int); para ello necesitamos variables (o constantes) con las que operar.

 LOS ATRIBUTOS
Los datos se encapsulan dentro de una clase declarando variables dentro de las llaves de apertura y cierre de la declaración de la clase, variables que se conocen como atributos. Se declaran igual que las variables locales de un método en concreto.
Por ejemplo, este es un programa que declara una clase MiPunto, con dos atributos enteros llamados x e y.
class MiPunto {

  int x, y;

}

Los atributos se pueden declarar con dos clases de tipos: un tipo simple Java (ya descritos), o el nombre de una clase (será una referencia a objeto, véase el punto C.a de este mismo apartado).
Cuando se realiza una instancia de una clase (creación de un objeto) se reservará en la memoria un espacio para un conjunto de datos como el que definen los atributos de una clase. A este conjunto de variables se le denomina variables de instancia.

METODOS
En la programación orientada a objetos, un método es una subrutina asociada exclusivamente a una clase (llamados métodos de clase o métodos estáticos) o a un objeto (llamados métodos de instancia). Análogamente a los procedimientos en los lenguajes imperativos, un método consiste generalmente de una serie de sentencias para llevar a cabo una acción, un juego de parámetros de entrada que regularán dicha acción y o, posiblemente, un valor de salida (o valor de retorno) de algún tipo.
Algunos lenguajes de programación asumen que un método debe de mantener el invariante del objeto al que está asociado asumiendo también que éste es válido cuando el método es invocado. En lenguajes compilados dinámicamente, los métodos pueden ser objetos de primera clase, y en este caso se puede compilar un método sin asociarse a ninguna clase en particular, y luego asociar el vínculo o contrato entre el objeto y el método en tiempo de ejecución. En cambio en lenguajes no compilados dinámicamente o tipados estáticamente, se acude a precondiciones para regular los parámetros del método y postcondiciones para regular su salida (en caso de tenerla). Si alguna de las precondiciones o postcondiciones es falsa el método genera una excepción. Si el estado del objeto no satisface la invariante de su clase al comenzar o finalizar un método, se considera que el programa tiene un error de programación.
La diferencia entre un procedimiento (generalmente llamado función si devuelve un valor) y un método es que éste último, al estar asociado con un objeto o clase en particular, puede acceder y modificar los datos privados del objeto correspondiente de forma tal que sea consistente con el comportamiento deseado para el mismo. Así, es recomendable entender a un método no como una secuencia de instrucciones sino como la forma en que el objeto es útil (el método para hacer su trabajo). Por lo tanto, podemos considerar al método como el pedido a un objeto para que realice una tarea determinada o como la vía para enviar un mensaje al objeto y que éste reaccione acorde a dicho mensaje

ENCAPSULAMIENTO
En programación orientada a objetos, se denomina encapsulamiento al ocultamiento del estado, es decir, de los datos miembro, de un objeto de manera que sólo se puede cambiar mediante las operaciones definidas para ese objeto.
Cada objeto está aislado del exterior, es un módulo natural, y la aplicación entera se reduce a un agregado o rompecabezas de objetos. El aislamiento protege a los datos asociados a un objeto contra su modificación por quien no tenga derecho a acceder a ellos, eliminando efectos secundarios e interacciones.
De esta forma el usuario de la clase puede obviar la implementación de los métodos y propiedades para concentrarse sólo en cómo usarlos. Por otro lado se evita que el usuario pueda cambiar su estado de maneras imprevistas e incontroladas.
Como se puede observar de los diagramas, las variables del objeto se localizan en el centro o núcleo del objeto. Los métodos rodean y esconden el núcleo del objeto de otros objetos en el programa. 'Al empaquetamiento de las variables de un objeto con la protección de sus métodos se le llama encapsulamiento. Típicamente, el encapsulamiento es utilizado para esconder detalles de la puesta en práctica no importantes de otros objetos. Entonces, los detalles de la puesta en práctica pueden cambiar en cualquier tiempo sin afectar otras partes del programa.
Formas de encapsular
1.    Estándar (Predeterminado)
2.    Abierto : Hace que el miembro de la clase pueda ser accedido desde el exterior de la Clase y cualquier parte del programa.
3.    Protegido : Solo es accesible desde la Clase y las clases que heredan (a cualquier nivel).
4.    Semi cerrado : Solo es accesible desde la clase heredada
5.    Cerrado : Solo es accesible desde la Clase.
En el encapsulamiento hay analizadores que pueden ser semánticos y sintácticos.

PRINCIPIO DE OCULTAMIENTO

En programación orientada a objetos el principio de ocultación hace referencia a que los atributos privados de un objeto no pueden ser modificados ni obtenidos a no ser que se haga a través del paso de un mensaje (invocación a métodos, ya sean estos funciones o procedimientos).

POLIMORFISMO
En programación orientada a objetos el polimorfismo se refiere a la posibilidad de enviar un mensaje a un grupo de objetos cuya naturaleza puede ser heterogénea. El único requisito que deben cumplir los objetos que se utilizan de manera polimórfica es saber responder al mensaje que se les envía.
La apariencia del código puede ser muy diferente dependiendo del lenguaje que se utilice, más allá de las obvias diferencias sintácticas.
Por ejemplo, en un lenguaje de programación que cuenta con un sistema de tipos dinámico (en los que las variables pueden contener datos de cualquier tipo u objetos de cualquier clase) como Smalltalk no se requiere que los objetos que se utilizan de modo polimórfico sean parte de una jerarquía de clases.
En lenguajes basados en clases y con un sistema de tipos de datos fuerte (independientemente de si la verificación se realiza en tiempo de compilación o de ejecución), es posible que el único modo de poder utilizar objetos de manera polimórfica sea que compartan una raíz común, es decir, una jerarquía de clases, ya que esto proporciona la compatibilidad de tipos de datos necesaria para que sea posible utilizar una misma variable de referencia (que podrá apuntar a objetos de diversas subclases de dicha jerarquía) para enviar el mismo mensaje (o un grupo de mensajes) al grupo de objetos que se tratan de manera polimórfica.
En Java, es frecuente y profusamente aconsejada la utilización de interfaces (que es un mecanismo del lenguaje que se emplea por medio de la palabra clave Interface) para proveer la necesaria concordancia de tipos para hacer posible el polimorfismo, también como un contrato que debe cumplir cualquier clase que implemente una cierta interfaz y como una forma de documentación para los desarrolladores. A veces, en la literatura que refiere específicamente a Java se hace mención a "herencia y polimorfismo de interfaces", lo que no concuerda con los conceptos de la programación orientada a objetos porque una clase que implementa una interfaz sólo obtiene su tipo de datos y la obligación de implementar sus métodos, no obtiene comportamiento ni de atributos. Esto muchas veces resulta paradójico porque en Java frecuentemente se utiliza la mal llamada "herencia de interfaces" para dotar a una clase con un tipo adicional (o varios) para que su uso en combinación con la agregación (colaboración o composición) permita evitar la necesidad de la herencia múltiple y favorezca una utilización más amplia del polimorfismo.
No obstante, el uso de una jerarquía de clases como paso previo, es muy habitual incluso en aquellos lenguajes en los que es posible prescindir de tal jerarquía, ya que, desde una perspectiva conceptual, se puede decir que al pertenecer los "objetos polimórficos" a subclases de una misma jerarquía, se asegura la equivalencia semántica de los mensajes que se invocarán de modo polimórfico. Por esto, en programación orientada a objetos a veces se denomina al polimorfismo como "polimorfismo de subclase (o de subtipo)".
En resumen, en la programación orientada a objetos, la esencia del polimorfismo no atañe a la clase o prototipo de la que provienen los objetos. Aun así, en los lenguajes basados en clases, es habitual (y en algunos tal vez sea el único modo) que dichos objetos pertenezcan a subclases pertenecientes a una misma jerarquía. Entonces, el polimorfismo debe verse como una forma flexible de usar un grupo de objetos (como si fueran sólo uno). Podría decirse que el polimorfismo en esencia refiere al comportamiento de los objetos, no a su pertenencia a una jerarquía de clases (o a sus tipos de datos).
Lo anterior se hace aún más evidente en lenguajes de programación orientada a objetos basados en prototipos, como Self, en los que las clases no existen.

POLIMORFISMO DESDE UNA INTERFAZ
Aunque el polimorfismo es el mismo se aplique donde se aplique, el modo en que se aplica desde una interfaz puede resultar un poco más oscuro y difícil de entender. Se expone un sencillo ejemplo (en VB-NET) comentado para entender como funciona aplicado desde una interfaz, primero se escribe el código y luego se comenta el funcionamiento. Nota: para no enturbiar el código en exceso, todo lo que no se declara privado se sobreentiende público.

martes, 17 de agosto de 2010

Cómo Instalar Directorio Activo en Windows Server 2008 (Active Directory Domain Services - AD DS)

Este breve artículo muestra el procedimiento de instalación de Directorio Activo (Active Directory Domain Services ó AD DS) en Windows Server 2008, en particular, la creación de un nuevo Bosque de Directorio Activo desde la nada, es decir, sobre un Windows Server 2008 recién instalado en una infraestructura de red vacía (no hay otros Controladores de Dominio, ni servidores DNS, etc.), incluyendo las pantallas capturadas del procedimiento de instalación realizado.

Antes de empezar, y por culturilla general, comentar que Windows Server 2008 introduce el modo de instalación Server Core. Este modo de instalación se caracteriza por tratarse de una instalación de Windows Server 2008 en modo consola, por decirlo de algún modo, es decir, no incluye entorno gráfico (a lo UNIX ;-), no incluye el Explorer, ni incluye las consolas MMC (Microsoft Management Console). Esto facilita un menor consumo de recursos (evidentemente, si instalamos menos cosas, gastaremos menos recursos del sistema), y resulta más seguro al minimizar la superficie de ataque (claro está, si no instalamos el Explorer.exe ni otras muchas cosas, no podrán aprovecharse de sus vulnerabilidades). Comento esto, por que en una instalación Server Core de Windows Server 2008 se posible ejecutar determinados Server Roles, como es el caso de Active Directory Domain Services (AD DS). En el caso del presente artículo, se trata de una instalación de Windows Server 2008 con entorno gráfico, por lo tanto no aplica lo que acabamos de contar, pero quería aprovechar para dejar caer esta interesante característica de Windows Server 2008 que Directorio Activo.




Una de las principales novedades en Directorio Activo con Windows Server 2008 son los Controladores de Dominio de Sólo Lectura (RODC, Read Only Domain Controllers). En Windows Server 2008, es posible montar un Controlador de Dominio en modo de Sólo Lectura, actuando de forma similar a como haría un BDC en la época de Windows NT4 (vale... las comparaciones son odiosas, y en este caso, más ;-). Esto resulta de utilidad, por ejemplo para pequeñas oficinas que no disponen de personal técnico válido. De este modo, la oficina puede ser relativamente autónoma, se optimiza el tráfico de red, etc.



Bueno, no me quiero liar mucho más, sobre todo, porque aún no me he puesto las pilas con el Windows Server 2008, y se me acaba el repertorio, jeje ;-)



Lo último, antes de entrar en harina, comentar que el presente procedimiento de instalación de Active Directory Domain Services (AD DS) sobre Windows Server 2008 ha sido realizado sobre un MiniPortátil o NetPC o UltraPortátil (o como demonios quieran que se llamen estos bichos). Si señor. He instalado Windows Server 2008 sobre el Intel Atom N270 con 1GB de RAM que monta mi BLUESENS FreePC 10P. Y la verdad, que la experiencia ha sido buena. Incluso la instalación de SQL Server 2008 y la instalación de MOSS 2007 se han realizado en un tiempo muy razonable (con sus Integration Services y sus Analysis Services, para que tenga algo de salsa).



Empezamos. En lo relacionado para la instalación, lo primero que podemos hacer es ejecutar la utilidad dcpromo (Start -> Run -> dcpromo). Al ejecutar dcpromo en una instalación por defecto de Windows Server 2008, lo primero que conseguiremos es:



Agregar el Role Active Directory Domain Services (AD DS).

Agregar la Característica (Feature) Active Directory Domain Services Tools (AD DS Tools).

Se iniciará el asistente para instalación de Active Directory Domain Services (AD DS), como se muestra en la siguiente pantalla. Click Next para continuar.





Se incluye un mensaje de advertencia en relación con posibles problemas que podríamos tener con versiones antiguas de Windows. La vida es injusta. Click Next para continuar.





Nos pregunta que qué queremos, si agregarnos a un Bosque existente o crear un nuevo Bosque. En nuestro caso, queremos crear un nuevo Bosque (bueno, un nuevo Dominio en un nuevo Bosque, por ser más explícito). Click Next para continuar.





En el diálogo Name the Forest Root Domain, nos solicitan el nombre DNS para el nuevo Dominio. En mi caso va a ser mini.guillesql.local, ya que aunque lo estoy montando en una máquina separada, tento otras máquinas con el dominio guillesql.local, y no quisiera tener problemas por el solapamiento de nombres DNS. Click Next para continuar.



En el diálogo Set Forest Functional Level, debemos seleccionar el modo funcional de nuestro Bosque. Especialmente interesante es elegir al menos el modo Windows Server 2003, pues se incluyen varias mejoras frente a Windows 2000 (mejoras en la replicación, mejoras en la implementación de KCC para entornos de Directorio Activo con replicación entre múltiples Sitios o Subredes, etc.). En principio, el modo funcional Windows Server 2008 no incluye mejoras, simplemente obliga a que todos los Controladores de Dominio sean Windows Server 2008. Ojo, en principio no incluye mejoras, pero recordemos la instalación Server Core y los Controladores de Dominio de Sólo Lectura (RODC, Read Only Domain Controller). En mi caso, selecciono Windows Server 2008. Click Next para continuar.



En el diálogo Additional Domain Controller Options, se pueden especificar algunas opciones de interés. En nuestro caso, al ser el primer dominio del Bosque, por diseño del producto debe actuar como Global Catalog y no puede ser un Controlador de Dominio de Sólo Lectura (RODC, Read Only Domain Controller). Por lo tanto, realmente, sólo tenemos la opción del DNS server. En nuestro caso nos interesa montar DNS, ya que la instalación se preocupará de montar DNS (agregará el Role DNS Server y agregará la Característica DNS Server Tools) y de configurarlo, todo esto automáticamente (nos olvidamos nosotros de instalar manualmente el DNS, crear las zonas, configurar el servidor como cliente DNS, etc.). Click Next para continuar.



Mensaje acojonativo. En mi caso, es decir, en la máquina en la que estoy instalado Active Directory Domain Services, tengo una tarjeta de red con una ip dinámica que se conecta a mi red de cable, y tengo otra tarjeta de red de mentira (la conocida MSLookup) con una dirección IP estática, y que se trata de la que quiero utilizar para montar mi Directorio Activo. Así que, ignoro el mensaje, ya que tengo consciencia de la situación (lo tengo configurado así, por tratarse de una máquina de pruebas, en particular, una máquina física que quiero poder conectar a la red de casa o a la de cualquier cliente, sin perder el direccionamiento de mi Directorio Activo, y de aquí, el porqué de la tarjeta de red MSLookup con la IP fija). Continuamos con lo nuestro.



Otro mensajito, ahora de DNS. El asistente intenta crear una delegación de la zona mini sobre la zonal guillesql.local. Sin embargo, no puede, ya que se trata de un entorno aislado. En la práctica, tengo montado una infraestructura completa con el dominio guillesql.local, pero en estos momentos no estoy conectado a ella, por lo que ya otro día realizaré la configuración de Delegación de Zona manualmente. En cualquier caso, no impacta para el fin del presente artículo. Click Yes para continuar.




En el diálogo Location for Database, Log File, and SYSVOL, se nos solicita la ubicación física dónde se desea almacenar esta información. Este es un paso importante, ya que en un Directorio Activo con miles o millones de usuarios, la base de datos de directorio activo crecerá. En mi caso, lo dejo en el disco C, ya que para mis pruebas, no me va a crecer mucho, y además, no tengo más discos, pero en una instalación de producción, sería vital utilizar una unidad diferente al disco C. Click Next para continuar.




En el diálogo Directory Services Restore Mode Administrator Password, debemos introducir la contraseña que deseamos utilizar para iniciar Windows en el modo de recuperación de Directorio Activo. Ojito con esta contraseña, que más de uno la pone sin darle importancia, y cuando unos años después le hace falta resulta que no sabe qué contraseña utilizó en la instalación (aprovecho para recordar que existen herramientas muy cómodas para estas labores, como Keepass). Click Next para continuar.




En el diálogo Summary se muestra un resumen de la configuración que hemos especificado a través de los anteriores diálogos del asistente. Lo revisamos, y si está todo bien, click Next para continuar.




Ala, la barrita de progreso de turno. Esperamos un ratín, y pronto tendremos nuestro nuevo Bosque con nuestro nuevo Dominio de Directorio Activo corriendo en Windows Server 2008.




Aparece la correspondiente pantalla de finalización de la instalación. Click Finish para continuar.





Finalizada la instalación, es necesario reiniciar el servidor, para lo cual, aparecerá un diálogo sugiriendo que reiniciemos ya.





Y hasta aquí hemos llegado. Siguiendo los anteriores pasos, y tras el reinicio, tendremos montado nuestro Controlador de Dominio en Windows Server 2008, y funcionando perfectamente.