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

Bài giảng Lập trình Java - Chương 3: Lập trình hướng đối tượng trong Java

34 20 0

Đ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 34
Dung lượng 1,84 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bài giảng Lập trình Java - Chương 3: Lập trình hướng đối tượng trong Java, cung cấp cho người học những kiến thức như: Một số khái niệm; Thiết kế lớp (class); Thuộc tính; Phương thức; Phương thức khởi tạo; Thành viên static; Sự đóng gói; Từ khóa this; Kế thừa; Đa hình; Lớp trừu tượng; Packages & Interfaces.

Trang 1

Interfaces

Trang 2

Trang 3

Object-Oriented Programming

• Chương trình bao gồm các đối tượng

• Các đối tượng tương tác với nhau thông

qua các phương thức của chúng

Trang 4

Vấn đề bài toán (*)

• Cho một tập tin lưu tọa độ (x,y) của các thành phố,

bắt đầu là số lượng thành phố như sau:

• Viết một chương trình hiển thị tọa độ các thành phố

trên một DrawingPanel, sau đó đặt một “quả bom” với

bán kính cho trước và tô màu đỏ các thành phố trong

int cityCount = input.nextInt();

int[] xCoords = new int [cityCount];

int[] yCoords = new int [cityCount];

for (int i = 0; i < cityCount; i++) {

• Sử dụng song song 2 mảng để lưu tọa độ x

và y cho mỗi thành phố với cùng một chỉ số

Trang 5

• Dữ liệu trong bài toán này là tập hợp các

điểm (Point)  cần lưu trữ các đối tượng

Point

– Mỗi Point chứa hai tọa độ x và y

– So sánh khoảng cách giữa các điểm để xem

một điểm có nằm trong phạm vi nổ bom hay

• Lớp (class): là một kiểu dữ liệu mở rộng

được định nghĩa, bao gồm:

• Danh sách các thuộc tính (dữ liệu)

• Các phương thức mô tả hành vi của một

nhóm đối tượng nào đó

• Đố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.

• Là một biến có kiểu dữ liệu là lớp.

Trang 6

song = "Letting You"

volume = 9 battery life = 3.41 hrs

behavior:

power on/off change station/song change volume choose random song

iPod #3 state:

song = "Discipline"

volume = 24 battery life = 1.8 hrs

behavior:

power on/off change station/song change volume choose random song creates

Tính trừu tượng (Abstraction)

• abstraction: chúng ta sử dụng đối tượng

nhưng không cần biết chi tiết thiết kế bên

trong đối tượng

Trang 7

3 Thiết kế lớp (class)

• Từ bài toán (*) ở mục 1, ta thiết kế class

Point

– Định nghĩa một kiểu dữ liệu có tên là Point.

– Mỗi đối tượng Point object có hai trường

Point objects (desired)

– Point p1 = new Point(5, -2);

– Point p2 = new Point(); // origin, (0, 0)

setLocation(x, y) Thiết lập tọa độ x, y cho điểm

translate(dx, dy) Dịch chuyển tọa độ x và y theo độ dời dx, dy

distance(p) Tính khoảng cách từ điểm hiện tại đến điểm p

draw(g) Hiển thị tọa độ điểm

Field name Description

x the point's x-coordinate

y the point's y-coordinate

Trang 8

setLocation(int x, int y) translate(int dx, int dy) distance(Point p) draw(Graphics g)

setLocation(int x, int y) translate(int dx, int dy) distance(Point p) draw(Graphics g)

Point object #3

state:

x = 18, y = 42 behavior:

setLocation(int x, int y) translate(int dx, int dy) distance(Point p) draw(Graphics g)

Khai báo lớp

• Cú pháp:

• pack.name: tên gói (nếu cần thiết)

• modifier: chỉ định truy cập (public hoặc

modifier class ClassName {

Khai báo thuộc tính;

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

Trang 9

– Lưu ý: lưu code này trong tập tin Point.java.

– Khai báo trên chưa có phương thức

• 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

– Ví dụ:

public class Student {

public String name; //name double gpa; // Grade Point Average }

Trang 10

• Từ lớp khác có thể truy cập các field theo

cú pháp:

– Lấy giá trị field: variable.field

– Cập nhật giá trị field: variable.field = value;

• Ví dụ:

Point p1 = new Point();

Point p2 = new Point();

System.out.println ("the x-coord is " + p1.x);

PointMain.java (client program)

public class PointMain {

int y;

}

Trang 11

Truy cập dữ liệu đối tượng Point

public class PointMain {

public static void main(String[] args) {

// create two Point objects

Point p1 = new Point();

Trang 13

6 Phương thức khởi tạo (constructor)

• Là phương thức được gọi tự động khi một

đối tượng được tạo

• Phương thức khởi tạo được dùng để:

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

– Thực hiện một số thao tác xử lý ban đầu

Trang 14

Các loại phương thức khởi tạo

• Phương thức khởi tạo mặc định (default

constructor)

public ClassName ()

• Phương thức khởi tạo có tham số:

• Phương thức khởi tạo sao chép:

public ClassName (ClassName object)

Phương thức khởi tạo mặc định

• Là phương thức khởi tạo không có tham

số

• Mỗi lớp có duy nhất một default

constructor

Trang 15

Phương thức khởi tạo có tham số

• Được sử dụng để tạo ra một đối tượng

mới với giá trị các thuộc tính được truyền

Trang 16

Phương thức khởi tạo sao chép

• Là phương thức được sử dụng để tạo một

đối tượng mới từ một đối tượng đã tồn tại

• Phương thức này có một tham số là một

Trang 17

7 Thành viên static

• Là các biến, phương thức được khai báo sau

từ khóa static

• Các thành viên này có thể được truy cập mà

không cần thông qua một đối tượng

• Các phương thức static chỉ truy cập được

các thành viên static trong lớp

• Cú pháp khai báo:

Trang 18

8 Đóng gói (Encapsulation)

• Encapsulation: che dấu chi tiết cài đặt bên

trong  bảo vệ tính toàn vẹn dữ liệu của

đối tượng

Thuộc tính private

• Để che dấu một thuộc tính không cho truy

cập từ bên ngoài lớp, ta cần khai báo biến

sau từ khóa private theo cú pháp:

private type name;

private <type> <name> = <value>;

• Ví dụ:

private int id;

private String name;

Trang 19

Truy cập thuộc tính private

• Cần cung cấp phương thức cho phép truy cập

đến các thuộc tính private.

• Ví dụ:

– Chỉ cho phép lấy giá trị của x

public int getX() {

return x;

}

– Cho phép thay đổi giá trị của x

public void setX (int newX) {

Lợi ích của sự đóng gói

• Trừu tượng hóa giữa đối tượng và người

Trang 20

Tránh xung đột tên biến

• Tránh xung đột khi tham số của phương thức

trùng với biến thành viên:

public class Point {

Trang 21

Gọi phương thức khởi tạo khác

public class Point {

Trang 22

– Lớp cha (lớp cơ sở): superclass (base class)

– Lớp con (lớp dẫn xuất): subclass (drived class)

• Xây dựng thêm các thuộc tính và các

phương thức riêng của lớp đó

• Lớp dẫn xuất có hầu hết các thành phần

giống như lớp cơ sở (các phương thức và

biến thành viên của lớp cơ sở), ngoại trừ:

– Các thành phần private

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

– Phương thức tĩnh

Trang 23

Lợi ích của kế thừa

• Phản ánh mối quan hệ giữa các lớp

Biết ăn Biết ngủ

Biết sủa Biết chạy

Biết hót Biết bay

Trang 24

• Xây dựng lớp Động vật chứa các trường

và phương thức mô tả đặc điểm và hành

động giống nhau giữa Chó và Chim

• Xây dựng hai lớp Chó và Chim kế thừa từ

lớp Động vật

• Bổ sung vào mỗi lớp các trường và

phương thức mô tả đặc điểm riêng của

Trang 25

Khai báo lớp kế thừa

• Một lớp chỉ có thể kế thừa từ một lớp khác

• Khai báo: sử dụng từ khóa extends

• Để gọi phương thức khởi tạo từ lớp cha,

public class Hinhtron {

protected int bankinh;

public Hinhtron ( int bankinh ) {

this bankinh = bankinh;

}

public int layBankinh () {

return bankinh;

}

public double tinhDientich() {

return Math PI * bankinh * bankinh;

}

public double tinhChuvi() {

return 2 * Math PI * bankinh;

}

Trang 26

public class Hinhcau extends Hinhtron {

public Hinhcau( int bankinh ) {

super (bankinh); // Goi phương thức khởi tạo cua lop cha

}

public double tinhDientich() {

return 4* Math PI*bankinh*bankinh;

}

public double tinhThetich() {

return (4.0/3) * Math PI * bankinh * bankinh * bankinh;

public class KethuaVd {

public static void main( String [] args) {

Hinhtron ht = new Hinhtron (10);

Hinhcau hc = new Hinhcau (2);

System out.println( “Ban kinh hinh tron: " + ht.layBankinh ());

System out.println( “Ban kinh hinh cau: " + hc.layBankinh ());

System out.println( “Dien tich hinh tron: " + ht.tinhDientich ());

System out.println( “Dien tich hinh cau: " + hc.tinhDientich ());

System out.println( “The tich hinh cau: " + hc.tinhThetich ());

}

Trang 27

11 Đa hình (Polymorphism)

• Thể hiện: cùng một phương thức nhưng

có nội dung thực hiện khác nhau trên các

đối tượng khác nhau

• Phương thức gọi được xác định thông

qua đối tượng được tham chiếu, không

thông qua kiểu khai báo của tham chiếu

• Trong Java, các phương thức luôn mang

public void method () {

System out.println ( “method of A” );

}

}

class B extends A {

public void method () {

System out.println( “method of B” );

}

}

class C extends A {

public void method () {

System out.println( “method of C” );

Trang 28

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

• Là lớp chỉ được sử dụng làm lớp cha cho

các lớp khác, không có các thể hiện

(instance)

• Lớp trừu tượng có thể định nghĩa các thuộc

tính chung cho các lớp con của nó

• Ví dụ

– Lớp Dagiac có các phương thức tinhDientich,

tinhChuvi

– Lớp HinhTamgiac, HinhChunhat kế thừa từ

lớp trừu tượng Dagiac.

• Khai báo lớp trừu tượng:

public abstract class ClassName {…}

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

• Lớp trừu tượng thường có ít nhất một

phương thức trừu tượng (phương thức

không được định nghĩa)

– public abstract void tinhDientich();

– public abstract void tinhChuvi();

• Các lớp con của một lớp cha trừu tượng phải

định nghĩa tất cả các phương thức trừu

tượng

• Không thể tạo các đối tượng của một lớp

trừu tượng nhưng có thể khai báo biến thuộc

kiểu lớp trừu tượng để tham chiếu đến các

đối tượng thuộc lớp con của nó

Trang 29

static final double PI = 3.14159;

13 Packages & Interfaces

• Những thành phần cơ bản của một chương

trình Java:

– Gói (Packages)

– Giao diện (Interfaces)

• Một chương trình Java có thể có các phần:

– Lệnh khai báo gói (package )

– Lệnh chỉ định gói được dùng (import)

– Khai báo lớp public (một file java chỉ chứa một

public class)

– Các lớp khác (classes private to the package)

• Tập tin nguồn Java có thể chứa tất cả hoặc

một vài trong số các phần trên

Trang 30

Interfaces

• Chương trình Java chỉ có thể kế thừa từ một lớp

duy nhất trong cùng một thời điểm, nhưng có thể

thực thi (implements) cùng lúc nhiều Interfaces

• interface cần phải được hiện thực (implements).

• Khai báo:

interface InterfaceName { }

• Một Interface thường chỉ chứa các hằng static và

các phương thức public chưa cài đặt.

• Một Interface có thể kế thừa từ một Interface

– Các phương thức phải được định nghĩa trong

lớp dẫn xuất giao diện đó.

Trang 31

Interfaces (tt)

• Sử dụng interfacse

– Một lớp có thể dẫn xuất từ nhiều interface

– Nếu một lớp dẫn xuất từ một interface mà

interface đó dẫn xuất từ các interface khác thì

lớp đó phải định nghĩa tất cả các phương

thức có trong các interface đó.

– Khi định nghĩa một interface mới thì một kiểu

dữ liệu tham chiếu cũng được tạo ra.

public void answer ();

public boolean forward (int extension);

public void takeMessage (String message, String

recipient);

}

Trang 32

public void answer() { }

public boolean forward (int extension) { }

public void takeMessage (String message, String

recipient) { }

}

Packages (gói)

• Tương tự như thư mục lưu trữ những lớp,

interface và các gói con khác  thành

viên của gói

• Ưu điểm của Package:

– Cho phép tổ chức các lớp vào những đơn vị

nhỏ hơn

– Giúp tránh được tình trạng trùng lặp khi đặt

tên.

– Cho phép bảo vệ các lớp đối tượng

– Tên gói (Package) có thể được dùng để nhận

Trang 33

Packages (tt)

• Lưu ý khi tạo gói:

– Mã nguồn phải bắt đầu bằng lệnh ‘package’

– Mã nguồn phải nằm trong cùng thư mục mang

tên của gói

– Tên gói nên bắt đầu bằng ký tự thường (lower

case) để phân biệt giữa lớp đối tượng và gói

– Những lệnh khác phải viết phía dưới dòng khai

báo gói là “import”, kế đến là phần định nghĩa lớp

• Các bước tạo gói (Package)

– Khai báo gói

– Import những gói chuẩn cần thiết

– Khai báo và định nghĩa các lớp đối tượng có

trong gói

– Lưu các định nghĩa trên thành tập tin java, và

biên dịch những lớp đối tượng đã được định

nghĩa trong gói.

Trang 34

Packages (tt)

• Gói do người dùng định nghĩa

– Mã nguồn của những chương trình này phải

ở cùng thư mục của gói

– Để những chương trình Java khác sử dụng

những gói này, import gói vào trong mã

nguồn

• Import những lớp đối tượng cần dùng

• Import toàn bộ gói

– Tạo tham chiếu đến những thành viên của

Ngày đăng: 23/02/2022, 10:22

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN