Skip to content

Instantly share code, notes, and snippets.

@VaneMG
Last active February 28, 2024 04:05
Show Gist options
  • Save VaneMG/227ecd01ee63aa476f55d1f9cf38337b to your computer and use it in GitHub Desktop.
Save VaneMG/227ecd01ee63aa476f55d1f9cf38337b to your computer and use it in GitHub Desktop.
Anteproyecto: Sistema de Tutoría Inteligente para Aprendizaje de Idiomas

1.1.1 Entrevista, Anaisis del sistema y seleccion del Leng. de Programacion y BASE de DATOS

Entrevista de los requerimientos del sistema

1. ¿Podría describirnos brevemente su negocio y sus principales actividades?

Somos una empresa de educación en línea que ofrece cursos de idiomas a estudiantes de todo el mundo. Nuestro objetivo es hacer que el aprendizaje de idiomas sea accesible y efectivo para todos.

2. ¿Cuáles son los principales desafíos que enfrenta su empresa en este momento?

Uno de nuestros mayores desafíos es la personalización. Cada estudiante aprende a un ritmo diferente y tiene diferentes necesidades. Es difícil proporcionar una experiencia de aprendizaje personalizada con los métodos tradicionales.

3. ¿Cómo cree que un sistema de tutoría inteligente podría ayudar a su empresa a superar estos desafíos?

Un sistema de tutoría inteligente podría personalizar la experiencia de aprendizaje para cada estudiante. Podría evaluar el nivel de conocimiento del estudiante, identificar sus puntos fuertes y débiles, y adaptar el contenido y las actividades a sus necesidades individuales.

4. ¿Quiénes serán los usuarios principales de este software?

Los usuarios principales serían estudiantes de idiomas de todas las edades y niveles de conocimiento. El sistema debería ser fácil de usar y accesible para cualquier persona con una conexión a internet.

5. ¿Cuáles son las tareas principales que los usuarios necesitan realizar con este software?

Los usuarios deberían poder realizar las siguientes tareas con el software:

  • Evaluar su nivel de conocimiento de idiomas.
  • Aprender nuevo vocabulario y gramática.
  • Practicar sus habilidades de conversación y escritura.
  • Recibir retroalimentación personalizada sobre su progreso.

6. ¿Qué funcionalidades y características son esenciales para este software?

Las funcionalidades y características esenciales del software incluyen:

  • Un motor de IA que pueda personalizar la experiencia de aprendizaje para cada estudiante.
  • Una biblioteca completa de contenido educativo, incluyendo lecciones, ejercicios y actividades.
  • Herramientas para la evaluación del progreso del estudiante.
  • Un sistema de retroalimentación personalizado.

7. ¿Hay alguna funcionalidad o característica específica que no se deba incluir en el software?

No queremos que el software sea demasiado complejo o difícil de usar. Queremos que sea una herramienta intuitiva y accesible para todos los usuarios.

8. ¿En qué entorno se utilizará este software?

El software debería ser accesible en línea a través de un navegador web.

9. ¿Hay algo más que le gustaría que supiéramos sobre sus necesidades para este software?

Es importante que el software sea compatible con los estándares educativos internacionales. También queremos que sea lo más atractivo y motivador posible para los estudiantes.

Análisis del Sistema

Resumen Ejecutivo

Cliente: Juan Perez

Fecha: 2024-02-21

Objetivo: Desarrollar un sistema de tutoría inteligente de idiomas que personalice la enseñanza de idiomas basándose en IA.

Necesidades del cliente:

  • Personalizar la experiencia de aprendizaje para cada estudiante.
  • Evaluar el nivel de conocimiento del estudiante.
  • Identificar los puntos fuertes y débiles del estudiante.
  • Adaptar el contenido y las actividades a las necesidades individuales del estudiante.
  • Ofrecer una biblioteca completa de contenido educativo.
  • Brindar herramientas para la evaluación del progreso del estudiante.
  • Implementar un sistema de retroalimentación personalizado.
  • Ser accesible en línea a través de un navegador web.
  • Ser compatible con los estándares educativos internacionales.
  • Ser atractivo y motivador para los estudiantes.

Presupuesto: A definir

Cronograma: 2 a 3 meses

Próximos pasos:

  • Desarrollar una propuesta detallada.
  • Presentar la propuesta al cliente.
  • Obtener la aprobación del cliente.
  • Iniciar el desarrollo del software.

Beneficios:

  • El sistema de tutoría inteligente de idiomas permitirá a los estudiantes aprender idiomas de forma más efectiva y eficiente.
  • El sistema será personalizado para las necesidades individuales de cada estudiante.
  • El sistema será accesible y fácil de usar.
  • El sistema será atractivo y motivador para los estudiantes.

Riesgos:

  • El desarrollo del sistema puede ser complejo y costoso.
  • El sistema puede no ser compatible con todos los dispositivos o navegadores web.
  • El sistema puede no ser atractivo para todos los estudiantes.

Conclusión:

Un sistema de tutoría inteligente de idiomas tiene el potencial de revolucionar la forma en que las personas aprenden idiomas. El sistema puede brindar a los estudiantes una experiencia de aprendizaje personalizada, efectiva y eficiente.

Recomendaciones:

  • Se recomienda realizar una investigación exhaustiva sobre las tecnologías de IA disponibles para la educación.
  • Se recomienda involucrar a los usuarios finales en el proceso de desarrollo del software.
  • Se recomienda realizar pruebas exhaustivas del software antes de su lanzamiento.

Atentamente,

Vanessa Millán

Elección de los lenguajes de programación y otros recursos.

Python y JavaScript

1.1 GIST de Github

Sistema de Tutoría Inteligente para Aprendizaje de Idiomas

Justificación de un Sistema de Tutoría Inteligente (STI) para el aprendizaje de idiomas

Introducción

El aprendizaje de idiomas es una necesidad cada vez más importante en el mundo globalizado actual. Sin embargo, el proceso de aprendizaje puede ser desafiante y requerir mucho tiempo y esfuerzo. Los métodos tradicionales de aprendizaje de idiomas, como las clases presenciales o los libros de texto, no siempre se ajustan a las necesidades y estilos de aprendizaje individuales de los estudiantes.

Necesidad de un STI

Un Sistema de Tutoría Inteligente (STI) para el aprendizaje de idiomas puede ser una solución eficaz para superar las limitaciones de los métodos tradicionales. Un STI puede ofrecer una experiencia de aprendizaje personalizada, interactiva y efectiva que se adapta a las necesidades y preferencias individuales de cada estudiante.

Beneficios de un STI

Los beneficios de un STI para el aprendizaje de idiomas incluyen:

  • Personalización: El STI puede evaluar el nivel de competencia lingüística del estudiante y crear un plan de estudio personalizado que se ajuste a sus necesidades y objetivos.
  • Interactividad: El STI puede ofrecer lecciones interactivas que utilizan diferentes recursos multimedia, como videos, audios y juegos, para mantener al estudiante motivado e interesado.
  • Adaptabilidad: El STI puede adaptar la dificultad de las actividades de aprendizaje según el progreso del estudiante, proporcionándole un desafío constante y evitando la frustración o el aburrimiento.
  • Feedback y corrección: El STI puede proporcionar retroalimentación instantánea y precisa sobre la pronunciación, la gramática y el vocabulario del estudiante, lo que le ayuda a mejorar sus habilidades lingüísticas de manera más eficiente.
  • Flexibilidad: El STI permite al estudiante aprender a su propio ritmo y en su propio tiempo, sin necesidad de ajustarse a un horario o lugar específico.
  • Accesibilidad: El STI puede ser utilizado por estudiantes de cualquier parte del mundo, con acceso a internet.

Conclusión

Un STI para el aprendizaje de idiomas es una herramienta poderosa que puede ayudar a los estudiantes a mejorar sus habilidades lingüísticas de manera más efectiva y eficiente. Los beneficios de un STI son numerosos e incluyen la personalización, la interactividad, la adaptabilidad, la retroalimentación y la corrección, la flexibilidad y la accesibilidad.

En resumen, un STI puede ser una herramienta invaluable para cualquier persona que desee aprender un nuevo idioma.

A continuación se presentan algunos ejemplos adicionales de cómo un STI puede mejorar el aprendizaje de idiomas:

  • El STI puede ayudar a los estudiantes a superar la timidez o la ansiedad a la hora de hablar en un idioma extranjero.
  • El STI puede proporcionar a los estudiantes un entorno seguro y de apoyo para practicar sus habilidades lingüísticas.
  • El STI puede ayudar a los estudiantes a mantenerse motivados e interesados en el aprendizaje de idiomas.
  • El STI puede ayudar a los estudiantes a ahorrar tiempo y dinero en comparación con los métodos tradicionales de aprendizaje de idiomas.

En definitiva, un STI es una herramienta innovadora y con un gran potencial para revolucionar el aprendizaje de idiomas.

image

1.2 Listar los patrones de diseño de su sistema, use GTP para detectar las clases.

1. Realizar la justificación de las clases del sistema, en contraste a el lenguaje de programación que es el recomendable por el GTP

JavaScript

  • Student (Estudiante): Necesitamos una clase para representar a cada estudiante individualmente y almacenar información como su progreso, preferencias de aprendizaje y datos personales. Esta clase permitirá personalizar la experiencia de aprendizaje para cada estudiante.
  • Assessment (Evaluación): Esta clase se encargará de evaluar el nivel de conocimiento del estudiante y de identificar sus puntos fuertes y débiles. De esta manera, podremos adaptar el contenido y las actividades de acuerdo con las necesidades individuales del estudiante.
  • ContentLibrary (Biblioteca de Contenidos): La biblioteca de contenidos educativos necesitará una clase que la represente. Esta clase contendrá todos los recursos educativos disponibles para los estudiantes y permitirá acceder y gestionar este contenido de manera eficiente.
  • ProgressTracker (Seguimiento de Progreso): Esta clase será responsable de hacer un seguimiento del progreso del estudiante a lo largo del tiempo. Proporcionará herramientas para evaluar el progreso del estudiante y ofrecer retroalimentación personalizada basada en su desempeño.
  • FeedbackSystem (Sistema de Retroalimentación): Esta clase gestionará el sistema de retroalimentación personalizada, brindando comentarios específicos a cada estudiante sobre su desempeño, áreas de mejora y logros alcanzados.
  • OnlinePlatform (Plataforma en Línea): Necesitamos una clase para representar la plataforma en línea a través de la cual los estudiantes accederán al sistema. Esta clase se encargará de gestionar la accesibilidad a través de un navegador web y garantizar la compatibilidad con los estándares educativos internacionales.
  • EngagementTools (Herramientas de Participación): Esta clase se encargará de proporcionar herramientas y funcionalidades diseñadas para hacer que el sistema sea atractivo y motivador para los estudiantes. Esto puede incluir elementos de gamificación, recompensas por logros, y otras técnicas para fomentar la participación y la motivación. Estas clases proporcionan una estructura básica para implementar un sistema de tutoría inteligente que cumpla con las especificaciones proporcionadas. Cada una cumple un papel específico en la personalización, evaluación, adaptación, y motivación de la experiencia de aprendizaje para los estudiantes.

2. Localiza la lista de patrones Diseño

Patrones Creacionales:

  • Singleton: Garantiza una única instancia del sistema en memoria.
  • Factory Method: Crea objetos de diferentes tipos de tutores según el idioma.
  • Builder: Crea planes de aprendizaje personalizados para cada estudiante.

Patrones Estructurales:

  • Composite: Representa una jerarquía de objetos de aprendizaje.
  • Decorator: Añade funcionalidades a objetos de aprendizaje sin modificar su código.
  • Adapter: Adapta diferentes interfaces de API de recursos de aprendizaje.

Patrones de Comportamiento:

  • Observer: Notifica a los componentes del sistema sobre cambios en el estado del estudiante.
  • State: Representa el estado actual del estudiante en el proceso de aprendizaje.
  • Strategy: Implementa algoritmos de aprendizaje automático para la evaluación y recomendación de contenido.

Patrones Adicionales:

  • MVC (Modelo-Vista-Controlador): Separa la lógica del negocio de la interfaz de usuario.
  • Repository: Encapsula el acceso a los datos de los estudiantes y del contenido de aprendizaje.

Consideraciones adicionales:

  • Seguridad: Garantizar la seguridad de los datos de los estudiantes.
  • Privacidad: Respetar la privacidad de los estudiantes.
  • Accesibilidad: Hacer que el sistema sea accesible para estudiantes con diferentes discapacidades.

3. Apoyarse del MERMAID JS https://mermaid.live/ para un bosquejo de cada uno de los patrones genericamente representados.

Patrones Creacionales:

  • Singleton

image

  • Factory Method

image

  • Builder

image

Patrones Estructurales:

  • Composite

image

  • Decorator

image

  • Adapter

image

Patrones de Comportamiento:

  • Observer

image

  • State

image

El diagrama de clases muestra la estructura del sistema de tutoría inteligente, donde cada clase, como Student, Assessment y ContentLibrary, desempeña un papel específico en la personalización y gestión del aprendizaje. Se emplean patrones de diseño creacionales, estructurales y de comportamiento, como Singleton, Composite y Observer, para garantizar la eficiencia, modularidad y adaptabilidad del sistema, abordando aspectos como la gestión de recursos, evaluación del progreso y adaptación de la experiencia de aprendizaje. Esto permite un diseño sólido y flexible que optimiza la experiencia educativa para los estudiantes mientras se facilita el mantenimiento y la extensión del sistema.

image

4. Determinar el Lenguaje de Programación el cual se recomienda por el GTP dos alternativas

Python y JavaScript

1.3 Patrones de diseño Originales (java)

Patrones de diseño creacional

Los patrones de creación consisten en diferentes mecanismos utilizados para crear objetos.

Patrón Singleton

Singleton es un patrón de diseño que garantiza que una clase solo tenga una instancia inmutable. En pocas palabras, el patrón singleton consiste en un objeto que no se puede copiar ni modificar. A menudo es útil cuando queremos tener un único punto de verdad inmutable para nuestra aplicación.

classDiagram
   class Config {
       <<singleton>>
       start()
       update()
   }

   class Object {
       freeze()
   }

   Config --> Object : freeze()

image

Patrón de método de fábrica

El patrón de método Factory proporciona una interfaz para crear objetos que se pueden modificar después de la creación. Lo bueno de esto es que la lógica para crear nuestros objetos está centralizada en un solo lugar, simplificando y organizando mejor nuestro código.

classDiagram
    class Alien {
        - name: string
        - phrase: string
        - species: string
        + constructor(name: string, phrase: string)
        + fly(): void
        + sayPhrase(): void
    }

    Alien <-- "1" alien1

image

Patrón de fábrica abstracto

El patrón Abstract Factory nos permite producir familias de objetos relacionados sin especificar clases concretas. Es útil en situaciones en las que necesitamos crear objetos que compartan solo algunas propiedades y métodos.

classDiagram
    class Car {
        - name: string
        - wheels: number
        + constructor()
        + turnOn(): void
    }

    class Truck {
        - name: string
        - wheels: number
        + constructor()
        + turnOn(): void
    }

    class Motorcycle {
        - name: string
        - wheels: number
        + constructor()
        + turnOn(): void
    }

    class VehicleFactory {
        + createVehicle(type: string): Car | Truck | Motorcycle
    }

    Car --> VehicleFactory : creates
    Truck --> VehicleFactory : creates
    Motorcycle --> VehicleFactory : creates

image

Patrón de constructor

El patrón Builder se utiliza para crear objetos en "pasos". Normalmente tendremos funciones o métodos que añaden ciertas propiedades o métodos a nuestro objeto.

classDiagram
    class Bug {
        - name: string
        - phrase: string
        + constructor(name: string, phrase: string)
        + getName(): string
        + getPhrase(): string
    }

    class FlyingBug {
        <<interface>>
        + fly(): void
    }

    class TalkingBug {
        <<interface>>
        + saySomething(): void
    }

    Bug --> FlyingBug : implements
    Bug --> TalkingBug : implements

image

Patrón de prototipo

El patrón Prototype permite crear un objeto utilizando otro objeto como modelo, heredando sus propiedades y métodos.

classDiagram
    class Enemy {
        + attack(): void
        + flyAway(): void
    }

    class Bug {
        - name: string
        - phrase: string
        + constructor(name: string, phrase: string)
        + getName(): string
        + getPhrase(): string
    }

    Enemy <|-- Bug

image

Patrones de diseño estructural

Los patrones estructurales se refieren a cómo ensamblar objetos y clases en estructuras más grandes.

Patrón de adaptador

El adaptador permite que dos objetos con interfaces incompatibles interactúen entre sí.

classDiagram
    class City {
        - name: string
        - habitants: number
        + constructor(name: string, habitants: number)
        + getName(): string
        + getHabitants(): number
    }

    class CityAdapter {
        <<interface>>
        + toMillions(): void
    }

    class CityCollection {
        - cities: City[]
        + constructor()
        + addCity(city: City): void
        + getMostHabitantsInMillions(): number
    }

    City <|-- CityAdapter
    CityAdapter o-- CityCollection

image

Patrón de decorador

El patrón Decorator permite asociar nuevos comportamientos a los objetos colocándolos dentro de objetos contenedores que contienen los comportamientos.

classDiagram
    class ContextProvider {
        + constructor()
        + render(): ReactElement
    }

    class App {
        + render(): ReactElement
    }

    class AboutPage {
        + render(): ReactElement
    }

    App --> ContextProvider
    App --> AboutPage

image

Patrón de fachada

El patrón Facade proporciona una interfaz simplificada para una biblioteca, un marco o cualquier otro conjunto complejo de clases.

classDiagram
    class BasicTable {
        + render(): ReactElement
    }

    class TableContainer {
        + component: ReactElement
    }

    class Table {
        + sx: object
        + aria-label: string
    }

    class TableHead {
        // No properties or methods in this example
    }

    class TableBody {
        // No properties or methods in this example
    }

    class TableRow {
        + key: string
        + sx: object
    }

    class TableCell {
        + component: string
        + align: string
        + children: ReactNode
    }

    class Paper {
        // No properties or methods in this example
    }

    BasicTable --> TableContainer
    TableContainer --> Table
    Table --> TableHead
    Table --> TableBody
    TableHead --> TableRow
    TableBody --> TableRow
    TableRow --> TableCell

image

Patrón de proxy

El patrón Proxy proporciona un sustituto o marcador de posición para otro objeto. La idea es controlar el acceso al objeto original, realizando algún tipo de acción antes o después de que la solicitud llegue al objeto original real.

classDiagram
    class TokenAuthenticator {
        + authenticateToken(req: Request, res: Response, next: NextFunction): void
    }

    class Request {
        // No properties or methods in this example
    }

    class Response {
        + status(code: number): Response
        + send(data: any): Response
    }

    class NextFunction {
        // No properties or methods in this example
    }

    TokenAuthenticator --> Request
    TokenAuthenticator --> Response
    TokenAuthenticator --> NextFunction

image

Patrones de diseño conductual

Los patrones de comportamiento controlan la comunicación y la asignación de responsabilidades entre diferentes objetos.

Patrón de Cadena de Responsabilidad

La cadena de responsabilidad pasa las solicitudes a lo largo de una cadena de controladores. Cada controlador decide procesar la solicitud o pasarla al siguiente controlador de la cadena.

classDiagram
    class FrontendApp {
        + renderUIComponent(): void
    }

    class APIRequest {
        + sendRequest(): void
    }

    class DataProcessor {
        + processData(data: any): void
    }

    class UIManager {
        + renderData(data: any): void
    }

    FrontendApp --> APIRequest
    APIRequest --> DataProcessor
    DataProcessor --> UIManager

image

Patrón de iterador

El iterador se utiliza para recorrer elementos de una colección. Esto puede sonar trivial en los lenguajes de programación que se usan hoy en día, pero no siempre fue así.

classDiagram
    class Iterator {
        + hasNext(): boolean
        + next(): any
    }

    class Aggregate {
        + createIterator(): Iterator
    }

    class ArrayIterator {
        - index: number
        - array: any[]
        + hasNext(): boolean
        + next(): any
    }

    class ArrayAggregate {
        - array: any[]
        + createIterator(): Iterator
    }

    class ObjectIterator {
        - keys: string[]
        - index: number
        - object: any // Corregido aquí, ya que los objetos en TypeScript son de tipo any
        + hasNext(): boolean
        + next(): any
    }

    class ObjectAggregate {
        - object: any // Corregido aquí, ya que los objetos en TypeScript son de tipo any
        + createIterator(): Iterator
    }

    Aggregate <|-- ArrayAggregate
    Aggregate <|-- ObjectAggregate
    Iterator <|.. ArrayIterator
    Iterator <|.. ObjectIterator

image

Patrón de observador

El patrón de observador permite definir un mecanismo de suscripción para notificar a varios objetos sobre cualquier evento que ocurra en el objeto que están observando. Básicamente, es como tener un detector de eventos en un objeto determinado, y cuando ese objeto realiza la acción que estamos escuchando, hacemos algo.

classDiagram
    class useEffect {
        + executeEffect(): void
    }

    class ReactHook {
        + effectFunction: Function
        + dependencies: any[]
        + executeEffect(): void
    }

    class SimpleEventObserver {
        + event: string
        + callback: Function
        + observeEvent(): void
    }

    class ReactiveLibrary {
        + subscribe(event: string, callback: Function): void
        + notify(event: string, data: any): void
    }

    useEffect <|.. ReactHook
    useEffect <|.. SimpleEventObserver
    useEffect <|.. ReactiveLibrary

image

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment