Thứ Năm, 14 tháng 2, 2019

Học Java - Trừu tượng

Theo từ điển, trừu tượng là chất lượng xử lý các ý tưởng hơn là các sự kiện. Ví dụ: khi bạn xem xét trường hợp của e-mail, các chi tiết phức tạp như những gì xảy ra ngay khi bạn gửi e-mail, giao thức mà máy chủ e-mail của bạn sử dụng sẽ bị ẩn khỏi người dùng. Do đó, để gửi e-mail, bạn chỉ cần nhập nội dung, đề cập đến địa chỉ của người nhận và nhấp gửi.

Tương tự như vậy trong lập trình hướng đối tượng, trừu tượng hóa là một quá trình ẩn các chi tiết triển khai khỏi người dùng, chỉ có chức năng sẽ được cung cấp cho người dùng. Nói cách khác, người dùng sẽ có thông tin về những gì đối tượng làm thay vì cách nó thực hiện.

Học lập trình Java chuyên nghiệp
Học lập trình Java chuyên nghiệp

Trong Học lập trình Java, sự trừu tượng hóa đạt được bằng cách sử dụng các lớp và giao diện Trừu tượng.

Lớp trừu tượng


Một lớp có chứa từ khóa trừu tượng trong khai báo của nó được gọi là lớp trừu tượng.

Các lớp trừu tượng có thể có hoặc không chứa các phương thức trừu tượng , tức là các phương thức không có phần thân (public void get ();)

Nhưng, nếu một lớp có ít nhất một phương thức trừu tượng, thì lớp đó phải được khai báo là trừu tượng.

Nếu một lớp được khai báo là trừu tượng, nó không thể được khởi tạo.

Để sử dụng một lớp trừu tượng, bạn phải kế thừa nó từ một lớp khác, cung cấp các triển khai cho các phương thức trừu tượng trong nó.

Nếu Học lập trình Java kế thừa một lớp trừu tượng, bạn phải cung cấp các triển khai cho tất cả các phương thức trừu tượng trong nó.

Phần này cung cấp cho bạn một ví dụ về lớp trừu tượng. Để tạo một lớp trừu tượng, chỉ cần sử dụng từ khóa trừu tượng trước từ khóa lớp, trong khai báo lớp.
/* File name : Employee.java */
public abstract class Employee {
   private String name;
   private String address;
   private int number;

   public Employee(String name, String address, int number) {
      System.out.println("Constructing an Employee");
      this.name = name;
      this.address = address;
      this.number = number;
   }
   
   public double computePay() {
     System.out.println("Inside Employee computePay");
     return 0.0;
   }
   
   public void mailCheck() {
      System.out.println("Mailing a check to " + this.name + " " + this.address);
   }

   public String toString() {
      return name + " " + address + " " + number;
   }

   public String getName() {
      return name;
   }
 
   public String getAddress() {
      return address;
   }
   
   public void setAddress(String newAddress) {
      address = newAddress;
   }
 
   public int getNumber() {
      return number;
   }
}
Bạn có thể quan sát rằng ngoại trừ các phương thức trừu tượng, lớp Nhân viên giống như lớp bình thường trong Học lập trình Java. Lớp này bây giờ trừu tượng, nhưng nó vẫn có ba trường, bảy phương thức và một hàm tạo

Bây giờ bạn có thể thử khởi tạo lớp Nhân viên theo cách sau
/* File name : AbstractDemo.java */
public class AbstractDemo {

   public static void main(String [] args) {
      /* Following is not allowed and would raise error */
      Employee e = new Employee("George W.", "Houston, TX", 43);
      System.out.println("\n Call mailCheck using Employee reference--");
      e.mailCheck();
   }
}
Khi bạn biên dịch lớp trên, nó sẽ báo lỗi sau

Employee.java:46: Employee is abstract; cannot be instantiated
      Employee e = new Employee("George W.", "Houston, TX", 43);
                   ^
1 error

Kế thừa lớp trừu tượng

Chúng ta có thể kế thừa các thuộc tính của lớp Nhân viên giống như lớp cụ thể theo cách sau
/* File name : Salary.java */
public class Salary extends Employee {
   private double salary;   // Annual salary
   
   public Salary(String name, String address, int number, double salary) {
      super(name, address, number);
      setSalary(salary);
   }
   
   public void mailCheck() {
      System.out.println("Within mailCheck of Salary class ");
      System.out.println("Mailing check to " + getName() + " with salary " + salary);
   }
 
   public double getSalary() {
      return salary;
   }
   
   public void setSalary(double newSalary) {
      if(newSalary >= 0.0) {
         salary = newSalary;
      }
   }
   
   public double computePay() {
      System.out.println("Computing salary pay for " + getName());
      return salary/52;
   }
}
Tại đây, bạn không thể khởi tạo lớp Nhân viên, nhưng bạn có thể khởi tạo Lớp lương và sử dụng trường hợp này, bạn có thể truy cập tất cả ba trường và bảy phương thức của lớp Nhân viên như dưới đây.
/* File name : AbstractDemo.java */
public class AbstractDemo {

   public static void main(String [] args) {
      Salary s = new Salary("Mohd Mohtashim", "Ambehta, UP", 3, 3600.00);
      Employee e = new Salary("John Adams", "Boston, MA", 2, 2400.00);
      System.out.println("Call mailCheck using Salary reference --");
      s.mailCheck();
      System.out.println("\n Call mailCheck using Employee reference--");
      e.mailCheck();
   }
}

Điều này tạo ra kết quả sau

Constructing an Employee
Constructing an Employee
Call mailCheck using Salary reference --
Within mailCheck of Salary class 
Mailing check to Mohd Mohtashim with salary 3600.0

 Call mailCheck using Employee reference--
Within mailCheck of Salary class 
Mailing check to John Adams with salary 2400.0

Phương pháp trừu tượng

Nếu bạn muốn một lớp chứa một phương thức cụ thể nhưng bạn muốn triển khai thực tế của phương thức đó được xác định bởi các lớp con, bạn có thể khai báo phương thức trong lớp cha là một bản tóm tắt.

từ khóa trừu tượng được sử dụng để khai báo phương thức là trừu tượng.

Học lập trình Java phải đặt từ khóa trừu tượng trước tên phương thức trong khai báo phương thức.

Một phương thức trừu tượng chứa một chữ ký phương thức, nhưng không có thân phương thức.

Thay vì dấu ngoặc nhọn, một phương thức trừu tượng sẽ có dấu hai chấm (;) ở cuối.

Sau đây là một ví dụ về phương pháp trừu tượng.
public abstract class Employee {
   private String name;
   private String address;
   private int number;
   
   public abstract double computePay();
   // Remainder of class definition
}
Tuyên bố một phương pháp là trừu tượng có hai hậu quả

Lớp chứa nó phải được khai báo là trừu tượng.

Bất kỳ lớp nào kế thừa lớp hiện tại phải ghi đè phương thức trừu tượng hoặc khai báo chính nó là trừu tượng.

Lưu ý - Cuối cùng, một lớp con cháu phải thực hiện phương thức trừu tượng; nếu không, bạn sẽ có một hệ thống phân cấp các lớp trừu tượng không thể khởi tạo được.

Giả sử lớp Lương kế thừa lớp Nhân viên, sau đó nó sẽ thực hiện phương thức computePay () như dưới đây
/* File name : Salary.java */
public class Salary extends Employee {
   private double salary;   // Annual salary
  
   public double computePay() {
      System.out.println("Computing salary pay for " + getName());
      return salary/52;
   }
   // Remainder of class definition
}

Không có nhận xét nào:

Đăng nhận xét

Lập trình Java - Ngoại lệ

Một ngoại lệ (hoặc sự kiện đặc biệt) là một vấn đề phát sinh trong quá trình thực hiện chương trình. Khi xảy ra Ngoại lệ , luồng bình thường...