Skip to content

uca-gii/iiss-2022

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

306 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Ejercicios prácticos - Implementación 2022

Los ejercicios consistirán en construir y realizar la implementación de cuatro ejemplos, un ejemplo de cada uno de los bloques siguientes:

  • Objetos
  • Dependencias
  • Calidad
  • Funciones

De cada bloque se elegirá un solo tema sobre el que construir el ejemplo. La implementación se realizará en un lenguaje también a elegir. Los ejemplos serán similares a los estudiados en teoría, o propuestos por cada alumno. La elección de un tema para implementar un ejemplo no excluye utilizar elementos de otros temas, aunque se intentará centrar el ejemplo sobre todo en la implementación de elementos del tema elegido.

Procedimiento

  1. Elegir un tema de cada bloque, según la lista de temas.
    • Notificar por correo en el campus al profesor los temas elegidos y esperar su confirmación.
    • Estudiar los ejemplos del tema estudiados en clases de teoría, o bien proponer un ejemplo alternativo.
  2. Elegir al menos un lenguaje de implementación de entre los siguientes:
    • Scala
    • Python
    • TypeScript y JavaScript
    • C#
    • Ruby
    • Cualquier otro lenguaje que tenga un mecanismo útil de implementación del tema elegido y el ejemplo propuesto
  3. Implementar los ejemplos empleando los mecanismos del lenguaje elegido.
    • Incluir una breve explicación escrita en markdown, que incluya instrucciones sobre cómo construir, compilar y ejecutar el ejemplo.
    • Incluir en el código un programa principal breve de demostración del ejercicio.
    • Ubicar los ficheros markdown y el código fuente del ejemplo en la carpeta con el nombre del tema situada bajo la carpeta temas.
    • Los nombres permitidos para las carpetas a situar bajo temas/ son:
      • encapsulacion,
      • herencia,
      • delegacion,
      • uniones,
      • inyeccion,
      • anotaciones,
      • aspectos,
      • contratos,
      • undefined,
      • lambdas,
      • promesas o futuros,
      • observables.
  4. Publicar los ejemplos en un repositorio github
    • Todos los ficheros deben estar realizados sobre carpetas cuyos nombres coincidan con los nombres de los temas elegidos.
    • El repositorio debe incluir un fichero README.md con las instrucciones, el código implementado y los ficheros de configuración y makefiles necesarios para compilar y probar el ejemplo.
  5. Hacer la presentación del ejercicio realizado de alguna de estas dos formas:
    • Pedir fecha al profesor para presentar el ejemplo en clase, o bien...
    • Grabar un video explicativo de menos de 8' y entregarlo a través del campus.

Temas

Bloque I. Objetos

Encapsulación

Implementar el ejemplo final de Recorrido de listas usando los mecanismos del lenguaje para definición de tipos de datos, ocultación de la implementación, aplicación del principio de acceso uniforme y especificación de la inmutabilidad del estado de un objeto. Por ejemplo:

  • En Ruby, se podrían usar :symbols, module, @variables de instancia, attr_accessor, attr_reader, attr_writer, etc.
  • En Scala, se podrían usar modificadores de visibilidad (private, protected), var, val, type, abstract, sealed, etc.
  • En C#, se podrían usar modificadores de visibilidad y properties get,set e init, etc.

Herencia

Implementar el ejemplo de Aventura usando los mecanismos de herencia y polimorfismo de inclusión que proporcione el lenguaje. Por ejemplo:

  • En Scala, podría usarse el mecanismo básico de herencia (extends), mixins (traits), with, etc.
  • En C#, se podrían usar el mecanismo básico de herencia, interface, base, override, virtual, new, etc.

Delegación

Implementar el ejemplo final de Orquesta usando los mecanismos del lenguaje para la delegación/composición. Intentará evitarse el uso de lambdas, que están destinadas a otro bloque. Por ejemplo:

  • En C# podrían usarse delegates.
  • En Scala, podrían usarse first-class functions.
  • En Ruby, podrían usarse bloques, proc, module y delegate.

Uniones

Implementar un ejemplo de uso de uniones type-safe empleando los mecanismos disponibles en el lenguaje. Por ejemplo:

Bloque II. Dependencias

Inyección

Implementar el ejemplo de la identificación de BankAccount y que se puedan definir diversos atributos para comparar cuentas, usando los mecanismos del lenguage para inyectar como dependencia el criterio de comparación. Por ejemplo:

Anotaciones

Implementar el ejemplo de BankAccount con diversos atributos comparables, usando los mecanismos de anotaciones que el lenguaje proporcione para inyectar como dependencia el comparador a usar. Por ejemplo:

Aspectos

Implementar usando aspectos el ejemplo del caso Editor de Figuras. Por ejemplo:

Bloque III. Calidad

Contratos

Implementar ejemplos de contratos, usando una librería disponible en el lenguaje de elección para programar contratos. Por ejemplo:

  • En Java, podría usarse bibliotecas específicas para programar contratos como Contracts for Java, Oval o Valid4J.

  • En Scala, podrían usarse los mecanismos del lenguaje disponibles en Predef.scala, como por ejemplo: assert, assume, require, ensuring, etc.

  • En Kotlin, podría usarse el mecanismo experimental contract

Undefined

Implementar el ejemplo del caso "MobileTester" del apartado Optionals usando los mecanismos del lenguaje para resolver el problema de los valores undefined y el mal uso de null. Por ejemplo:

  • En C++, podría usarse std::optional
  • En Scala, podrían usarse los mecanismos de la biblioteca del lenguaje como Option, Some, None, Either, Left, Right, etc.

Bloque IV. Funcional y Asíncrono

Lambdas

Implementar ejemplos del uso de funciones anónimas (expresiones lambda) empleando los mecanismos disponibles en el lenguaje elegido. Por ejemplo:

  • En C++, usar lambdas genéricas de C++11, lambdas variádicas de C++14/C++17 y lambdas mutables.
  • En Scala, usar funciones anónimas de Scala 3
  • En Ruby, usar lambdas.

Promesas y Futuros

Implementar un ejemplo de programación asíncrona, similar a los mostrados en Promesas y futuros, que emplee los mecanismos disponibles en el lenguaje. Por ejemplo:

Observables

Implementar un ejemplo de procesamiento de streams de eventos asíncronos empleando una biblioteca ReactiveX para el lenguaje elegido. Por ejemplo:

  • En C++, usar los elementos observable de la biblioteca RxCpp.
  • En Scala, usar el framework Akka o el trait Observable de las extensiones RxScala.

Asignación

Lenguaje Bloque I OBJETOS Bloque II DEPENDENCIAS Bloque III CALIDAD Bloque IV FUNCIONAL Y ASINC
SANCHIDRIÁN HERRERA, PABLO TypeScript Herencia Anotaciones Undefined Arrow functions
SAUCEDO GARCÍA, JUAN MANUEL C++, Java Unión (C++) Aspectos (Java) Undefined (C++) Observables (C++)
ROBLES SORROCHE, LUIS Python Delegación Inyección Undefined Observables
VÁZQUEZ SÁEZ, MARÍA C#, Java, C++ Herencia(C#) Inyección (Java) Contratos(valid4j) Promesas y Futuros (C++)
BERNAL PÉREZ, FRANCISCO JOSÉ C#, Python, Java, C++ Delegación(C#) Aspectos(Python) Contratos(Java) Lambdas (C++)
VELO HUERTA, CRISTÓBAL JOSÉ Python, Java Herencia(Python) Aspectos(Java con Guice) Contratos(Python) Lambdas(Python)
PÉREZ MERCADO, RUBÉN Kotlin Herencia Anotaciones Null Safety Lambdas
LOIZ JORDAN, CARLOS C# Herencia Inyección Contratos Lambdas
CARO BARRERA, LUCÍA Python, Java, Scala y C++ Encapsulación (Python) Inyección (Java) Contratos (Scala) Lambdas (C++)
SÁNCHEZ HERNÁNDEZ, PAULO Python,Java,C++,c# Encapsulación Anotaciones Undefined Futuros
GARCÍA-PARDO MONTERO, JAVIER C++.Java,Javascript Herencia Inyección Undefined Lambdas

About

Ejemplos de IISS en diversos lenguajes

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C# 23.0%
  • Python 18.3%
  • Java 18.2%
  • C++ 16.6%
  • TypeScript 11.3%
  • Kotlin 7.8%
  • Other 4.8%