Lập trình hướng đối tượng (OOP – Object Oriented Programming) là một trong những phương pháp phổ biến nhất giúp giải quyết các bài toán phức tạp một cách hiệu quả và dễ dàng. Hãy cùng Rikkei Academy tìm hiểu và thực hành một số bài tập OOP Java cấp độ cơ bản để nắm vững kiến thức cơ bản về lập trình hướng đối tượng trong Java.
Bài tập OOP Java có lời giải
Bài OOP Java 1
Tạo lớp “Library” với một bộ sưu tập sách và các phương thức để thêm và xóa sách.
import java.util.ArrayList;
class Library { private ArrayList<Book> bookCollection; // Constructor (Hàm tạo) của lớp Library public Library() { this.bookCollection = new ArrayList<>(); } // Phương thức để thêm sách vào thư viện public void addBook(Book book) { bookCollection.add(book); } // Phương thức để xóa sách khỏi thư viện theo ISBN public void removeBookByIsbn(String isbn) { bookCollection.removeIf(book -> book.getIsbn().equals(isbn)); } // Phương thức in ra danh sách sách trong thư viện public void printBookList() { System.out.println(“Book list in the library:”); for (Book book : bookCollection) { System.out.println(book); } } } |
Bài tập OOP Java 2
Tạo lớp “Person” với thuộc tính tên và tuổi. Tạo hai đối tượng của lớp “Person”, thiết lập thuộc tính bằng constructor và in tên và tuổi của chúng.
// Khai báo lớp “Person” với thuộc tính tên và tuổi
public class Person { private String name; private int age; // Tạo constructor để thiết lập giá trị cho các thuộc tính khi tạo đối tượng public Person(String name, int age) { this.name = name; this.age = age; } // Định nghĩa các phương thức getter để truy xuất giá trị của các thuộc tính public String getName() { return name; } public int getAge() { return age; } } Để sử dụng lớp “Person” này, ta tạo tệp chứa một lớp chứa hàm main như sau: // Lớp Main để chạy chương trình public class Main { public static void main(String[] args) { // Tạo hai đối tượng của lớp “Person” và truyền các giá trị tên và tuổi vào qua constructor Person person1 = new Person(“John”, 25); Person person2 = new Person(“Jane”, 30); // In ra thông tin của hai đối tượng bằng cách sử dụng các phương thức getter để lấy giá trị của các thuộc tính System.out.println(“Person 1: ” + person1.getName() + “, ” + person1.getAge() + ” years old”); System.out.println(“Person 2: ” + person2.getName() + “, ” + person2.getAge() + ” years old”); } } |
Bài 3
Tạo lớp “Dog” với thuộc tính tên và giống. Tạo hai đối tượng của lớp “Dog”, thiết lập thuộc tính của chúng bằng constructor và điều chỉnh thuộc tính bằng các phương thức setter, sau đó in các giá trị đã cập nhật.
// Khai báo lớp “Dog” với thuộc tính tên và giống
public class Dog { private String name; private String breed; // Tạo constructor để thiết lập giá trị cho các thuộc tính khi tạo đối tượng public Dog(String name, String breed) { this.name = name; this.breed = breed; } // Định nghĩa các phương thức setter để thiết lập giá trị của các thuộc tính public void setName(String name) { this.name = name; } public void setBreed(String breed) { this.breed = breed; } // Định nghĩa các phương thức getter để truy xuất giá trị của các thuộc tính public String getName() { return name; } public String getBreed() { return breed; } } |
Để sử dụng lớp “Dog” này, ta tạo tệp chứa một lớp chứa hàm main như sau:
// Lớp Main để chạy chương trình
public class Main { public static void main(String[] args) { // Tạo hai đối tượng của lớp “Dog” và truyền các giá trị tên và giống vào qua constructor Dog dog1 = new Dog(“Max”, “Golden Retriever”); Dog dog2 = new Dog(“Buddy”, “Labrador Retriever”); // In ra thông tin của hai đối tượng ban đầu System.out.println(“Dog 1: ” + dog1.getName() + “, ” + dog1.getBreed()); System.out.println(“Dog 2: ” + dog2.getName() + “, ” + dog2.getBreed()); // Điều chỉnh thuộc tính tên của đối tượng bằng phương thức setter dog1.setName(“Charlie”); dog2.setBreed(“Poodle”); // In ra thông tin của hai đối tượng sau khi đã cập nhật System.out.println(“Dog 1: ” + dog1.getName() + “, ” + dog1.getBreed()); System.out.println(“Dog 2: ” + dog2.getName() + “, ” + dog2.getBreed()); } } |
Bài OOP Java 4
Tạo lớp “Rectangle” với thuộc tính chiều rộng và chiều cao. Tính diện tích và chu vi của hình chữ nhật.
// Khai báo lớp “Rectangle” với hai thuộc tính chiều rộng và chiều cao
public class Rectangle { private double width; private double height; // Tạo constructor để thiết lập giá trị cho các thuộc tính khi tạo đối tượng public Rectangle(double width, double height) { this.width = width; this.height = height; } // Định nghĩa phương thức tính diện tích của hình chữ nhật public double getArea() { return width * height; } // Định nghĩa phương thức tính chu vi của hình chữ nhật public double getPerimeter() { return 2 * (width + height); } } |
Để sử dụng lớp “Rectangle” này, ta tạo tệp chứa một lớp chứa hàm main như sau:
// Lớp Main để chạy chương trình
public class Main { public static void main(String[] args) { // Tạo một đối tượng của lớp “Rectangle” và truyền các giá trị chiều rộng và chiều cao vào qua constructor Rectangle rectangle = new Rectangle(4, 6); } } |
Bài 5
Tạo lớp “Circle” với thuộc tính bán kính sao cho có thể truy cập và chỉnh sửa thuộc tính này. Tính diện tích và chu vi của hình tròn.
// Khai báo lớp “Circle” với thuộc tính bán kính
public class Circle { private double radius; // Tạo constructor để thiết lập giá trị cho thuộc tính bán kính khi tạo đối tượng public Circle(double radius) { this.radius = radius; } // Định nghĩa phương thức getter để truy xuất giá trị của thuộc tính bán kính public double getRadius() { return radius; } // Định nghĩa phương thức setter để chỉnh sửa giá trị của thuộc tính bán kính public void setRadius(double radius) { this.radius = radius; } // Định nghĩa phương thức tính diện tích của hình tròn public double getArea() { return Math.PI * radius * radius; } // Định nghĩa phương thức tính chu vi của hình tròn public double getPerimeter() { return 2 * Math.PI * radius; } } Để sử dụng lớp “Circle” này, ta tạo tệp chứa một lớp chứa hàm main như sau: // Lớp Main để chạy chương trình public class Main { public static void main(String[] args) { // Tạo một đối tượng của lớp “Circle” và truyền giá trị bán kính vào qua constructor Circle circle = new Circle(5); // Thay đổi giá trị bán kính của hình tròn circle.setRadius(10); } } |
Bài 6
Tạo lớp “Book” với các thuộc tính cho tiêu đề, tác giả và ISBN, cùng với các phương thức để thêm và xóa sách khỏi bộ sưu tập.
// Khai báo lớp “Book”
public class Book { private String title; private String author; private String isbn; // Tạo constructor để thiết lập giá trị cho các thuộc tính khi tạo đối tượng public Book(String title, String author, String isbn) { this.title = title; this.author = author; this.isbn = isbn; } // Định nghĩa phương thức getter để truy xuất giá trị của thuộc tính “title” public String getTitle() { return title; } public String getAuthor() { return author; } public String getIsbn() { return isbn; } // Định nghĩa phương thức để thêm sách vào bộ sưu tập public void addBookToCollection(List<Book> collection) { collection.add(this); } // Định nghĩa phương thức để xóa sách khỏi bộ sưu tập public void removeBookFromCollection(List<Book> collection) { collection.remove(this); } } |
Bài tập OOP Java 7
Tạo lớp “Employee” với các thuộc tính tên, chức vụ và mức lương, cùng với các phương thức để tính toán mức lương.
// Khai báo lớp Employee
public class Employee { // Khai báo các thuộc tính của lớp Employee private String name; // Tên nhân viên private String position; // Chức vụ của nhân viên private double salary; // Mức lương của nhân viên // Hàm khởi tạo lớp Employee với các tham số đầu vào public Employee(String name, String position, double salary) { this.name = name; this.position = position; this.salary = salary; } // Các phương thức getter và setter cho các thuộc tính của lớp Employee public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPosition() { return position; } public void setPosition(String position) { this.position = position; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } // Phương thức tính mức lương của nhân viên public double calculateSalary(int hoursWorked) { if (hoursWorked <= 0) { return 0; } return salary * hoursWorked; } } |
Bài 8
Bài tập OOP Java này yêu cầu: Tạo lớp “Employee” với các thuộc tính tên, mức lương và ngày thuê, cùng với một phương thức để tính số năm làm việc.
import java.time.LocalDate;
import java.time.Period; // Khai báo lớp Employee public class Employee { // Khai báo các thuộc tính của lớp Employee private String name; // Tên nhân viên private double salary; // Mức lương của nhân viên private LocalDate hireDate; // Ngày thuê nhân viên // Hàm khởi tạo lớp Employee với các tham số đầu vào public Employee(String name, double salary, int year, int month, int day) { this.name = name; this.salary = salary; this.hireDate = LocalDate.of(year, month, day); } // Phương thức tính số năm làm việc của nhân viên public int getYearsOfWorking() { LocalDate currentDate = LocalDate.now(); // Lấy ngày hiện tại Period period = Period.between(hireDate, currentDate); // Tính khoảng thời gian giữa ngày thuê và ngày hiện tại return period.getYears(); // Trả về số năm làm việc } // Các phương thức getter và setter cho các thuộc tính của lớp Employee public String getName() { return name; } public void setName(String name) { this.name = name; } public double getSalary() { return salary; } public void setSalary(double salary) { this.salary = salary; } public LocalDate getHireDate() { return hireDate; } public void setHireDate(LocalDate hireDate) { this.hireDate = hireDate; } } |
Bài tập OOP Java rèn luyện
Dưới đây là một số bài tập OOP Java để bạn có thể tự luyện tập kiến thức và kỹ năng lập trình của mình
Bài 8: Viết chương trình Java để tạo lớp có tên “TrafficLight” với các thuộc tính màu sắc và thời lượng, cùng với các phương thức để thay đổi màu sắc và kiểm tra màu đỏ hoặc xanh lá cây.
Bài 9: Tạo lớp “MusicLibrary” với một bộ sưu tập bài hát và các phương thức để thêm và xóa bài hát, cũng như phát một bài hát ngẫu nhiên.
Bài 10: Tạo một lớp với các phương thức để tìm kiếm chuyến bay và khách sạn, đặt và hủy đặt phòng.
Bài 11: Tạo lớp “Bank” với một bộ sưu tập tài khoản và các phương thức để thêm và xóa tài khoản, nạp tiền và rút tiền. Định nghĩa một lớp “Account” để duy trì thông tin chi tiết tài khoản của một khách hàng cụ thể.
Bài 12: Tạo lớp “Student” với các thuộc tính tên, điểm số và các khóa học, cùng với các phương thức để thêm và xóa khóa học.
Bài 13: Tạo lớp “Airplane” với các thuộc tính số hiệu chuyến bay, điểm đến và thời gian khởi hành, cùng với các phương thức để kiểm tra tình trạng chuyến bay và chậm trễ.
Bài 14: Tạo lớp “Inventory” với một bộ sưu tập sản phẩm và các phương thức để thêm và xóa sản phẩm, cũng như kiểm tra hàng tồn kho thấp.
Bài 15: Tạo lớp “School” với các thuộc tính cho học sinh, giáo viên và lớp học, cùng với các phương thức để thêm và xóa học sinh, giáo viên và tạo lớp học.
Bài 16: Tạo lớp “Shape” với các phương thức trừu tượng để tính diện tích và chu vi, và các lớp con cho “Rectangle”, “Circle” và “Triangle”.
Bài 17: Tạo lớp “Movie” với các thuộc tính cho tiêu đề, đạo diễn, diễn viên và đánh giá, cùng với các phương thức để thêm và truy xuất đánh giá.
Bài 18: Tạo lớp “Restaurant” với các thuộc tính cho các món ăn, giá cả và đánh giá, cùng với các phương thức để thêm và xóa các món ăn, và tính đánh giá trung bình.
Kết luận
Sau khi thực hành các bài tập OOP Java cấp độ cơ bản trong bài viết này, hy vọng bạn đã nắm vững hơn về kiến thức lập trình hướng đối tượng trong Java. Hãy tiếp tục tìm hiểu và thực hành nhiều bài tập khác nâng cao hơn để nâng cao kỹ năng lập trình hướng đối tượng của bạn nhé!
>> Tham khảo khóa học lập trình Java tại Rikkei Academy tại đây!