Skip to content

jonathanMM97/iiss-2023

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 

Repository files navigation

Prácticas de Implementación 2023

Las prácticas consistirán en construir y realizar la implementación de un ejemplo de cada tema. La implementación se realizará en un lenguaje a elegir por el estudiante.

Los ejemplos serán similares a los estudiados en teoría, u otros alternativos propuestos por cada estudiante. La elección del ejemplo de un tema no excluye utilizar elementos de otros temas, aunque se intentará centrarlo sobre todo en elementos de construcción propios del tema elegido.

Procedimiento

  1. Elegir 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 para el tema en cuestión y el ejemplo propuesto
  2. Proponer un ejemplo a implementar, bien similares a los estudiados en teoría, bien propuestos por el estudiante.
    • Colocad el ejemplo que implementéis en una carpeta con el nombre del lenguaje que hayáis elegido. Por ejemplo:
      • csharp
      • lua
      • kotlin
      • python
      • typescript
      • ruby
      • scala
      • swift
  3. Implementar cada ejemplo 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,
      • inyeccion,
      • anotaciones,
      • aspectos,
      • undefined,
      • lambdas,
      • asincrono,
      • observables.
  4. Publicar los ejemplos en un repositorio
    • Hacer un fork de este repositorio y notificar al profesor por correo sobre el nuevo repo, para que pueda actuar como watcher.
    • Todos los ficheros deben estar realizados sobre carpetas cuyos nombres coincidan con los nombres de los temas elegidos.
    • Cada ejemplo en cada carpeta debe incluir un fichero README.md con las instrucciones en markdown, desde las que se enlace a:
      • el código implementado
      • las pruebas construidas
      • los ficheros de configuración propios de la herramienta de construcción utilizada (v.g. makefiles, pom.xml, etc.) que sen necesarios para compilar y probar el ejemplo.
    • El repositorio principal debe incluir un README.md que enlace a cada uno de los ejemplos/temas implementados
  5. Hacer la entrega en el campus virtual, indicando la URL de vuestro repositorio
  6. 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 minutos y entregarlo a través del campus virtual.

Temas

Bloque I. Orientación a Objetos

1. Encapsulación

Implementar el ejemplo final de Recorrido de listas (o un ejemplo equivalente) 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.

2. Herencia

Implementar el ejemplo de Aventura (o un ejemplo equivalente) 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.

3. Delegación

Implementar el ejemplo final de Orquesta (o un ejemplo equivalente) 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.

Bloque II. Dependencias y Calidad de Código

4. Inyección

Implementar el ejemplo de la identificación de BankAccount (o un ejemplo equivalente) 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:

5. Anotaciones

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

6. Aspectos

Implementar usando aspectos el ejemplo del caso Editor de Figuras (o un ejemplo equivalente). Por ejemplo:

7. Undefined

Implementar el ejemplo del caso "MobileTester" del apartado Optionals (o un ejemplo equivalente) 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 III. Programación Funcional

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

9. Programación asíncrona

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:

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

About

Prácticas de implementación de IISS

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Lua 42.4%
  • Scala 32.8%
  • AspectJ 13.7%
  • Java 4.9%
  • JavaScript 3.9%
  • TypeScript 2.3%