bài tập lập trình về hướng đối tượng trong java cơ bản có lời giải

Spread the love

Bài tập lập trình hướng đối tượng java- Cung cấp thông tin về danh sách khách hàng (Customer) như hình

lập trình hướng đối tượng java

Với mỗi đối tượng khách hàng (Customer), những yêu cầu về dữ liệu cần được quản lý bao gồm Customer ID, Name, Address và Age.

lập trình hướng đối tượng java

Khuôn mẫu để tạo ra khách hàng

public class Customer {
  int customerID;
  String customerName;
  String customerAddress;
  int customerAge;

 public static void main(String[] args) {
  Customer c = new Customer();

  c.customerID = 100;
  c.customerName = "Jack";
  c.customerAddress = "123 Street";
  c.customerAge = 30;

  System.out.println("Ma: " + c.customerID);
  System.out.println("Ten: " + c.customerName);
  System.out.println("Dia chi: " + c.customerAddress);
  System.out.println("Tuoi: " + c.customerAge);
 }
}

Giải thích

  • Khai báo thuộc tính của đối tượng khách hàng
int customerID;
String customerName;
String customerAddress;
int customerAge;
  • Tạo một đối tượng khách hàng
Customer c = new Customer();
  • Truy cập đến các thuộc tính để lưu trữ thông tin của đối tượng
c.customerID = 100;
c.customerName = "John";
c.customerAddress = "123 Street";
c.customerAge = 30;
  • Hiển thị thông tin chi tiết đối tượng khách hàng
System.out.println("Ma: " + c.customerID);
System.out.println("Ten: " + c.customerName);
System.out.println("Dia chi: " + c.customerAddress);
System.out.println("Tuoi: " + c.customerAge);

Thảo luận về các hành vi của đối tượng

lập trình hướng đối tượng java

Giải thích

  • Hành vi changeCustomerAddress() được sử dụng để thay đổi địa chỉ của khách hàng
void changeCustomerAddress(String address) { 
 customerAddress = address; 
}
  • Hành vi displayCustomerInformation() được sử dụng để thiển thị thông tin khách hàng
void displayCustomerInformation() {
 System.out.println("Ma: " + customerID);
 System.out.println("Ten: " + customerName);
 System.out.println("Dia chi: " + customerAddress);
 System.out.println("Tuoi: " + customerAge);
}

Kết luận

Lớp (class) là khuôn mẫu để tạo ra đối tượng. Các thành viên của lớp bao gồm thuộc tính (dữ liệu) và phương thức (hành vi)

lập trình hướng đối tượng java

Khai báo class

public <class_name> { 
   class body 
}

Khai báo thuộc tính

[access_modifier] data_type propertyName;

access_modifier gọi là phạm vi truy cập. Nó có thể là private, protected và public

private Chỉ được phép truy cập tại lớp khai báo
protected Được phép truy cập tại lớp khai báo, lớp con cùng gói hoặc khác gói và những lớp cùng gói (package)
public Được truy cập ở tất cả các lớp, ở tất cả các gói trong cùng project
default Được truy cập ở những lớp con cùng gói hoặc những lớp khác cùng gói

lap trinh huong doi tuong java 8

instanceVariableName chỉ định tên của thuộc tính

Khai báo phương thức

[access_modifier] <return type> <method_name> ([list of parameters]) {
    Body of the method 
}

Trong đó:

  • access_modifier tương tự khai báo thuộc tính
  • returntype chỉ định kiểu dữ liệu trả về như int, long, float, double, String, boolean, object
  • method_name là tên phương thức
  • list of parameters là các giá trị được truyền cho phương thức

Ví dụ tạo phương thức nhập thông tin khách hàng với phạm vi truy cập là private

private void inputCustomerInformation() {
   Scanner s = new Scanner(System.in);
  
  System.out.println("Nhap ma khac hang");
  customerID = s.nextInt();
 
  //Clear
  s.nextLine();

  System.out.println("Nhap ten khach hang");
  customerName = s.nextLine();

  System.out.println("Nhap dia chi");
  customerAddress = s.nextLine();

  System.out.println("Nhap tuoi");
  customerAge = s.nextInt();
}

Tạo đối tượng

 <class_name> <object_name> = new <class_name>();

Trong đó:

  • class_name là tên lớp
  • object_name là tên đối tượng

Ví dụ tạo đối tượng khách hàng

Customer c = new Customer();

Truy cập thuộc tính và phương thức

//Truy cập thuộc tính
object_name.propertyName;
//Truy cập phương thức
object_name.methodName;

Ví dụ truy cập thuộc tính và phương thức của đối tượng c

//Truy cập thuộc tính customerID
System.out.println(c.customerID);

//Truy cập phương thức nhập thông tin
c.inputCustomerInformation();

//Truy cập phương thức hiển thị thông tin
c.displayCustomerInformation();

Tạo lớp (class) trong Netbeans IDE

Chuột phải project -> chọn New -> chọn Java Class

lập trình hướng đối tượng java

Nhập tên lớp tại Class Name -> chọn Finish

lập trình hướng đối tượng java

Kết quả khi tạo thành công một class trong Netbeans IDE

lap trinh huong doi tuong java 7

Bài số 1: Thực hành lập trình hướng đối tượng trong java

Xây dựng khuôn mẫu để tạo đối tượng sinh viên trong một lớp học. Biết rằng mỗi sinh viên cần quản lý các thông tin như mã số sinh viên, tên sinh viên, nơi sinh, tháng ngày năm sinh, giới tính, số điện thoại, email và mã lớp.

thành lập áp dụng cho phép nhập và hiển thị thông tin của sinh viên với đề nghị chi tiết như sau:

vận dụng hiển thị danh sách tính năng cho phép mọi người tuyển lựa:
•add/ADD – Input
•disp/DISP – Display
•exit/EXIT – Eixt application

Khi người sử dung nhập “add/ADD”:
•Nhập thông tin cho sinh viên.
•Các thông tin như tên sinh viên, giới tính, tháng ngày năm sinh và số điện thoại nép phải nhập. Các thông báo khác có thể bỏ qua.
•Mã sinh viên được phát sinh tự động.
•Giới tính chỉ được phép nhập nam/Nam hoặc nữ/Nữ.
•tháng ngày năm sinh phải đủ 10 ký tự.

Khi người sử dung nhập “disp/DISP”:
•Hiển thị thông tin sinh viên.
•tính năng này chỉ được thực hiện sau khi đã thực hành chức năng “add/ADD”

Bài số 2: Bài thực hành lập trình hướng đối tượng trong java

thành lập lớp để tạo danh sách nhân viên trong một Địa chỉ. Biết rằng mỗi nhân viên cần quản lý các thông báo như tên nhân viên, nơi sinh, tháng ngày năm sinh, giới tính, trình độ chuyên môn, số điện thoại, email. Trong lớp này sẽ có hai phương thức để thực hiện nhập thông báo cho viên chức và hiển thị thông tin của nhân viên.

dùng lớp đã tạo ở trên để nhập thông báo cho 3 viên chức trong công ty; cho phép tầm thông báo nhân viên theo tên, …

Phương thức khởi tạo

Được dùng để khởi tạo giá trị} cho các thuộc tính, có tên trùng với tên lớp, được gọi khi tạo đối tượng.

Khai báo theo cú pháp

 

public ClassName(Danh sách tham số){
   Xử lý
}

Ví dụ khai báo phương thức khởi tạo cho lớp Customer

public class Customer {
  //Thuộc tính
  int customerID;
  String customerName;
  String customerAddress;
  int customerAge;
  //Phương thức khởi tạo (Constructor)
  public Customer(int id, String name, String address, int age){
    customerID = id;
    customerName = name;
    customerAddress = address;
    customerAge = age;
  }
}

Gọi phương thức khởi tạo để tạo ra một nhân viên với các thông tin được chỉ định

Customer c1 = new Customer(1, "Bùi Văn Nông", "HCM", 24);

Bài số 3: Bài tập thực hành lập trình hướng đối tượng java

thành lập chương trình cho phép cộng, trừ, nhân và chia 2 phân số. dùng phương thức khởi tạo để nhập tử số và mẫu số. Mỗi một phép tính tương ứng cho một phương thức.

Lập trình hướng đối tượng java – Tính kế thừa

Đặt vấn đề
•Xây dựng lớp để tạo đối tượng viên chức với các thông tin như tên, Nhà, email, số điện thoại, bằng cấp. Phương thức nhập và hiển thị thông tin viên chức.
•thành lập lớp để tạo khách hàng với các thông báo như tên, Cơ sở, email, số điện thoại, loại khách hàng. Phương thức nhập và hiển thị thông tin cư dân.

Phân tích
•Cả hai lớp có những hình dáng chung tên, Cơ sở, email, số điện thoại
•Cả hai lớp đều có xử lý nhập và hiển thị tên, Nhà, email, số điện thoại

 

lap trinh huong doi tuong java 12

Kết luận

  • Những phần chung sẽ được khai báo ở lớp chung (lớp cha).
  • Lớp nhân viên và lớp khách hàng sẽ kế thừa những phần chung ở lớp cha.

lap trinh huong doi tuong java 13

Lưu ý:

lap trinh huong doi tuong java 9

Cú pháp

  • Xây dựng lớp dùng chung (lớp cha)
public class BaseClass {
  //Khai báo thuộc tính chung
  //Xây dựng phương thức chung
}
  • Xây dựng lớp mới kế thừa lớp cha
public class ClassName extends BaseClass {
  //Khai báo những thuộc tính riêng
  //Xây dựng phương thức riêng
}

Ví dụ về kế thừa gồm 3 lớp Nguoi, NhanVien và KhachHang

Lớp Nguoi

package inheritance;

/**
 *
 * @author giasutinhoc.vn
 */
public class Nguoi {
 protected String ten;
 protected String diachi;
 protected String email;
 protected String sdt;

 public Nguoi(String ten, String diachi, String email, String sdt) {
  this.ten = ten;
  this.diachi = diachi;
  this.email = email;
  this.sdt = sdt;
 }
 
 public void nhap() {
  Scanner s = new Scanner(System.in);
  System.out.println("Nhap ho ten:");
  ten = s.nextLine();
  
  System.out.println("Nhap dia chi:");
  diachi = s.nextLine();

  System.out.println("Nhap email:");
  email = s.nextLine();

  System.out.println("Nhap so dien thoai:");
  sdt = s.nextLine(); 
 }
 
 public void hienthi() {
  System.out.println("Ho ten:" + ten);
  System.out.println("Dia chi:" + diachi);
  System.out.println("Email:" + email);
  System.out.println("So dien thoai:" + sdt);
 }
}

Lớp NhanVien

package inheritance;

/**
 *
 * @author giasutinhoc.vn
 */
 public class NhanVien extends Nguoi{
   private String bangcap;

   public NhanVien(String bangcap, String ten, String diachi, String email, String sdt) {
     super(ten, diachi, email, sdt);
     this.bangcap = bangcap;
 }

 //@Override
 public void nhap() {
   super.nhap(); 
   Scanner s = new Scanner(System.in);
   System.out.println("Nhap bang cap:");
   bangcap = s.nextLine();
 }

 @Override
 public void hienthi() {
   super.hienthi(); 
   System.out.println("Bang cap: " + bangcap);
 }
}

Lớp KhachHang

package inheritance;

/**
 *
 * @author giasutinhoc.vn
 */
public class KhachHang extends Nguoi{
 private String loai;

 public KhachHang(String ten, String diachi, String email, String sdt, String loai) {
  super(ten, diachi, email, sdt);
  this.loai = loai;
 }

 @Override
 public void nhap() {
  super.nhap(); 
 
  Scanner s = new Scanner(System.in);
  System.out.println("Nhap loai:");
  loai = s.nextLine();
 }

 @Override
 public void hienthi() {
  super.hienthi(); 
  System.out.println("Loai: " +loai);
 }
}

Overriding Methods

Trong lớp con cho phép tạo phương thức cùng tên, cùng kiểu dữ liệu, cùng số lượng tham số và kiểu dữ liệu trả về như phương thức ở lớp cha nhưng khác nhau về xử lý.

Ví dụ phương thức nhap() trong ví  dụ trên được override ở lớp con

Tại lớp cha (lớp Nguoi)

public void nhap() {
 Scanner s = new Scanner(System.in);
 System.out.println("Nhap ho ten:");
 ten = s.nextLine();
 
 System.out.println("Nhap dia chi:");
 diachi = s.nextLine();
 
 System.out.println("Nhap email:");
 email = s.nextLine();
 
 System.out.println("Nhap so dien thoai:");
 sdt = s.nextLine(); 
 }

Tại lớp con (lớp NhanVien)

@Override
public void nhap() {
 super.nhap();
 
 Scanner s = new Scanner(System.in);
 System.out.println("Nhap bang cap:");
 bangcap = s.nextLine();
}

Truy cập constructor, method và attribute của lớp cha

Truy cập phương thức (method) của lớp cha

super.method-name();

Truy cập phương thức khởi tạo (constructor) của lớp cha

super(<argument list>);

Truy cập thuộc tính (attribute) của lớp cha

super.attribute-name;

Ví dụ về truy cập constructor và method

Lớp Vehicle (Lưu ý nội dung in đậm)

package inheritance.superkeyword;

/**
 *
 * @author giasutinhoc.vn
 */
public class Vehicle {

 // Declare common attributes of a vehicle
  protected String vehicleNo; // Variable to store vehicle number
  protected String vehicleName; // Variable to store vehicle name
  protected int wheels; // Variable to store number of wheels

  public Vehicle(String vehicleNo, String vehicleName, int wheels) {
    this.vehicleNo = vehicleNo;
    this.vehicleName = vehicleName;
    this.wheels = wheels;
 }
 
 /**
 * Accelerates the vehicle
 *
 * @return void
 */
 public void accelerate(int speed) {
   System.out.println("Accelerating at: " + speed + "km");
 }
}

Lớp FourWheeler (Lưu ý nội dung in đậm)

package inheritance.superkeyword;

/**
 *
 * @author giasutinhoc.vn
 */
public class FourWheeler extends Vehicle {
 // Declare a field specific to child class
  private boolean powerSteer; // Variable to store steering information
 
   public FourWheeler(String vId, String vName, int numWheels, boolean pSteer) {
    // Attributes inherited from parent class
    // Invoke the super class constructor
    super(vId,vName,numWheels);

    // Child class’ own attribute
     powerSteer = pSteer;
   }

 @Override
 public void accelerate(int speed) {
   //Calling method of super class
   super.accelerate(speed);
   System.out.println("Maximum Accelerating at: " + speed + "km");
 }
}

Bài tập thực hành lập trình hướng đối tượng java – Bài số 4

Xây dựng lớp với tên Person có các thuộc tính tên, địa chỉ, email, số điện thoại và 2 phương thức dùng để nhập và hiển thị thông tin.

Xây dựng lớp tên Employee kế thừa lớp Person có thêm thuộc tính bằng cấp

Xây dựng lớp tên Customer kế thừa lớp Person có thêm thuộc tính loại khách hàng

Lập trình hướng đối tượng java – Tính đóng gói

Đối với những thuộc tính đươc khai báo ở này nhưng sẽ không được truy cập ở lớp khác => những thuộc tính này sẽ được khai báo với phạm vi truy cập là private

Đối với những thuộc tính chỉ cho phép đọc không cho phép ghi => xây dựng phương thức getter

Đối với những thuộc tính chỉ cho phép ghi không cho phép đọc => xây dựng phương thức setter

public class Rectangle {
  private int length;
  private int width;

  //Đọc
  public int getLength() {
    return length;
  }
  //Ghi
  public void setWidth(int w) {
    width = w;
  }
}

Lập trình hướng đối tượng java – Tính đa hình

Trong thực tế, cùng một người cũng có thể đảm nhận nhiều vai trò khác nhau như làm cha, làm con, làm chồng, vv. Điều này có nghĩa, họ hành xử khác nhau trong các tình huống khác nhau.

Tương tự như vậy, Java cung cấp một tính năng gọi là đa hình trong đó các đối tượng hành xử khác nhau dựa trên các bối cảnh mà chúng được sử dụng.

Trường hợp 1 – Trong một lớp:

Xây dựng những phương thức trùng tên nhưng khác nhau về tham số (số lượng, kiểu dữ liệu, trình tự xuất hiện). Dựa vào ngữ cảnh lúc thực thi để quyết định phương thức nào được gọi.

Ví dụ tạo lớp Customer có 2 constructor (Lưu ý nội dung in đậm)

public class Customer {
  //Thuộc tính
  int customerID;
  String customerName;
  String customerAddress;
  int customerAge;

  //Phương thức khởi tạo không có tham số
  public Customer(){
     customerID = 0;
     customerName = "";
     customerAddress = "";
     customerAge = 0;
  }

  //Phương thức khởi tạo có tham số (Constructor)
  public Customer(int id, String name, String address, age){
    customerID = id;
    customerName = name;
    customerAddress = address;
    customerAge = age;
  }
}

Trường hợp 2 – Trong nhiều lớp:

Đa hình thể hiện ở kỹ thuật override method.

public class Vehicle {
 public void accelerate(int speed) {
   System.out.println("Accelerating at: " + speed + "km");
 }
}
public class FourWheeler extends Vehicle {
  @Override
  public void accelerate(int speed) {
    //Calling method of super class
    super.accelerate(speed);
    System.out.println("Maximum Accelerating at: " + speed + "km");
 }
}

Trường hợp khác tạo thể hiện của một lớp từ nhiều lớp khác nhau

package polymorphism;

/**
 *
 * @author giasutinhoc.vn
 */
public class Employee {

 String empId; // Variable to store employee ID
 String empName; // Variable to store employee name
 int salary; // Variable to store salary
 float commission; // Variable to store commission

 public Employee(String id, String name, int sal) {
   empId = id;
   empName = name;
   salary = sal;
 }

 public void calcCommission(int overtime) {
  if (overtime > 8) {
    commission = salary / 30;
   } else {
    commission = 0;
  }
 }

 public void displayDetails() {
   System.out.println("Employee ID:" + empId);
   System.out.println("Employee Name:" + empName);
   System.out.println("Salary:" + salary);
   System.out.println("Commission:" + commission);
 }
}
package polymorphism;

/**
 *
 * @author giasutinhoc.vn
 */
public class PartTimeEmployee extends Employee {

 // Subclass specific variable
 String shift; // Variable to store shift information

 public PartTimeEmployee(String id, String name, int sal, String shift) {
   // Invoke the super class constructor
   super(id, name, sal);
   this.shift = shift;
 }

 @Override
 public void displayDetails() {
   calcCommission(12); // Invoke the inherited method
   super.displayDetails(); // Invoke the super class display method
   System.out.println("Working shift:" + shift);
 }
}
 package polymorphism;

/**
 *
 * @author giasutinhoc.vn
 */
public class EmployeeDetails {

 public static void main(String[] args) {
   // Instantiate the Employee class object
   Employee objEmp = new Employee("E001", "Maria Nemeth", 40000);
   objEmp.calcCommission(20000F); // Calculate commission
   objEmp.displayDetails(); // Print the details
   System.out.println("-------------------------");

   // Instantiate the Employee object as PartTimeEmployee
   Employee objEmp1 = new PartTimeEmployee("E002", "Rob Smith", 30000,"Day");
   objEmp1.displayDetails(); // Print the details
 }
}

Kết quả khi chạy chương trình

lap trinh huong doi tuong java 10Nguồn: http://giasutinhoc.vn/lap-trinh-java-co-ban/lap-trinh-huong-doi-tuong-java-bai-2/

Leave a Reply

Your email address will not be published. Required fields are marked *