Title: Some code corrections to avoid violations on SOLID principles · Issue #2 · flyworker/java-workshop · GitHub
Open Graph Title: Some code corrections to avoid violations on SOLID principles · Issue #2 · flyworker/java-workshop
X Title: Some code corrections to avoid violations on SOLID principles · Issue #2 · flyworker/java-workshop
Description: Hola, He visto la mayoría de tus proyectos y los encuentro muy buenos para enseñar. Sin embargo, he notado algunas violaciones de los principios de diseño SOLID. Aquí dejo algunas correcciones de cómo los diferentes proyectos podrían ver...
Open Graph Description: Hola, He visto la mayoría de tus proyectos y los encuentro muy buenos para enseñar. Sin embargo, he notado algunas violaciones de los principios de diseño SOLID. Aquí dejo algunas correcciones de c...
X Description: Hola, He visto la mayoría de tus proyectos y los encuentro muy buenos para enseñar. Sin embargo, he notado algunas violaciones de los principios de diseño SOLID. Aquí dejo algunas correcciones de c...
Opengraph URL: https://github.com/flyworker/java-workshop/issues/2
X: @github
Domain: patch-diff.githubusercontent.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Some code corrections to avoid violations on SOLID principles","articleBody":"Hola, \r\n\r\nHe visto la mayoría de tus proyectos y los encuentro muy buenos para enseñar. Sin embargo, he notado algunas violaciones de los principios de diseño SOLID. Aquí dejo algunas correcciones de cómo los diferentes proyectos podrían verse, resolviendo estas violaciones, para que puedan enseñarse o ponerse en práctica de una mejor manera.\r\n\r\n1. ISP y LSP en las clases bird y pengin, tambien en la interface Fly\r\n\r\n`public interface Flyer { \r\n void fly(); \r\n} \r\n\r\npublic interface Swimmer { \r\n void swim(); \r\n} \r\n\r\npublic interface Runner { \r\n double speed(); \r\n} \r\n\r\n// Calse abstracta Bird \r\n\r\nprivate abstract class Bird { \r\n\r\n private String name; \r\n private boolean hasFeather; \r\n\r\n protected Bird(String name) { \r\n this.name = name; \r\n this.hasFeather = true; \r\n } \r\n\r\n protected Bird(String name, boolean hasFeather) { \r\n this.name = name; \r\n this.hasFeather = hasFeather; \r\n } \r\n\r\n public boolean isHasFeather() { \r\n return hasFeather; \r\n } \r\n\r\n public String getName() { \r\n return name; \r\n } \r\n public abstract void spawnEgg(); \r\n\r\n @Override \r\n public String toString() { \r\n return \"Bird{\" + \r\n \"name='\" + name + '\\'' + \r\n \", hasFeather=\" + hasFeather + \r\n '}'; \r\n } \r\n} \r\n\r\n// Clase Penguin que implementa las interfaces necesarias \r\n\r\nclass Penguin extends Bird implements Swimmer, Runner { \r\n public Penguin(String name) { \r\n super(name); \r\n } \r\n\r\n public Penguin(String name, boolean hasFeather) { \r\n super(name, hasFeather); \r\n } \r\n\r\n @Override \r\n public double speed() { \r\n return 10.0; \r\n } \r\n\r\n @Override \r\n public void swim() { \r\n System.out.println(\"yo puedo nadar.\"); \r\n } \r\n\r\n // Método específico de Penguin \r\n\r\n public void spawnEgg() { \r\n System.out.println(\"Pinguino poniendo un huevo.\"); \r\n } \r\n} `\r\n\r\n\r\n\r\n2. DIP en las classes ImplementacionNube \r\n\r\n`// Interfaz para servicios de nube \r\n\r\npublic interface ServicioNube { \r\n boolean iniciarSesion(String usuario, String contrasena); \r\n void subirArchivo(File archivo); \r\n String descargarArchivo(String nombreArchivo); \r\n} \r\n\r\n// Implementación de la interfaz ServicioNube \r\n\r\npublic class ImplementacionNube implements ServicioNube { \r\n // Constructor y métodos \r\n\r\n} \r\n\r\n// Cliente de nube que depende de la abstracción (interfaz) \r\n\r\npublic class ClienteNube { \r\n private ServicioNube servicioNube; \r\n \r\n public ClienteNube(ServicioNube servicioNube) { \r\n this.servicioNube = servicioNube; \r\n } \r\n\r\n public boolean iniciarSesion(String usuario, String contrasena) { \r\n return servicioNube.iniciarSesion(usuario, contrasena); \r\n } \r\n\r\n public void subirArchivo(File archivo) { \r\n servicioNube.subirArchivo(archivo); \r\n } \r\n\r\n public String descargarArchivo(String nombreArchivo) { \r\n return servicioNube.descargarArchivo(nombreArchivo); \r\n } \r\n\r\n} `\r\n\r\n\r\n\r\n3. SRP en la clase conexión nube\r\n\r\n`// Clase para manejar la conexión a la nube \r\n\r\npublic class ConexionNube { \r\n private String usuario; \r\n private String contrasena; \r\n\r\n public ConexionNube(String usuario, String contrasena) { \r\n this.usuario = usuario; \r\n this.contrasena = contrasena; \r\n } \r\n // Métodos para la conexión \r\n} \r\n\r\n // Clase para operaciones específicas de la nube \r\n\r\npublic class OperacionesNube { \r\n private ConexionNube conexionNube; \r\n\r\n public OperacionesNube(ConexionNube conexionNube) { \r\n this.conexionNube = conexionNube; \r\n } \r\n\r\n public void subirArchivo(String archivo) { \r\n // Lógica para subir el archivo \r\n } \r\n\r\n public String descargarArchivo(String archivo) { \r\n // Lógica para descargar el archivo \r\n } \r\n\r\n public String descargaRapida(String archivo) { \r\n // Lógica del método \r\n } \r\n\r\n} `\r\n\r\n\r\n\r\n4. OCP en las clases EstrategiaNubeAWS, ServicioNube y EstrategiaNubeAzure\r\n\r\n`// Interfaz para la estrategia de nube \r\n\r\ninterface EstrategiaNube { \r\n void subir(String archivo); \r\n String descargar(String archivo); \r\n\r\n} \r\n\r\n// Implementaciones de nube \r\n\r\nclass EstrategiaNubeAWS implements EstrategiaNube { \r\n public void subir(String archivo) { \r\n // Implementación específica de AWS \r\n } \r\n\r\n public String descargar(String archivo) { \r\n // Implementación de AWS para decargar \r\n }\r\n\r\n} \r\n\r\nclass EstrategiaNubeAzure implements EstrategiaNube { \r\n public void subir(String archivo) { \r\n // Implementación para subir \r\n } \r\n\r\n public String descargar(String archivo) { \r\n // Implementación para descargar \r\n } \r\n\r\n} \r\n\r\n// Clase de servicio de Nube \r\nclass ServicioNube { \r\n private EstrategiaNube estrategiaNube; \r\n\r\n public ServicioNube(EstrategiaNube estrategiaNube) { \r\n this.estrategiaNube = estrategiaNube; \r\n } \r\n\r\n public void subirArchivo(String archivo) { \r\n estrategiaNube.subir(archivo); \r\n } \r\n\r\n public String descargarArchivo(String archivo) { \r\n return estrategiaNube.descargar(archivo); \r\n } \r\n\r\n} `\r\n\r\n\r\n","author":{"url":"https://github.com/LuisVergaraA","@type":"Person","name":"LuisVergaraA"},"datePublished":"2024-06-21T02:31:30.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/2/java-workshop/issues/2"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:716ffcb7-712c-9497-bda1-e694c3763c2d |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | A720:3B932:74ACC8:9748A6:69921E80 |
| html-safe-nonce | faba4ce503fb1f8250d2bb996488ab45f9ab107e50977b4ebe13d3f783fa1fe2 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBNzIwOjNCOTMyOjc0QUNDODo5NzQ4QTY6Njk5MjFFODAiLCJ2aXNpdG9yX2lkIjoiNjY5NTMyODAyODc3MDMxMTgwOCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 5e8076ce17b48893f837f40d22a5acc3681af854542de82e280f78f4c40af0ec |
| hovercard-subject-tag | issue:2365574223 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/flyworker/java-workshop/2/issue_layout |
| twitter:image | https://opengraph.githubassets.com/cd34ae3a95bbba79db5464b1fce6be1f2f148d53fda10b4e6d9f0213efb4f627/flyworker/java-workshop/issues/2 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/cd34ae3a95bbba79db5464b1fce6be1f2f148d53fda10b4e6d9f0213efb4f627/flyworker/java-workshop/issues/2 |
| og:image:alt | Hola, He visto la mayoría de tus proyectos y los encuentro muy buenos para enseñar. Sin embargo, he notado algunas violaciones de los principios de diseño SOLID. Aquí dejo algunas correcciones de c... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | LuisVergaraA |
| hostname | github.com |
| expected-hostname | github.com |
| None | 42c603b9d642c4a9065a51770f75e5e27132fef0e858607f5c9cb7e422831a7b |
| turbo-cache-control | no-preview |
| go-import | github.com/flyworker/java-workshop git https://github.com/flyworker/java-workshop.git |
| octolytics-dimension-user_id | 8363795 |
| octolytics-dimension-user_login | flyworker |
| octolytics-dimension-repository_id | 100090200 |
| octolytics-dimension-repository_nwo | flyworker/java-workshop |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 100090200 |
| octolytics-dimension-repository_network_root_nwo | flyworker/java-workshop |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 848bc6032dcc93a9a7301dcc3f379a72ba13b96e |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width