Final Flashcards
(40 cards)
Qué es el Software?
Modelo computable de un dominio de problema de la realidad.
Dominio = recorte de la realidad.
Cuáles son los 3 ejes que tiene que tener un buen modelo?
-Funcional: Cuán bien representa el dominio / En qué medida hace lo esperado
-Descriptivo: Que tan bien describe / cuán claro es / que tan entendible es
-Implementativo: Cuan performante es / cuan bien utiliza los recursos de la máquina
Cuáles son los puntos importantes del eje funcional?
-Representación 1:1 de los entes de la realidad
-Si aparece algo nuevo, en mi modelo aparece una nueva representación
-Si algo cambia, sólo cambia ese “algo”
-Parte observacional del desarrollo
Cuáles son los puntos importantes del eje descriptivo?
-Claridad del código
-Entendible por otros
-Lenguaje del negocio
-Buenos nombres
-Parte “artística” del desarrollo
cuales son los puntos importantes del eje implementativo?
-Funcionamiento en una máquina
-Performance
-Optimización
-Parte “detallista” del desarrollo
Cuales son las caracteristicas esenciales del software?
Proviene del paper no silver bullet.
-Complejidad: Construcción de gran tamaño sin 2 partes iguales
-Conformidad: Se modela algo arbitrario, definido por personas
-Variabilidad: Se espera que se adapte al cambio
-Invisibilidad: Construimos algo que no se puede ver
Qué tipos de complejidad hay?
-Esencial: El problema en esencia es complejo (independiente de su representación)
No hay 2 partes iguales
Crece exponencialmente
-Accidental: Todo lo que no es inherente al problema que intentamos resolver
Lo que surge por ejecutarse en una máquina
Qué es el desarrollo de software?
-Proceso de aprendizaje, iterativo e incremental. Vamos aprendiendo sobre el dominio del problema y desarrollando.
-Feedback inmediato es fundamental
-Eje descriptivo , funcional e implementativo. Foco en eje descriptivo y funcional.
-Aceptar el cambio
En qué consiste el paradigma de objetos?
Objetos que colaboran entre si mediante el envio de mensajes.
Qué es un objeto?
-Representación de un ente de la realidad.
-Se define a partir de los mensajes que sabe responder.
Qué es un mensaje?
Define el QUE del objeto (vs Método que define el COMO)
Define una responsabilidad que tiene el objeto.
Puede tener múltiples implementaciones asociadas (métodos).
Qué es un método?
-Implementación de un mensaje. Define el COMO.
-Conjunto de colaboraciones.
Qué es un colaborador?
-También conocido como variable.
Interno (variable de instancia), externo (parámetro) o temporales (variables).
-Interno: Lo conozco siempre. Relación de cercanía en cuanto al conocimiento.
-Externo: Lo conozco para una colaboración puntual.
-Temporal: Lo conozco temporalmente dentro de un conjunto de colaboraciones.
Qué es un closure?
-Conjunto de colaboraciones, al igual que un método, pero no está asociado a ningún objeto. No hay mensaje asociado.
-Están bindeados al contexto.
-Closure vs “full” closures. Estos últimos tienen binding del return al contexto de ejecución (ej: Smalltalk, Ruby).
Qué es una clase?
-Concepto que aparece en lenguajes OOP con clasificación (vs prototipado, como Self o JS).
-Representa un concepto o idea de la realidad. Ej: “Silla” (clase) vs “esta silla blanca donde estoy sentado (instancia).
-Todo objeto es instancia de una clase.
Qué es una clase abstracta?
-No tiene realizaciones concretas. No hay entes de la realidad que puedo relacionar de forma exclusiva con el concepto. Ej: Todo “Numero” es real, entero, fraccionario o imaginario.
-Tiene al menos un método abstracto.
-No tiene sentido instanciarlo
Cuál es la diferencia entre método de instancia y de clase?
Los primeros definen el comportamiento de las instancias, mientras que los segundos, el comportamiento de las clases.
Qué tipo de subclases hay?
-Especialización. “Se comporta como” (ojo con el ES UN).
-Subclasificación: Forma de organizar conocimiento mediante jerarquías de clases.
Qué es el polimorfismo?
-Dos o mas objetos son polimorficos entre si respecto a un conjunto de mensajes <=>
- Responden de la misma manera / Son semánticamente iguales
- Mismo nombre del mensaje
- Misma cantidad y tipo de parametros
- Mismo tipo de resultado
Cuáles son las Heuristicas de diseño?
-Buscar el 1:1 entre objeto - ente
-Favorecer composicion por sobre subclasificación
-Quitar código repetido: Señal de que falta una abstracción.
-No romper encapsulamiento.
-Nombrar a los objetos segun el ROL que cumplen en un determinado contexto
-No subclasificar de clases concretas
-Guiarnos por los aspectos funcionales conducen a mejores modelos
-Favorecer el uso de polimorfismo por sobre ifs.
-Favorecer inmutabilidad
-Crear objetos completos
-Crear objetos validos
-No usar null
Segun Morden Software Engineering, que es la ingenieria de software?
Es la aplicaicon de un metodo empirico y cientifico para encontrar maneras eficientes y economicas de solucionar problemas del software
Por qué hay que usar el metodo ingenieril?
-Siempre hay descubrimiento y aprendizaje en el desarrollo de software
-Si queremos ser economicos y eficientes, debemos aprender siempre.
Cuáles son los dos puntos importantes para ser ingeniero de software?
Expertos en aprender
Administrar la complejidad del software
Qué necesitamos para aprender?
Iteración, Feedback, incrementalismo, experimentación, empirismo