Skip to content

Commit 19e31f6

Browse files
authored
Merge pull request mouredev#6201 from simonguzman/main
#28 - Java
2 parents b778be9 + 6f4024e commit 19e31f6

File tree

1 file changed

+353
-0
lines changed

1 file changed

+353
-0
lines changed
Lines changed: 353 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,353 @@
1+
2+
import java.util.ArrayList;
3+
import java.util.HashMap;
4+
import java.util.List;
5+
import java.util.Map;
6+
7+
public class simonguzman {
8+
public static void main(String[] args) {
9+
//libraryManagementSystemLiskovViolation();
10+
//libraryLSP();
11+
//LiskovIncorrectTest();
12+
LiskovCorrectTest();
13+
}
14+
/****************************** ejercicio adicional con lsp (Correcto) ******************************/
15+
public static void LiskovCorrectTest() {
16+
VehiculoLsp coche = new Coche();
17+
VehiculoLsp bicicleta = new Bicicleta();
18+
VehiculoLsp motocicleta = new Motocicleta();
19+
20+
// Probar comportamiento de los vehículos
21+
acelerarYFrenarLsp(coche);
22+
acelerarYFrenarLsp(bicicleta);
23+
acelerarYFrenarLsp(motocicleta);
24+
}
25+
26+
public static void acelerarYFrenarLsp(VehiculoLsp vehiculo) {
27+
vehiculo.acelerar();
28+
vehiculo.frenar();
29+
}
30+
31+
static class VehiculoLsp {
32+
public void acelerar() {
33+
System.out.println("El vehículo está acelerando.");
34+
}
35+
36+
public void frenar() {
37+
System.out.println("El vehículo está frenando.");
38+
}
39+
}
40+
41+
static class Coche extends VehiculoLsp {
42+
@Override
43+
public void acelerar() {
44+
System.out.println("El coche está acelerando rápidamente.");
45+
}
46+
47+
@Override
48+
public void frenar() {
49+
System.out.println("El coche está frenando suavemente.");
50+
}
51+
}
52+
53+
static class Bicicleta extends VehiculoLsp {
54+
@Override
55+
public void acelerar() {
56+
System.out.println("La bicicleta está acelerando lentamente.");
57+
}
58+
59+
@Override
60+
public void frenar() {
61+
System.out.println("La bicicleta está frenando manualmente.");
62+
}
63+
}
64+
static class Motocicleta extends VehiculoLsp {
65+
@Override
66+
public void acelerar() {
67+
System.out.println("La motocicleta está acelerando con potencia.");
68+
}
69+
70+
@Override
71+
public void frenar() {
72+
System.out.println("La motocicleta está frenando rápidamente.");
73+
}
74+
}
75+
/****************************** ejercicio adicional sin lsp (Incorrecto) ******************************/
76+
public static void LiskovIncorrectTest() {
77+
Vehiculo cocheElectrico = new CocheElectrico();
78+
acelerarYFrenar(cocheElectrico);
79+
80+
((CocheElectrico) cocheElectrico).recargarBateria();
81+
}
82+
83+
public static void acelerarYFrenar(Vehiculo vehiculo) {
84+
vehiculo.acelerar();
85+
vehiculo.frenar();
86+
}
87+
88+
static class Vehiculo {
89+
public void acelerar() {
90+
System.out.println("El vehículo está acelerando.");
91+
}
92+
93+
public void frenar() {
94+
System.out.println("El vehículo está frenando.");
95+
}
96+
}
97+
98+
// Subclase CocheEléctrico que viola LSP
99+
static class CocheElectrico extends Vehiculo {
100+
@Override
101+
public void acelerar() {
102+
System.out.println("El coche eléctrico está acelerando silenciosamente.");
103+
}
104+
105+
@Override
106+
public void frenar() {
107+
System.out.println("El coche eléctrico está frenando regenerativamente.");
108+
}
109+
110+
// Método adicional que viola el LSP
111+
public void recargarBateria() {
112+
System.out.println("Recargando la batería del coche eléctrico.");
113+
}
114+
}
115+
/****************************** ejemplo con lsp (Correcto) ******************************/
116+
static void libraryLSP(){
117+
LibraryManager libraryManager = new LibraryManager();
118+
UserManager userManager = new UserManager();
119+
LoanManagerLsp loanManager = new LoanManagerLsp();
120+
121+
libraryManager.registerBook(new PhysicalBook("1984", "George Orwell", 3));
122+
libraryManager.registerBook(new EBookLsp("Clean Code", "Robert Martin"));
123+
124+
userManager.registerUser("John Doe", "001", "johndoe@example.com");
125+
126+
User user = userManager.findUserById("001");
127+
BookLsp book1 = libraryManager.findBookByTitle("1984");
128+
BookLsp book2 = libraryManager.findBookByTitle("Clean Code");
129+
130+
loanManager.borrowBook(user, book1);
131+
loanManager.borrowBook(user, book2);
132+
133+
loanManager.returnBook(user, book1);
134+
loanManager.returnBook(user, book2);
135+
}
136+
137+
static abstract class BookLsp{
138+
protected String title;
139+
protected String author;
140+
141+
public BookLsp(){
142+
143+
}
144+
145+
public BookLsp(String title, String author){
146+
this.title = title;
147+
this.author = author;
148+
}
149+
150+
public String getTitle() {
151+
return title;
152+
}
153+
154+
public abstract boolean isAvailable();
155+
public abstract void borrow();
156+
public abstract void returnBook();
157+
}
158+
159+
static class PhysicalBook extends BookLsp{
160+
private int copies;
161+
162+
public PhysicalBook(){
163+
164+
}
165+
166+
public PhysicalBook(String title, String author, int copies){
167+
super(title, author);
168+
this.copies = copies;
169+
}
170+
171+
@Override
172+
public boolean isAvailable(){
173+
return copies > 0;
174+
}
175+
176+
@Override
177+
public void borrow(){
178+
if(copies > 0){
179+
copies--;
180+
}
181+
}
182+
183+
@Override
184+
public void returnBook(){
185+
copies++;
186+
}
187+
}
188+
189+
static class EBookLsp extends BookLsp {
190+
191+
public EBookLsp(String title, String author) {
192+
super(title, author);
193+
}
194+
195+
@Override
196+
public boolean isAvailable() {
197+
return true; // Siempre disponible
198+
}
199+
200+
@Override
201+
public void borrow() {
202+
System.out.println("Descargando eBook...");
203+
}
204+
205+
@Override
206+
public void returnBook() {
207+
System.out.println("El eBook ha sido devuelto.");
208+
}
209+
}
210+
static class LibraryManager{
211+
private List<BookLsp> books = new ArrayList<>();
212+
213+
public void registerBook(BookLsp book){
214+
books.add(book);
215+
System.out.println("Libro registrado: " + book.getTitle());
216+
}
217+
218+
public BookLsp findBookByTitle(String title){
219+
return books.stream().filter(b -> b.getTitle().equals(title)).findFirst().orElse(null);
220+
}
221+
}
222+
223+
static class UserManager{
224+
private List<User> users = new ArrayList<>();
225+
226+
public void registerUser(String name, String id, String email){
227+
users.add(new User(name, id, email));
228+
System.out.println("Usuario registrado: " + name);
229+
}
230+
231+
public User findUserById(String id){
232+
return users.stream().filter(u -> u.getId().equals(id)).findFirst().orElse(null);
233+
}
234+
}
235+
236+
static class LoanManagerLsp{
237+
private Map<User, List<BookLsp>> borrowedBooks = new HashMap<>();
238+
239+
public void borrowBook(User user, BookLsp book){
240+
if(book.isAvailable()){
241+
borrowedBooks.computeIfAbsent(user, k -> new ArrayList<>()).add(book);
242+
book.borrow();
243+
System.out.println("Libro prestado: " + book.getTitle() + " a " + user.getName());
244+
} else {
245+
System.out.println("El libro no está disponible para préstamo.");
246+
}
247+
}
248+
249+
public void returnBook(User user, BookLsp book) {
250+
List<BookLsp> borrowed = borrowedBooks.get(user);
251+
if (borrowed != null && borrowed.contains(book)) {
252+
borrowed.remove(book);
253+
book.returnBook();
254+
System.out.println("Libro devuelto: " + book.getTitle());
255+
} else {
256+
System.out.println("No se pudo devolver el libro.");
257+
}
258+
}
259+
}
260+
261+
static class User{
262+
private String name;
263+
private String id;
264+
private String email;
265+
266+
public User(){
267+
268+
}
269+
270+
public User(String name, String id, String email){
271+
this.name = name;
272+
this.id = id;
273+
this.email = email;
274+
}
275+
276+
public String getName() {
277+
return name;
278+
}
279+
280+
public String getId() {
281+
return id;
282+
}
283+
}
284+
285+
/****************************** ejemplo sin lsp (Incorrecto) ******************************/
286+
public static void libraryManagementSystemLiskovViolation(){
287+
Book physicalBook = new Book("1984", "George Orwell", 3);
288+
EBook ebook = new EBook("Digital Fortress", "Dan Brown", "www.download.com");
289+
290+
LoanManager loanManager = new LoanManager();
291+
292+
loanManager.borrowBook(physicalBook);
293+
294+
loanManager.borrowBook(ebook);
295+
}
296+
297+
static class Book{
298+
private String title;
299+
private String author;
300+
private int copies;
301+
302+
public Book(){
303+
304+
}
305+
306+
public Book(String title, String author, int copies){
307+
this.title = title;
308+
this.author = author;
309+
this.copies = copies;
310+
}
311+
312+
public String getTitle() {
313+
return title;
314+
}
315+
316+
public int getCopies() {
317+
return copies;
318+
}
319+
320+
public void setCopies(int copies) {
321+
this.copies = copies;
322+
}
323+
324+
public void borrow(){
325+
if (copies > 0){
326+
copies--;
327+
System.out.println("Libro prestado: " + title);
328+
} else {
329+
System.out.println("No hay copias disponibles de: " + title);
330+
}
331+
}
332+
}
333+
334+
static class EBook extends Book {
335+
private String downloadLink;
336+
337+
public EBook(String title, String author,String downloadLink) {
338+
super(title, author, 1);
339+
this.downloadLink = downloadLink;
340+
}
341+
342+
@Override
343+
public void borrow(){
344+
System.out.println("No se puede prestar el eBook, pero puedes descargarlo aquí: " + downloadLink);
345+
}
346+
}
347+
348+
static class LoanManager{
349+
public void borrowBook(Book book){
350+
book.borrow();
351+
}
352+
}
353+
}

0 commit comments

Comments
 (0)