1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Lập trình hướng đối tượng (dùng Java) Chương 3 Trần Minh Thái (2017 P1)

91 915 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 91
Dung lượng 715,67 KB

Nội dung

Bài giảng Lập trình hướng đối tượng (dùng Java) Chương 3 Lập trình Hướng đối tượng với Java (P1) cung cấp cho người học các kiến thức Khai báo lớp và đối tượng trong Java, phương thức khởi tạo; các phạm vi trong Java, cách sử dụng. Mời các bạn cùng tham khảo.

Trang 2

Nội dung

1. Khai báo lớp và đối tượng trong Java

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

3. Các phạm vi trong Java, cách sử dụng

Trang 3

Các khái niệm về hướng đối tượng

Trang 4

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

• Mô hình hóa các đối tượng trong thế giới thực thành đối tượng phần mềm

Chương trình = Đối tượng + Thông điệp

• Một đối tượng gồm có

Thuộc tính: các đặc điểm, trạng thái của đối tượng

Hành vi: các hành vi/ chức năng của đối tượng

Trang 5

Lớp đối tượng là gì?

Lớp đối tượng (class): định nghĩa danh sách các thuộc tính (dữ liệu) và các phương thức chung

của một nhóm đối tượng nào đó

• Lớp là khái niệm trung tâm của OOP, là sự mở rộng của khái niệm cấu trúc (struct)

Lớp = thuộc tính + phương thức

Trang 7

Đối tượng là gì?

• Đối tượng (Object): là một thể hiện cụ thể của lớp, các thuộc tính có giá trị xác định

• Đối tượng được xem như là một biến có kiểu dữ liệu là lớp

Trang 8

Lớp đối tượng vs Đối tượng?

Thể hiện

Trang 9

Các nguyên lý cơ bản của hướng đối tượng

Trang 10

Nguyên lý cơ bản của OOP

Trang 11

Trừu tượng hoá

• Loại bỏ đi các thông tin cụ thể, giữ lại các thông tin chung

• Tập trung vào các đặc điểm chính của thực thể, làm cho nó khác biệt với những thực thể khác

• Phụ thuộc vào góc nhìn

Trang 12

Trừu tượng hoá

Khái quát hóa

Khái quát hóa

1 5 7 -3 8

Số nguyên ( int )

Người ( PERSON )

<Code, Name, date_of_birth, Address, e-mail >

Danh từ chung trong ngôn ngữ tự nhiên

attributes

int, NGUOI, PERSON

là các ADT

Trang 13

Đóng gói – Module hoá

• Chia nhỏ hệ thống phức tạp thành các đối tượng nhỏ hơn

• Đóng gói: Che giấu, ẩn chi tiết thực hiện bên trong

• Hành vi riêng/ nội (private, internal):hành vi xử lý dữ liệu bên trong của đối tượng

• Cung cấp cho các đối tượng khác (client) một hành vi giao tiếp (public/ interface methods)

• Tính trong suốt: Thay đổi việc thực thi bên trong không làm ảnh hưởng tới các đối tượng khác

Trang 15

Cách xây dựng lớp đối tượng

Trang 16

Xây dựng lớp đối tượng

• Lớp đóng gói các thành viên và chỉ định điều khiển truy cập tới các thành viên:

• Thuộc tính

• Phương thức

• Tập hợp các lớp được nhóm lại thành gói (package) Mỗi lớp trong gói cũng được chỉ định điều khiển truy cập

Trang 17

Xây dựng lớp đối tượng

Các từ khóa chỉ định điều khiển truy cập trong Java:

public: có thể truy cập từ mọi nơi

protected: có thể truy cập từ trong gói hoặc từ các lớp con

private: chỉ có thể truy cập từ chính lớp đó

• Không chỉ định: có thể truy cập từ trong gói

Trang 18

Các bước xây dựng lớp đối tượng

Bước 1: Mô hình hóa lớp đối tượng

Phát hiện các thuộc tính và hành vi

Bước 2: Mô tả phần tiêu đề của lớp

Bước 3: Định nghĩa thuộc tính

Bước 4: Định nghĩa phương thức getter, setter

Bước 5: Định nghĩa phương thức constructor

Bước 6: Định nghĩa phương thức

Trang 19

Bước 1: Mô hình hoá lớp đối tượng

• Ta cần biết/ quan tâm những thông tin gì về một đối tượng thuộc lớp này  thuộc tính

• Ta thực sự cần xử lý (tác động) gì từ bên ngoài lên đối tượng  hành vi giao tiếp

• Để có được hành vi giao tiếp, có cần thêm những xử lý mà bên ngoài không cần biết?  hành

vi nội

Trang 20

Bước 1: Mô hình hoá lớp trừu tượng

Một lớp cần có:

• Tên lớp

Danh sách các thuộc tính (fields)

• Phương thức getter, setter

• Phương thức constructor

• Các phương thức: khởi tạo, cập nhật, kiểm tra ràng buộc, xử lý tính toán, cung cấp thông tin

Trang 21

Xác định thành phần thuộc tính (field)

Trang 22

Xác định thuộc tính

• Đối với mỗi đối tượng, xác định các thông tin cần lưu trữ Sau đó lập bảng mô tả thuộc tính như sau:

• Nếu có ràng buộc liên thuộc tính thì lập thêm bảng sau:

Trang 23

Xác định thuộc tính

Ràng buộc là các quy định, quy tắc áp đặt trên các giá trị thuộc tính của đối tượng trong lớp, sao cho đối tượng này thể hiện đúng với thực tế

• Ràng buộc tĩnh: ràng buộc trên giá trị thuộc tính

• Ràng buộc động: ràng buộc trên biến đổi giá trị thuộc tính

Ví dụ:

• “Lương của nhân viên ít nhất là 1.500.000 đồng”  Tĩnh

• “Lương của nhân viên chỉ có thể tăng”  Động

Trang 25

Ví dụ 2 xét lớp MyDate

Trang 26

1 Nếu month là 4, 6, 9, 11 thì day tối đa là 30 day, month

2

Nếu month là 2 và year nhuận thì day tối đa là 29

Nếu month là 2 và year không nhuận thì day

Ví dụ 2 xét lớp MyDate (tt)

Trang 27

Khai báo lớp (class)

Trang 28

Bước 2: Mô tả phần tiêu đề lớp

Cú pháp

pack.name: tên gói

/**Javadoc*/: chú thích để tạo tài liệu Javadoc (không bắt buộc)

Modifier: chỉ định truy cập (chỉ có thể là public hoặc không chỉ định)

ClassName: tên lớp, theo quy tắc định danh của Java

package pack.name;

Modifier class ClassName {

Khai báo thuộc tính;

Khai báo và định nghĩa phương thức }

Trang 29

Datatype: kiểu dữ liệu, có thể là một lớp lồng (nested class)

attributeName: tên thuộc tính, theo quy tắc định danh

/**Javadoc*/

Modifier DataType attributeName;

Trang 30

Bước 3: Định nghĩa thuộc tính

• Khai báo thành viên hằng

public final int MAX_STUDENT = 100;

Modifier final DataType CONST_NAME = value;

Trang 31

Bảo vệ dữ liệu của đối tượng

• Thuộc tính của lớp thường được đặt chỉ định truy cập là private

class CIRLCE

int x, y, r; int BorderColor; int BkColor;

public int getX() public void setX(int xx)

public int getY() public void setY(int yy) public int getR() public void setR(int r)

public double getPerimeter() public double getArea()

Trang 32

Định nghĩa phương thức getter và setter

Trang 33

Bảo vệ dữ liệu của đối tượng

Truy cập vào thuộc tính của đối tượng thông qua

Phương thức setter (cập nhật giá trị của thuộc tính): che giấu và kiểm soát giá trị truyền cho thuộc tính

và Phương thức getter (lấy giá trị của thuộc tính)

Trang 34

Phương thức getter và setter

private int intAttr;

!!!Từ khóa this cho phép tự tham chiếu đến chính đối tượng đó

Có thể bổ sung lệnh kiểm tra giá trị truyền vào

Trang 35

Ví dụ

Trang 36

Ví dụ (tt)

Trang 37

Định nghĩa phương thức constructor

Trang 38

Bước 4: Định nghĩa Constructor

Khi một đối tượng tạo ra, constructor được tự động gọi:

• Gán giá trị ban đầu cho các thuộc tính

• Có thể thực hiện một số thao tác xử lý

• Một lớp có thể có nhiều constructor

Trang 39

Bước 4: Định nghĩa Constructor

Đặc điểm

• Không có giá trị trả về

• Tên phương thức trùng với tên lớp

• Có thể có hoặc không có tham số

• Sử dụng phải có từ khóa new

Trang 41

Các loại Constructor

Có ba loại

Default: public ClassName ()

Parameter: public ClassName (danh sách tham số)

Copy: public ClassName (ClassName object)

Trang 43

Parameter constructor

• Tạo ra 01 đối tượng mới có thông tin thuộc tính mang các giá trị của tham số tương ứng được truyền vào

Trang 44

Copy Constructor

Tạo ra 01 đối tượng mới có thông tin thuộc tính giống với 01 đối tượng đã có

Có 01 tham số là một đối tượng của cùng lớp

Trang 45

Copy Constructor

Toán tử gán (=) vs Copy Constructor

• Toán tử gán không tạo ra đối tượng mới: chỉ thực hiện phép gán giữa 2 đối tượng đã tồn tại

• Copy Constructor để tạo một đối tượng mới và gán nội dung của một đối tượng đã tồn tại cho đối tượng mới vừa tạo

Trang 47

Ví dụ

Trang 49

Định nghĩa phương thức

Trang 50

1 Nhóm kiểm tra ràng buộc: Kiểm tra tính hợp lệ giá trị thuộc tính của đối tượng

2 Nhóm khởi tạo: Cung cấp giá trị ban đầu cho đối tượng

3 Nhóm cập nhật: Thay đổi giá trị thuộc tính của đối tượng

4 Nhóm xử lý tính toán: Xử lý tính toán các yêu cầu từ thông tin của đối tượng

5 Nhóm cung cấp thông tin: Cung cấp thuộc tính nội bộ của đối tượng

Bước 5: Định nghĩa phương thức

Trang 51

2 Khởi tạo

3 Cập nhật

4 Xử lý, tính toán

5 Cung cấp thông tin

1 Kiểm tra ràng buộc

Bước 5: Định nghĩa phương thức

Trang 52

Datatype: kiểu dữ liệu trả về của phương thức

methodName: tên phương thức

parameterList: danh sách các tham số, bao gồm kiểu dữ liệu và tên của tham số

/**Javadoc*/

Modifier DataType methodName(parameterList) {

Định nghĩa phương thức }

Trang 53

Giá trị trả về

• true: Thoả ràng buộc

• false: Không thoả ràng buộc

Tham số

Ràng buộc miền giá trị: Chỉ có 1 tham số ứng với tham số cần kiểm tra

Ràng buộc liên thuộc tính: Có tham số là các thuộc tính liên quan

public boolean kiemTra ( tham số )

Kiểm tra ràng buộc

Trang 55

public boolean tenPhuongThuc ( Tham số )

{

//Trả về true: thực hiện được

//Trả về false: không thực hiện được

Trang 56

hoặc

public boolean Tên hàm ( Tham số )

{

//Trả về true: thực hiện được

//false: không thực hiện được

if(Tham số không thoả ràng buộc)

return false;

gán giá trị tương ứng cho thuộc tính của lớp

return true;

}

Trang 57

Bài tập

Giả sử cần xử lý dãy các số nguyên (lớp MyArray)

• Xác định thuộc tính

• Liệt kê các constructor

• Liệt kê các phương thức

Trang 58

Thành viên lớp

• Thành viên lớp: các thành viên có thể được truy cập mà không cần thông qua một đối tượng

Dùng từ khóa static

Modifier static DataType attributeName;

Modifier static DataType methodName(parameterList) { Định nghĩa phương thức

}

Modifier static final DataType CONST_NAME = value;

Trang 59

Thành viên lớp vs Thành viên đối tượng

Có thể truy cập thông qua tên lớp hoặc qua đối

tượng

Chỉ được truy cập thông qua một đối tượng

Thuộc tính của các đối tượng có giá trị giống nhau Thuộc tính của các đối tượng có giá trị khác nhau

Thay đổi giá trị thuộc tính của đối tượng này ảnh

hưởng tới tất cả các đối tượng khác cùng lớp

Thay đổi giá trị thuộc tính của một đối tượng này là

độc lập với các đối tượng khác cùng lớp

!!! Một phương thức static chỉ có thể truy cập vào các thuộc tính static và chỉ có thể gọi các phương thức static của cùng lớp

Trang 60

Ví dụ 1

Trang 61

Ví dụ 2

Trang 62

Ví dụ 2 (tt)

Trang 63

Tạo đối tượng

Trang 64

Sử dụng lớp đối tượng

• Cú pháp

ClassName objectName = new ClassName();

ClassName: Tên lớp mà đối tượng tạo ra từ lớp đó

objectName: Tên đối tượng

ClassName(): Phương thức khởi tạo

Trang 65

Sử dụng lớp đối tượng

• Truy cập tới các thành viên của đối tượng qua toán tử ‘.’

• Lưu ý tới chỉ định điều khiển truy cập

• Các đối tượng được khai báo mà không khởi tạo sẽ mang giá trị null

Trang 66

Sử dụng lớp đối tượng

Trang 67

Ví dụ

Cho bài toán đăng ký học phần Hãy thiết kế lớp đối tượng theo yêu cầu sau:

• Đối tượng “học phần” (HocPhan) có các thông tin: Mã môn, tên môn, số lượng đăng ký tối đa và số lượng đăng ký hiện tại

• Các chức năng: Cho phép người dùng đăng ký một SV vào lớp, hủy đăng ký một SV và hiển thị thông tin môn học, sao cho:

• Không thể đăng ký nữa nếu số đăng ký đã bằng định mức

• Không thể hủy đăng ký nếu không có sinh viên

Trang 68

Lớp HocPhan

• Thuộc tính

maHocPhan: Mã học phần, chuỗi ký tự

tenHocPhan: Tên học phần, chuỗi ký tự

soLuongMax: Số lượng tối đa, số nguyên

soLuongHienTai: Số lượng đăng ký hiện tại, số nguyên

Trang 69

Lớp HocPhan

• Phương thức

dangKy(): Đăng ký thêm một sinh viên

huyDangKy(): Huỷ đăng ký

hienThi(): Hiển thị thông tin học phần

HocPhan(): Phương thức khởi tạo

Phương thức getter, setter

Trang 70

Định nghĩa thuộc tính lớp HocPhan

Trang 71

Định nghĩa phương thức khởi tạo

Trang 72

Định nghĩa phương thức đăng ký học phần

Trang 73

Định nghĩa phương thức huỷ đăng ký

Trang 74

Định nghĩa phương thức hiển thị thông tin học phần

Trang 75

Sử dụng lớp HocPhan

Trang 76

Bài tập

Viết thêm các phương thức setter và getter cho lớp HocPhan

• Bổ sung kiểm tra ràng buộc cho số lượng tối đa phải [20 100]

• Viết lại chương trình cho phép thực hiện những yêu cầu sau:

• Thông tin của học phần được nhập từ bàn phím

• Cho phép đăng ký thêm một sinh viên Mỗi lần đăng ký xong, hỏi lại người dùng có tiếp tục không Hiển thị thông tin môn học nếu người dùng không muốn tiếp tục

• Cho phép hủy đăng ký một sinh viên Mỗi lần hủy đăng ký xong, hỏi lại người dùng có tiếp tục không Hiển thị thông tin môn học nếu người dùng không muốn tiếp tục

Trang 77

Vấn đề gán và so sánh đối tượng

Trang 80

public class SoSanhDoiTuong {

private int value;

Trang 81

public class SoSanhDoiTuongTest {

public static void main(String []args) {

SoSanhDoiTuong t1 = new SoSanhDoiTuong( 10 );

SoSanhDoiTuong t2 = new SoSanhDoiTuong( 10 );

System.out.println(" Gia tri t1 = " + t1.getValue()); System.out.println(" Gia tri t2 = " + t2.getValue());

System.out.println("* So sanh hai doi tuong:");

Trang 82

public class SoSanhDoiTuongTest {

public static void main(String []args) {

SoSanhDoiTuong t1 = new SoSanhDoiTuong( 10 );

SoSanhDoiTuong t2 = new SoSanhDoiTuong();

Trang 83

So sánh 2 đối tượng

Phương thức equals(Object)

• Trả về true nếu mọi thành viên của 2 đối tượng có giá trị bằng nhau

• Trả về false nếu ngược lại

!!!Chỉ áp dụng trên các lớp của Java

thức để viết lại

Trang 84

public class SoSanhDoiTuongTest {

public static void main(String []args) {

SoSanhDoiTuong t1 = new SoSanhDoiTuong( 10 );

SoSanhDoiTuong t2 = new SoSanhDoiTuong( 10 );

System.out.println(" Gia tri t2 = " + t2.getValue());

System.out.println("* So sanh hai doi tuong:");

Trang 85

public class SoSanhDoiTuong {

private int value;

public void setValue(int value) {

this.value = value;

}

SoSanhDoiTuong dt2 = (SoSanhDoiTuong) obj;

if (this.value == dt2.value) return true; else return false;

}

}

Trang 86

public class SoSanhDoiTuongTest {

public static void main(String []args) {

SoSanhDoiTuong t1 = new SoSanhDoiTuong( 10 );

SoSanhDoiTuong t2 = new SoSanhDoiTuong( 10 );

System.out.println(" Gia tri t2 = " + t2.getValue());

System.out.println("* So sanh hai doi tuong:");

Trang 87

Mảng đối tượng

Trang 88

• ClassName : Tên lớp mà đối tượng tạo ra từ lớp đó

• arrayName : Tên mảng đối tượng

• size : Kích thước

• Các phần tử sẽ mang giá trị null

Trang 90

Bài tập

Bổ sung vào chương trình đăng ký học phần một lớp quản lý học phần (QuanLyHocPhan) bao gồm

các chức năng:

• Tạo danh sách các học phần được mở gồm các thông tin được người dùng nhập từ bàn phím

• Cho phép đăng ký thêm một sinh viên cho một học phần trong danh sách học phần có sẵn Mỗi lần đăng ký xong, hỏi lại người dùng có tiếp tục không

• Cho phép hủy đăng ký một sinh viên của một học phần nào đó Mỗi lần hủy đăng ký xong, hỏi lại người dùng có tiếp tục không

• Hiển thị thông tin học phần nếu người dùng không muốn tiếp tục

Trang 91

Q&A

Ngày đăng: 15/05/2017, 10:28

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w