{"id":27437398,"url":"https://github.com/allersec/matriz-app","last_synced_at":"2025-04-14T20:29:03.844Z","repository":{"id":285611475,"uuid":"958740193","full_name":"AllerSec/matriz-app","owner":"AllerSec","description":null,"archived":false,"fork":false,"pushed_at":"2025-04-01T17:39:02.000Z","size":13,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-01T18:39:56.522Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/AllerSec.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-04-01T17:25:35.000Z","updated_at":"2025-04-01T17:39:05.000Z","dependencies_parsed_at":"2025-04-01T18:42:02.992Z","dependency_job_id":"3868fc16-0d30-4a65-959b-8c12f3a27eae","html_url":"https://github.com/AllerSec/matriz-app","commit_stats":null,"previous_names":["allersec/matriz-app"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllerSec%2Fmatriz-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllerSec%2Fmatriz-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllerSec%2Fmatriz-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AllerSec%2Fmatriz-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AllerSec","download_url":"https://codeload.github.com/AllerSec/matriz-app/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248954847,"owners_count":21188873,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-04-14T20:29:03.325Z","updated_at":"2025-04-14T20:29:03.832Z","avatar_url":"https://github.com/AllerSec.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Aplicación de Matrices en Java\n\n## Descripción\nEsta aplicación Java implementa una clase Matriz con funcionalidades para visualizar y operar sobre matrices numéricas. Desarrollada con Java Swing y Maven, permite crear matrices, visualizarlas gráficamente y calcular sus transpuestas siguiendo estrictamente los principios SOLID de diseño orientado a objetos.\n\n## Estructura del Proyecto\n\n```\nmatriz-app/\n├── pom.xml\n├── src/\n│   ├── main/\n│   │   ├── java/\n│   │   │   └── com/\n│   │   │       └── matriz/\n│   │   │           ├── app/\n│   │   │           │   └── Main.java\n│   │   │           ├── gui/\n│   │   │           │   ├── MatrizFrame.java\n│   │   │           │   └── MatrizPanel.java\n│   │   │           ├── interfaces/\n│   │   │           │   ├── IImprimible.java\n│   │   │           │   └── ITransponible.java\n│   │   │           └── modelo/\n│   │   │               └── Matriz.java\n│   │   └── resources/\n└── target/\n```\n\n## Aplicación de Principios SOLID\n\n### 1. Principio de Responsabilidad Única (S)\nCada clase tiene una única razón para cambiar:\n\n- **Matriz.java**: Responsable únicamente de la representación y operaciones de matrices\n    - Encapsula los datos de la matriz y operaciones matemáticas\n    - No contiene lógica relacionada con interfaz gráfica o E/S\n\n- **MatrizPanel.java**: Responsable únicamente de la visualización gráfica\n    - Solo se ocupa de dibujar la matriz en un panel\n\n- **MatrizFrame.java**: Responsable únicamente de la gestión de la interfaz de usuario\n    - Maneja eventos y controla el flujo de la interfaz gráfica\n\n- **Main.java**: Responsable únicamente de iniciar la aplicación\n    - Punto de entrada único y configuración inicial\n\n### 2. Principio Abierto/Cerrado (O)\nLas clases están abiertas para extensión pero cerradas para modificación:\n\n- **Matriz.java**:\n    - Diseñada para permitir agregar nuevas operaciones sin modificar su implementación interna\n    - Expone métodos bien definidos como `getElemento()`, `getFilas()`, `getColumnas()`\n\n- **Interfaces IImprimible e ITransponible**:\n    - Permiten extender el comportamiento implementando nuevas clases sin cambiar el código existente\n    - La implementación de matrices puede cambiar sin afectar a los clientes que usan estas interfaces\n\n### 3. Principio de Sustitución de Liskov (L)\nLas subclases deben poder sustituir a sus clases base:\n\n- **Matriz.java**:\n    - Implementa completamente los contratos definidos por las interfaces\n    - No viola las precondiciones o postcondiciones establecidas en las interfaces\n    - Cualquier subclase que extienda Matriz mantendría el comportamiento esperado\n\n### 4. Principio de Segregación de Interfaces (I)\nInterfaces específicas son mejores que una interfaz general:\n\n- **IImprimible.java**:\n    - Contiene solo el método `imprimir()` relacionado con la representación textual\n    - No obliga a implementar métodos no relacionados\n\n- **ITransponible.java**:\n    - Se enfoca exclusivamente en la operación matemática de transpuesta\n    - Utiliza genéricos para mayor flexibilidad (`ITransponible\u003cT\u003e`)\n\n### 5. Principio de Inversión de Dependencias (D)\nDepender de abstracciones, no de implementaciones concretas:\n\n- **MatrizPanel.java**:\n    - Depende de la abstracción de Matriz a través de su interfaz pública\n    - No depende de detalles internos de implementación\n\n- **MatrizFrame.java**:\n    - Interactúa con las matrices a través de sus interfaces\n    - La lógica de presentación está desacoplada de la lógica de negocio\n\n## Características Principales\n\n- Creación de matrices a partir de texto ingresado por el usuario\n- Visualización gráfica de matrices con celdas coloreadas\n- Cálculo e implementación de la operación de transpuestas\n- Representación textual de matrices originales y transpuestas\n- Interfaz de usuario intuitiva con operaciones claramente definidas\n- Validación de datos para asegurar la integridad de las matrices\n\n## Requisitos\n\n- Java 11 o superior\n- Maven 3.6 o superior\n\n## Compilación y Ejecución\n\nPara compilar el proyecto:\n```\nmvn clean package\n```\n\nPara ejecutar la aplicación:\n```\njava -jar target/matriz-app-1.0-SNAPSHOT.jar\n```\n\n## Uso\n\n1. Ingrese los valores de la matriz en el área de texto superior, separando las filas con saltos de línea y los valores con espacios\n2. Haga clic en \"Crear Matriz\" para visualizar la matriz\n3. Use el botón \"Transponer\" para calcular y visualizar la transpuesta de la matriz actual\n\n## Licencia\n[MIT License](LICENSE)\n\n## Link \nhttps://github.com/AllerSec/matriz-app.git\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallersec%2Fmatriz-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fallersec%2Fmatriz-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallersec%2Fmatriz-app/lists"}