Parcial I Flashcards
¿Cuáles son las diferencias principales entre el enfoque estructurado y el orientado a
objetos?
El enfoque estructurado se centra en dividir tareas y procesos, tratando datos y funciones por separado, siendo ideal para programas lineales. En cambio, el enfoque orientado a objetos agrupa datos y funciones en “objetos”, permitiendo modelar sistemas más complejos y reflejar
interacciones del mundo real, promoviendo reusabilidad y
adaptabilidad.
¿Qué es una abstracción y para qué se utiliza?
Es la propiedad que permite representar las características esenciales de un objeto, sin
preocuparse de las restantes características (no esenciales). En decir, es la capacidad de simplificar una entidad compleja, destacando
sus características más relevantes y
descartando detalles no relevantes.
En el contexto de la programación OO, la abstracción permite modelar entidades del mundo real, permitiéndonos enfocarnos en lo que es realmente crucial para nuestro sistema o aplicación, mientras omitimos aspectos superfluos o irrelevantes.
¿Cuál es el objetivo del encapsulamiento?
Tiene como objetivo principal asegurar que el contenido de la información de un objeto esté oculto al mundo exterior, garantizando la integridad y seguridad de los datos. Esta proteccion impide que los datos internos del objeto sean alterados de manera inadecuada o accidental. Como tambien, permite que sean modulares ya que al separar el
comportamiento del objeto de su implementación, se pueden realizar modificaciones en el objeto sin afectar a las aplicaciones que lo utilizan. Esta capacidad de ocultar y proteger los detalles internos y solo exponer lo necesario se traduce en una mayor flexibilidad y mantenibilidad del código, permitiendo adaptaciones y mejoras en los sistemas sin repercusiones negativas en su funcionamiento general.
¿Qué es un objeto? ¿Qué es una clase? ¿Qué diferencias existen entre ellos?
Un objeto es una instancia concreta de una clase. Representa una entidad individual en el sistema que tiene un estado específico, un comportamiento definido por su clase y una
identidad única. En el análisis y diseño, los objetos se utilizan para comprender cómo las instancias de las clases interactuarán entre sí y con otros sistemas.
Una clase conceptual se puede entender desde tres perspectivas:
* Símbolo: Se refiere a las palabras o imágenes que representan la clase conceptual. En el diseño, este símbolo puede ser el nombre de la clase o su representación
gráfica en un diagrama UML.
* Intensión: Es la definición de la clase conceptual. Describe lo que la clase significa, sus atributos, sus responsabilidades y cómo se relaciona con otras clases.
* Extensión: Corresponde al conjunto de ejemplos o instancias a los que se aplica la clase conceptual. En términos prácticos, cuando un software está en ejecución, las
instancias de una clase son los objetos que se han creado basándose en esa clase.
Las diferencias son que las clases actúan como un esquema o plantilla abstracta que define ciertas propiedades y acciones, mientras que el objeto es una manifestación
tangible de esa clase, existente durante la operación del software. Es decir, las clases establecen un marco teórico para abordar y estructurar el problema, y los objetos son la
materialización práctica de ese marco, ejecutando las acciones reales cuando el programa se encuentra en funcionamiento.
Un objeto se caracteriza por el estado, el comportamiento y la identidad. Explique cada una
de esas propiedades.
- Estado: El estado de un objeto comprende todas sus propiedades, que suelen ser estáticas, junto con los valores actuales, que generalmente son dinámicos, de dichas propiedades. En esencia, el estado refleja las características y condiciones actuales de un objeto en un momento dado.
- Comportamiento: Se refiere a cómo un objeto actúa y reacciona. Este comportamiento se manifiesta en términos de sus cambios de estado y la forma en que intercambia mensajes con otros objetos o consigo mismo. Es, esencialmente, la funcionalidad del objeto y cómo responde a diferentes situaciones o estímulos.
- Identidad: Es la característica única de un objeto que lo diferencia de cualquier otro objeto, garantizando que cada entidad sea única e irrepetible, independientemente de su estado o comportamiento actual. La identidad permite distinguir un objeto específico de todos los demás en el sistema.
¿Qué son y para qué sirven las tarjetas CRC?
Son herramientas en el diseño orientado a objetos para esbozar de manera simplificada las clases y sus interacciones.
En una tarjeta CRC se detalla:
- El nombre de la clase: Debe reflejar claramente su esencia y función.
- Responsabilidades:
- Hacer: Las acciones que la clase debe realizar por sí misma, iniciar en otros, controlar en otros objetos.
- Conocer: Datos que la clase encapsula, objetos relacionados y lo que puede deducir o calcular.
- Conocimiento interno: Información que la clase maneja y encapsula.
- Servicios: Operaciones o métodos que la clase proporciona.
- Colaboradores: Otras clases necesarias para que la clase cumpla sus responsabilidades.
Sirven en el proceso de modelado, son una primera aproximación y son especialmente útiles para discusiones en equipo y sesiones de brainstorming. Una vez que las clases, responsabilidades y colaboraciones están claras, es posible refinar y profundizar en los detalles de las clases durante la fase de diseño.
Las entidades deben tener un atributo identificador para diferenciar una ocurrencia de
instancia de otra. ¿Pasa lo mismo con los objetos?
Sí, al igual que las entidades en un modelo de datos requieren de un atributo identificador para distinguir una instancia de otra, los objetos en la programación orientada a objetos también necesitan tener una identidad única para diferenciarse entre sí. Aunque dos objetos puedan tener el mismo estado y comportamiento, su identidad única garantiza que se traten como entidades separadas en el sistema.
El modelo entidad interrelación modela entidades, ¿qué diferencia existe entre una entidad
y una clase?
El modelo entidad interrelación y la programación orientada a objetos operan en diferentes niveles de abstracción y tienen propósitos distintos, lo que conlleva a diferencias fundamentales entre una entidad y una clase.
Una entidad está enfocada en representar información específica dentro de una estructura de base de datos y sus relaciones, una clase es una estructura más abstracta en la
programación que define atributos y comportamientos, y puede ser utilizada para crear múltiples instancias u objetos.
¿Qué son los atributos de un objeto? ¿Es el mismo concepto de atributo de las entidades en el modelo de datos?
Los atributos de un objeto representan las características o propiedades que el objeto tiene. Estos atributos almacenan datos específicos sobre ese objeto y pueden ser, por ejemplo,
nombre, edad, dirección, entre otros. Reflejan su estado actual y son determinados por la clase a partir de la cual se instanció el objeto.
No, aunque similares, no son el mismo concepto. En programación orientada a objetos, un atributo describe características y estado de un objeto y puede interactuar con métodos.
En modelos de datos, un atributo es una propiedad específica de una entidad centrada en el almacenamiento de información, sin interacción con comportamientos o métodos.
¿Qué es una operación y que diferencias existen con método y el mensaje?
En programación O.O. , una operación define una acción que un objeto puede realizar, pero sin detallar cómo. El método es la realización concreta de esa operación, es decir, el “cómo” se lleva a cabo y la diferencia con el mensaje, es la solicitud que un objeto envía a otro para que ejecute una operación. Es decir, la operación dice qué hacer, el método muestra cómo hacerlo, y el mensaje pide que se haga.
¿Cuál es el beneficio de la generalización?
Es la práctica de abstraer características comunes y comportamientos de varias clases y agruparlos en una clase superior o “clase base”, tiene multiples beneficios como:
* Reutilización de código
* Facilita el mantenimiento
* Promueve la modularidad
* Flexibilidad
Explique el concepto de herencia
Es la técnica que permite implementar la generalización. Gracias a la herencia, es posible que una clase (subclase) herede atributos y métodos de otra clase (superclase), lo que facilita la reutilización de código y la extensión de funcionalidades. En esencia, mientras la generalización proporciona el marco conceptual, la herencia es la herramienta que permite hacer realidad este concepto.
¿Qué significa herencia de atributos, métodos y asociaciones?
Herencia de atributos: Significa que la subclase hereda todos los atributos definidos en la superclase. Así, cualquier objeto de la subclase tendrá, por defecto, los atributos de la clase base. Por ejemplo, si tenemos una superclase “Vehículo” con un atributo “color”, y una subclase “Coche”, el “Coche” heredará el atributo “color” de “Vehículo”.
Herencia de métodos: La subclase hereda todos los métodos de la superclase, lo que le permite utilizar (y en algunos casos, sobrescribir o extender) los comportamientos definidos en la clase base. Usando el ejemplo anterior, si “Vehículo” tiene un método “encenderMotor()”, la subclase “Coche” también tendrá acceso a ese método.
Herencia de asociaciones: se refiere a la capacidad de una subclase para heredar relaciones o asociaciones establecidas en la superclase. Por ejemplo, si la clase “Vehículo” está asociada con la clase “Conductor”, y tenemos una subclase “Motocicleta” que hereda de “Vehículo”, “Motocicleta” también podría heredar esa asociación con “Conductor”.
¿Qué es una operación polimórfica? ¿Para qué se utiliza?
Una operación polimorifica es la que que posibilita que diferentes clases puedan ser tratadas como si fueran de una misma superclase, con la ventaja de actuar de manera específica según el objeto con el que se está trabajando. Su esencia reside en la frase: “Un
único interfaz, múltiples métodos”.
Es decir, un único mensaje enviado a diferentes objetos puede resultar en comportamientos completamente diferentes, dependiendo de la naturaleza del objeto que recibe el mensaje.
Por ejemplo se utiliza para:
* Referirse a objetos de diferentes clases mediante un mismo elemento de programa: Esto significa que una variable de tipo de una superclase podría referirse a un objeto de cualquiera de sus subclases.
* Realizar la misma operación de diferentes formas: Aunque el nombre de la operación o método pueda ser el mismo, su implementación varía dependiendo de la clase del objeto. Esto permite, por ejemplo, que diferentes objetos respondan a una función como “dibujar” de maneras únicas dependiendo de si son círculos, triángulos o cuadrados.
¿Qué diferencia existe entre asociación, agregación y composición?
Son mecanismos que describen diferentes niveles de relación entre clases y sus diferencias son:
* Asociación: Es una colaboración simple entre clases, donde los objetos de una clase pueden estar relacionados con objetos de otra, pero pueden existir de manera independiente. Por ejemplo, un “Profesor” puede enseñar a un “Estudiante”, pero ambos pueden existir por separado.
* Agregación: Es una relación “todo-parte” en la que un objeto (el “todo”) contiene a otro (la “parte”). Sin embargo, la “parte” puede existir independientemente del “todo”. Por ejemplo, una “Universidad” tiene “Departamentos”, pero un “Departamento” puede subsistir sin la “Universidad”.
* Composición: Representa una relación más fuerte que la agregación, en la que si el objeto “todo” es eliminado, el objeto “parte” también lo es. Por ejemplo, una “Canción” está compuesta por “Notas musicales” y si eliminamos la “Canción”, las”Notas musicales” desaparecen.
¿Qué es y para que se utiliza la Ingeniería de Requisitos?
La ingeniería de requisitos es un pilar esencial en el desarrollo de software, se encarga de identificar, analizar y documentar las necesidades de los usuarios y las partes. Implica la recopilación precisa de requisitos, su análisis, documentación y validación, además de gestionar cambios en el proceso. Su objetivo es asegurar que el software cumpla con las expectativas, se adapte a la necesidad, evitando futuros problemas.
¿Qué es un requisito de software? ¿Cuáles son las características deseables?
Un requisito de software es una descripción detallada de lo que el software debe lograr, guiando su diseño y desarrollo. Los requisitos efectivos poseen claridad, especificidad, consistencia, completitud, relevancia, verificabilidad, ausencia de ambigüedad y factibilidad. Además, deben mantener coherencia con la visión general del proyecto, ser rastreables para entender su evolución, y contar con una jerarquía de prioridades para facilitar la toma de decisiones. Estas características aseguran que los requisitos sean comprensibles, alcanzables y guíen la creación exitosa de software que cumpla con las expectativas y necesidades de los usuarios.
¿Qué es la Elicitación?
La elicitación es el proceso de obtener información y datos sobre los requisitos del software directamente de las personas involucradas, con el objetivo de capturar de manera precisa y completa lo que el software debe lograr. Implica técnicas de comunicación y consulta, como entrevistas, encuestas, discusiones y observación, que permiten a los analistas obtener una comprensión profunda de lo que se requiere del software.
¿Porque es necesaria la Elicitación?
La elicitación es necesaria para garantizar que los requisitos del software se comprendan y documenten de manera precisa, evitando malentendidos, suposiciones erróneas y requisitos incompletos, lo que en última instancia conduce al desarrollo exitoso de un software que satisfaga las necesidades de los usuarios y partes interesadas.
Las razones fundamentales son: Entender las necesidades reales, Evitar suposiciones incorrectas, Aclarar ambigüedades, Identificar requisitos no evidentes, Considerar cambios en el contexto, Validación de requisitos, Mejorar la calidad del software
Investigue y Explique la técnica de Elicitación, Brainstorming.
El brainstorming es una técnica de elicitación de requisitos que involucra a un grupo de personas en la generación libre y creativa de ideas relacionadas con un tema específico. Los participantes comparten ideas sin críticas inmediatas, lo que fomenta la diversidad y originalidad de las propuestas. Después de la fase de generación de ideas, se evalúan y refinan las más prometedoras. Esta técnica aprovecha la colaboración y la creatividad de un grupo diverso para identificar soluciones y requisitos potenciales de manera innovadora.
¿Cuál es la diferencia entre la técnica Brainstorming y Prototipos?
La diferencia clave entre el brainstorming y los prototipos es que el brainstorming se centra en la generación de ideas y soluciones en las etapas iniciales, mientras que los prototipos son modelos prácticos que representan el software de manera tangible y se utilizan para validar y refinar los requisitos después de su identificación.
Mencione al menos 4 problemas para la identificación de requisitos
Cuatro problemas comunes en la identificación de requisitos son: falta de comunicación efectiva entre usuarios y analistas, requisitos que cambian sin control, poca participación de usuarios en el proceso y falta de conocimiento profundo del dominio del software por parte de los analistas. Estos desafíos pueden llevar a malentendidos, requisitos inconsistentes o incompletos, y un software que no cumple las necesidades reales de los usuarios.
Definir y explicar los tipos de Requisitos que conozca
Los tipos de requisitos en el desarrollo de software son:
Requisitos Funcionales: Lo que el software debe hacer, como acciones en
respuesta a estímulos.
* Requisitos No Funcionales: Aspectos de calidad como seguridad, rendimiento y
usabilidad.
* Requisitos de Usuario: Expectativas en lenguaje natural de los usuarios.
* Requisitos del Sistema: Versiones técnicas de los requisitos de usuario.
* Requisitos Implícitos/Explícitos: Implicados o claramente expresados.
* Requisitos de Dominio: Basados en regulaciones o contexto específico.
* Requisitos de Interfaz: Conexiones con otros sistemas.
* Requisitos de Rendimiento: Niveles de rendimiento esperados.
* Requisitos de Seguridad: Medidas de protección y acceso.
* Requisitos de Usabilidad: Criterios de facilidad de uso.