Tải bản đầy đủ (.pdf) (3 trang)

Tài liệu Class, Object Và Vấn Đề Đa Xạ Trong Java ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (68.04 KB, 3 trang )

Class, Object Và Vấn Đề
Đa Xạ Trong Java

Java là một ngôn ngữ thuần hướng đối tượng. Nó mang đầy đủ các đặc tính của một ngôn
ngữ hướng đối tượng như:
• Encapsulation – đóng gói: Hides the implementation details of an object and therefore hides
its complexity.
• Abstraction – trừu tượng hóa: we just focuses on the essential features of an object.
• Inheritance – kế thừa: creates a hierarchy of clauses and helps in reuse of attibutes and
methods of class.
• Polysmorphism – đa xạ: performs different reactions in objects in response to the some
method

Các bổ tử của một method:
public: cỏ thể truy cập từ bên ngoài class
protected: chỉ được truy cập từ class đó và các class kế thừa từ class đó
private: chỉ được truy cập trong class định nghĩa
static: phương thức chung cho mọi mẫu của class
abstract: không cài đặt gì trong class, việc cài đặt được giao cho các class đế thừa của class
đó
final: không cho phép overloading ở các class dẫn xuất
native: một cài đặt phụ thuộc một ngôn ngữ khác, như C hay hợp ngữ
synchronized: dùng để chỉ một phương thức tới hạn ngăn các tác động của các object khác
lên object trong khi việc đồng bộ hóa đang thực hiện.

Các bổ tử của một class:
public: lớp có thể truy cập từ các lớp khác trong package
final: lớp không cho phép tạo dẫn xuất
abstract: lớp trừu tượng

Lớp trừu tượng (abstract):


class không cụ thể, chứa những method nhưng không có dòng lệnh thi hành phương thức đó,
việc thi hành method được giao lại cho các lớp kế thừa lớp đó
Ví dụ: thức ăn là một class trừu tượng cho các class cụ thể như cơm, cháo.
Class thức ăn có phương thức mùi vị nhưng khi nói mùi vị của thức ăn chung chung ta
không định nghĩa được, nhưng class cơm kế thừa từ class thức ăn thì có mùi vị là khô, class cháo có
mùi vị là có mùi vị là lỏng














abstract class thucAn{
abstract void muiVi();
}
class com extends thucAn{
abstract void muiVi(){
//kho
}
}
class chao extends thucAn{
abstract void muiVi(){

//long
}
}
Một lần nữa chúng ta khẳng định abstract là một class không thể biết và định nghĩa các
phương thức nhưng không có sự thi hành cụ thể, việc thi hành các phương thức này được giao lại
cho các class kế thừa. Đây là tư tưởng chính cho vấn đề đa hình, đa xạ trong Java sẽ được đề cập ở
phần sau.

Giao diện (interface):

Interface là một khái niệm mới trong các ngôn ngữ lập trình hiện đại như C++, C#. Interface
là giao diện của một lớp đối tượng.
Interface của một class là phần đặc tả các method của class đó nhưng không bao gồm phần
cài đặt, việc cài đặt các method này được giao lại cho các class kế thừa từ các interface này.
Một class kế thừa một interface nào thì bắt buộc phải cài đặt tất cả các method của interface
đó.
Một đối tượng có thể đưa ra nhiều interface của mình, và class kế thừa interface nào phải cài
đặt đầy đủ các method của interface đó. Java không cho phép đa kế thừa (một class của Java không
thể có hơn một class cha) nhưng nhờ đặc điểm này (interface) cho phép cài đặt nhiều giao diện để
thừa hưởng thêm các vùng và method của những interface này.
Interface được khai báo như là một lớp nhưng các thuộc tính là hằng (final) và các phương
thức là abstract (có nghĩa là các phương thức đều rỗng dù không có từ khóa abstract) và trong các
lớp sử dụng interface phải cài đặt các phương thức này
Để một class kế thừa một giao diện ta dùng từ khóa implements (thay vì extends)

public interface MyInterface {
static final String s = "Interface";
public void outText();
}
//---------------------------

public class Ex1 implements MyInterface{
public void outText(){
System.out.println("Ex1 thua ke interface");
}
}
//---------------------------
public class Ex2 implements MyInterface{
public void outText(){
System.out.println("Ex2 thua ke interface");
}

}
//---------------------------

public class Interface {
public static void main(String args[]){
Ex1 e1 = new Ex1();
e1.outText();
Ex2 e2 = new Ex2();
e2.outText();
}
}

Đa xạ trong Java:

Phát biểu bài toán:
Một công ty có 2 loại nhân viện là kỹ sư và công nhân, mỗi loại nhân viên có các thuộc tính
chung như tên, lương cơ bản nhưng có phương thức tính lương khác nhau với kỹ sư hệ số lương là
2 và công nhân hệ số lương là 1. Viết chương trình tính lương nhân viên cho công ty
Mô hình hóa:

Phân tích theo hướng đối tượng ta có 2 class chính là class kỹ sư và class công nhân cùng
một class chung là class nhân viên. Hai class kỹ sư và công nhân cùng kế thừa class chung là nhân
viên. Vấn đề phát sinh là mỗi class có cùng method tính lương nhưng cách tính lại khác nhau. Một
trong các cách giải quyết là dùng đặc tính đa hình, đa xạ trong hướng đối tượng (cụ thể ở đây là
Java)


abstract class nhanVien {
protected String ten = null;
protected int lcb = 0;
abstract int tinhLuong();
}
//----------------------------
public class congNhan extends nhanVien{

public congNhan(){
this.ten = "Cong nhan B";
this.lcb = 100;
}

public int tinhLuong(){
return (this.lcb * 1);
}
}
//---------------------------
public class kySu extends nhanVien{

public kySu(){
this.ten = "Ky su A";
this.lcb = 100;

}

public int tinhLuong(){
return (this.lcb * 2);
}
}
//---------------------------
public class Main {
public static void main(String args[]){
nhanVien a;
a = new congNhan();
System.out.println(a.tinhLuong());

a = new kySu();
System.out.println(a.tinhLuong());
}
}

Chúng ta tạo một biến a kiểu nhanVien nhưng khi cần sử dụng a là công nhân hay kỹ sư
chúng ta có thể new với class tương ứng, và khi tính lương không cần quan tâm dùng method
tinhLuong() của class nào mà chỉ cần ghi a.tinhLuong().
nhanVien
kySu
congNhan

×