Final Flashcards

(40 cards)

1
Q

Qué es el Software?

A

Modelo computable de un dominio de problema de la realidad.

Dominio = recorte de la realidad.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Cuáles son los 3 ejes que tiene que tener un buen modelo?

A

-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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Cuáles son los puntos importantes del eje funcional?

A

-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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Cuáles son los puntos importantes del eje descriptivo?

A

-Claridad del código
-Entendible por otros
-Lenguaje del negocio
-Buenos nombres
-Parte “artística” del desarrollo

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

cuales son los puntos importantes del eje implementativo?

A

-Funcionamiento en una máquina
-Performance
-Optimización
-Parte “detallista” del desarrollo

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Cuales son las caracteristicas esenciales del software?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Qué tipos de complejidad hay?

A

-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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Qué es el desarrollo de software?

A

-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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

En qué consiste el paradigma de objetos?

A

Objetos que colaboran entre si mediante el envio de mensajes.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Qué es un objeto?

A

-Representación de un ente de la realidad.

-Se define a partir de los mensajes que sabe responder.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Qué es un mensaje?

A

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).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Qué es un método?

A

-Implementación de un mensaje. Define el COMO.

-Conjunto de colaboraciones.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Qué es un colaborador?

A

-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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Qué es un closure?

A

-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).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Qué es una clase?

A

-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.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Qué es una clase abstracta?

A

-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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Cuál es la diferencia entre método de instancia y de clase?

A

Los primeros definen el comportamiento de las instancias, mientras que los segundos, el comportamiento de las clases.

18
Q

Qué tipo de subclases hay?

A

-Especialización. “Se comporta como” (ojo con el ES UN).

-Subclasificación: Forma de organizar conocimiento mediante jerarquías de clases.

19
Q

Qué es el polimorfismo?

A

-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
20
Q

Cuáles son las Heuristicas de diseño?

A

-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

21
Q

Segun Morden Software Engineering, que es la ingenieria de software?

A

Es la aplicaicon de un metodo empirico y cientifico para encontrar maneras eficientes y economicas de solucionar problemas del software

22
Q

Por qué hay que usar el metodo ingenieril?

A

-Siempre hay descubrimiento y aprendizaje en el desarrollo de software
-Si queremos ser economicos y eficientes, debemos aprender siempre.

23
Q

Cuáles son los dos puntos importantes para ser ingeniero de software?

A

Expertos en aprender

Administrar la complejidad del software

24
Q

Qué necesitamos para aprender?

A

Iteración, Feedback, incrementalismo, experimentación, empirismo

25
Qué necesitamos para ser expertos en manejar complejidad?
-Modularidad, cohesion, separar responsabilidades, abstracción, bajo acoplamiento.
26
Qué dice el texto Modern soft sobre recuperar la ingenieria del software?
-Se perdio un poco el valor de la palabra ingenieria (cosas que funcionan) -Si nuestras practicas del desarrollo de soft no nos permite desarrollar mejor soft y mas rapido, no son ingenieriles
27
Cómo relaciona el texto Modern soft sobre la ciencia?
La ciencia nos permite diferenciar malas y buenas ideas, y si las aplicamos a la realidad estamos haciendo ingenieria.
28
De donde sale ingenieria de software?
Se usa en la OTAN. surge en el contexto de la crisis del software: avanzo mucho el hardware y el software no. "No es que el soft sea lento, el hard esta yendo muy rapido"
29
Qué habla el paper modern soft sobre la ingenieria de diseño y la de producción?
La de producción no es nuestro problema. Tenemos el desafío de la ingeniería de diseño. Tenemos la ventaja de que nosotros, a diferencia de otro tipo de ingenieros, testeamos directamente el producto, y no aproximaciones (maquetas) El desarrollo de software tiene por desafio la exploracion. Se deben aplicar mas tecinas de explocarion que de produccion. Es una disciplina de diseño
30
Qué habla el texto modern soft sobre las mediciones?
Dice que es dificil descartar ideas viejas y por esa razon a veces no hay grandes diferencias en el desarrollo de soft (torta premezcla con casera) No descartamos ideas viejas xq nos acostumbramos a medir nuestro rendimiento, y las metricas que usamos son irrelevantes y dañinas. El texto sugiere nuevas metricas, estabilidad y flujo
31
Cuáles son las métricas sugeridas del texto modern software engineering?
-Estabilidad: Sirve para cuantificar la calidad del trabajo De estabilidad pueden ser: Tasas de fallo en cambios (tasa en la que un cambio desencadena una falla) y tiempo de recuperacion ( cuanto tardamos en recuperarnos de un error) -Flujo: sirve para medir la capacidad de desplegar ideas. Mide oportunidades de aprendizaje. De fliujo pueden ser Tiempo de ejecucion (cuanto se tarda en pasar de una idea a codigo) y frecuencia (cada cuanto tiempo lso cambios son desplegados a produccion)
32
Qué introduce el paper polymorphic hierarchy?
Que los metodos reimplementados son la clave del polimorfismo. Los metodos polimorficos conducen a clases polimorficas y las clases polimorficas conducen a jerarquias polimorficas.
33
Qué habla el paper polymorphic hierarchy sobre las descripciones de los métodos?
No tiene sentido los comentarios, hay que aprovechar la descripcion de la superclase (hace el ejemplo con print) Documentar el tope de la jerarquia
33
Que dice el paper sobre al reutilizacion de descripcion para el polimorfismo?
Tratar de entender una clase sin conocer su superclase es como escuchar un chiste privado sin concoer el contexto Las superclases saben qué hacer pero no saben cómo. Eso se encarga la subclase.
34
Qué significa "el proposito es polimorfico" en polymorphic hierarchy?
Cuando las implementaciones tienen mismo proposito, son polmorficas Cuando todos los metodos de las subclases son polimorficos con sus versiones heredadas, la jerarquia es polimorfica
35
Cómo define el paper al polimorfismo?
Deben comportarse de la misma forma Recibir misma cantidad de parametros, del mismo tipo Mismos efectos secundarios, devolver mismo tipo de resultado
36
De qué sirve que la jerarquia sea polimorfica?
Se vuelve más flexible, reusable, facil de aprender, extensible, etc
37
Qué es el template class?
Es una forma de simular interfaces estilo java. Si no hay, se crea una clase abstracta para tener una serie de mensajes polimorficos
38
Segun el paper programming as theory building, cuál es el objetivo de programar?
No es producir programas, sino que se construyan teorías sobre la forma en que los problemas son resueltos por medio de programas.
39