24/05/2018, 18:30

Phương pháp hướng đối tượng

Lập trình hướng thủ tục. Các ngôn ngữ : COBOL, FORTRAN, PASCAL, C... Phân rã thành các hàm (thủ tục) chức năng Top-down, chia để trị Sơ đồ cấu trúc - structure chart Chương trình ...

Lập trình hướng thủ tục.

Các ngôn ngữ : COBOL, FORTRAN, PASCAL, C...

Phân rã thành các hàm (thủ tục) chức năng

Top-down, chia để trị

Sơ đồ cấu trúc - structure chart

Chương trình chính

CTC 3CTC 1

CTC 2

CTC 8CTC 7CTC 6CTC 5CTC 4

Chương trình là danh sách các câu lệnh,

Chia thành CTC - các hàm, thủ tục

Dữ liệu : Toàn cục - global : dùng chung

Cục bộ (theo từng mức) - local : của riêng từng hàm, thủ tục

Sơ đồ dữ liệu - hàm

Nhược điểm :

- Khó kiểm soát vì nhiều hàm có thẻ truy cập.

- Thay đổi cấu trúc dữ liệu --> thay đổi các hàm xử lí

- Chưa sát với hệ thống thực : chỉ tập trung vào hoạt động, vào chức năng.

Các đặc điểm chính.

- Hướng công việc (thuật toán)

- Topdown - Chia để trị

- Dữ liệu chuyển dần qua các hàm để xử lí

- Nhiều hàm tham gia xử lí dữ liệu chung.

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

Khái quát hoá các thực thể vật lí hoặc trừu tượng

Gắn bó chặt chẽ dữ liệu + hàm chức năng -> "đối tượng"

Bảo vệ dữ liệu nội tại, che giấu đối với bên ngoài.

Giao tiếp, trao đổi với nhau qua cơ chế truyền thông báo.

Sơ đồ các đối tượng và truyền thông báo.

Dữ liệu_____Hàm

Dữ liệu_____Hàm

Các đăc điểm

- Hướng dữ liệu thay cho hàm chức năng

- Cấu trúc dữ liệu + hàm chưc năng thành một thể thống nhất.

- Bảo vệ dữ liệu, che giấu đối với bên ngoài

- Trao đổi nhau qua truyền thông báo.

- Tiếp cận từ dưới lên - bottom up.

Lớp - Class

Đối tượng - Object

Trừu tượng hoá dữ liệu và bao gói thông tin - Data Abstraction and Encapsulation

Kế thừa : - Heritage

Tương ứng bội - polymorphism

Liên kết động - Dynamic binding

Truyền thông báo - message exchange

Lớp - Class

Lớp - class : khuôn mẫu của một lớp đối tượng

Cấu trúc dữ liệu thành phần :

Các biến

Các lớp khác

Hàm chức năng : hàm thành phần - member function,

Phương thức - method.

Constructor - cấu tử - hàm khởi tạo một đối tượng thuộc lớp, tạo ra một thể hiện cụ thể (instance) của lớp.

Tên của Constructor phải trùng tên lớp.

Public <tên lớp> ( ... ) {

// thân hàm - các lệnh thực hiện

}

Ví dụ.

class Man {

//Phan du lieu

protected

String ten;

int namsinh;

//Constructor, Destructor

public Man( String name, int birthyear){

ten = name;

namsinh = birthyear;

}

//Cac ham thanh phan

public int tuoi(){

Calendar now = Calendar.getInstance();

return (now.get(Calendar.YEAR) - namsinh);

}

public void hienthi(){

System.out.println("Ho va ten :"+ten);

System.out.println("Tuoi :"+ tuoi());

}

}

Đối tượng - Object

Đối tượng - Object : một thể hiện (instance) của Class.

Man ng1 = new Man("Nguyen Van A",1970);

Man ng2 = new Man("Pham Ngoc H",1980);

Trừu tượng hoá dữ liệu và bao gói thông tin

Trừu tượng hoá dữ liệu - Data Abstraction

- dữ liệu = các thông tin về đối tượng, phản ánh những nét đặc trưng nhất của đối tượng.

- Các hàm thành phần gắn với đối tượng, xử lí dữ liệu tự động : từ biến thành thông tin cần thiết cho NSD.

Ví dụ : hàm tính tuổi, từ năm sinh suy ra tuổi.

public int tuoi(){

Calendar now = Calendar.getInstance();

return (now.get(Calendar.YEAR) - namsinh);

}

Bao gói thông tin - Encapsulation

Public : mọi người đều có thể dùng :

Protected : các hàm thành phần của đối tượng và của các lớp con, cháu dẫn xuất từ lớp này

Private : chỉ các hàm thành phần mới được phép thâm nhập, không cho phép ngay cả các hàm của các lớp con cháu thâm nhập.

Các dữ liệu : thường là Protected - Private

Các hàm thành phần = giao diện với bên ngoài : thường là Public

Truyền thông báo - message exchange

Cơ chế giao tiếp, phối hợp giữa các đôi tượng để thực hiện các chức năng của chương trình.

Dữ liệu đã được baỏ vệ, bao gói kín --> để thực hiện các phép xử lí dữ liệu phải thông qua đối tượng.

Gửi đến đối tượng một yêu cầu làm việc gì đó.

Ví dụ đối tượng chính của chương trình ManApp :

- tạo ra đối tượng ng1

- yêu cầu ng1 hiển thị các thông tin về mình.

class ManApp{

public static void main (String[] arguments) {

Man ng1 = new Man("Pham Ngoc H",1980);

ng1.hienthi();

}

}

Chương trình java hoàn chỉnh.

import java.lang.System;

import java.util.*;

class ManApp{

public static void main (String[] arguments) {

Man ng1 = new Man("Pham Ngoc H",1980);

ng1.hienthi();

}

}

class Man {

//Phan du lieu

protected

String ten;

int namsinh;

//Constructor, Destructor

public Man( String name, int birthyear){

ten = name;

namsinh = birthyear;

}

//Cac ham thanh phan

public int tuoi(){

Calendar now = Calendar.getInstance();

return (now.get(Calendar.YEAR) - namsinh);

}

public void hienthi(){

System.out.println("Ho va ten :"+ten);

System.out.println("Tuoi :"+ tuoi());

}

}

Man --> Employee : nhiều dữ liệu hơn

nhiều hàm chức năng hơn.

Thực hiện việc tăng lương cho một nhân viên.

Gưỉ một thông báo đến đối tượng nhân viên là e1,

nội dung thông báo là định lại mức lương

dữ liệu kèm theo thông báo là mức lương mới 650.00.

Kế thừa - Heritage

Kế thừa : Con, cháu có được cấu trúc dữ liệu, các hàm thành phần giống như lớp cha mẹ.

- có thể phát triển : bổ xung thêm dữ liệu, hàm thành phần

- có thể thay đổi, cải tiến hành vi chức năng cũ.

Vi dụ : Lớp Employee dẫn xuất từ lớp Man

bổ xung thêm : phòng ban, lương.

bổ xung thêm : setsalary(), getsalary()

Hàm chức năng hiển thi() cải tiến để hiển thị đầy đủ thông tin về đơn vị làm việc và lương .

import java.lang.System;

import java.util.*;

import Man;

class EmployeeApp{

public static void main (String[] arguments) {

Employee e1 = new Employee("Pham Ngoc H",1980,"Tai vu",500.00f);

e1.hienthi();

e1.setsalary(650.00f);

System.out.println(" Sau khi tang luong :");

e1.hienthi();

}

}

class Employee extends Man {

//Phan du lieu

protected

String departement;

float salary;

//Constructor, Destructor

public Employee( String name, int birthyear, String dept, float sal){

super(name,birthyear);

departement = dept;

salary = sal;

}

//Cac ham thanh phan

public void setsalary ( float sal) {

salary = sal;

}

public float getsalary () {

return salary;

}

public void hienthi(){

System.out.println("Ho va ten :"+ten);

System.out.println("Tuoi :"+ tuoi());

System.out.println("Phong ban :"+ departement);

System.out.println("Luong :"+ salary);

}

}

Tương ứng bội - polymorphism

Cùng một tên hàm, một toán tử ... có nội dung khác nhau

tuỳ theo hoàn cảnh : tham đối, các đối tượng tham gia phép toán.

Ví dụ :

- dấu cộng có thể là cộng hai số, nối hai String...

- hiển thị() khác nhau tuỳ theo đối tượng thực hiện.

- Trường hợp điển hình :một lớp thường có nhiều Constructor khác nhau về số tham đối, thực hiện khởi trị cho các dữ liệu thành phần của đối tượng tuỳ theo lượng tin được cung cấp.

Liên kết động - Dynamic binding

Gắn liền với tương ứng bội.

Cùng một tên hàm, phương thức, có thể tương ứng với nhiều nội dung khác nhau.

Cần có cơ chế cho phép nối lời gọi hàm, phương thức đến nội dung tương ứng một cách phù hợp trong thời gian thực hiện chương trình.

Chỉ đến lúc chương trình đang chạy việc liên kết này mới được thực hiện.

- Phản ánh sát thế giới thực tại, tương ứng 1-1 đối tượng của bài toán với đối tượng trong phần mềm

- Chương trình được xây dựng từ các đơn thể = đối tượng, từ đơn giản đến phức tạp, có thể xây dựng thành quy trình công nghệ.

- Các đối tượng dễ dàng sử dụng lại, phát triển thêm thông qua kế thừa.

- Bảo vệ, che giấu thông tin nên tránh lỗi, xây dựng chương trình an toàn hơn.

- Cách tiếp cận hướng đối tượng đặt trọng tâm vào dữ liệu, do đó dễ triển khai, cài đặt hơn

- Các mối quan hệ, các giao diện với bên ngoài phản ánh rõ ràng qua cơ chế truyền thông báo.

0