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

Java Classes & Objects

87 792 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 87
Dung lượng 866,53 KB

Nội dung

Khái niệm đối tượng Đối tượng là một thể hiện của một lớp  Mỗi đối tượng có các hành vi được định nghĩa bởi các phương thức mà ta có thể gọi ◦ Ta có thể làm gì với đối tượng này?.  C

Trang 1

Chapter 4

Java Classes & Objects

Trang 3

 Mỗi đối tượng chịu trách nhiệm thực hiện

một tập tác vụ có liên quan với nhau

 Đối tượng có thể yêu cầu một đối tượng

“If I can’t do it, then I’ll ask somebody who

can.”

 Các đối tượng tương tác với nhau bằng

cách gởi thông điệp

Chương trình được tạo thành từ các đối tượng

Trang 4

 Mẫu (khung thức) mà từ đó các đối

tượng thực sự được tạo ra

Trang 5

Class components

Data members (Attributes) Method 1 Method 2

 La dơn vị cơ bản trong

lập trình Java

Classes

Trang 6

[<phạm vi hoặc kiểm soát truy nhập>]

[extends <Tên lớp cha>]

[implements<tên giao diện>]

{ <Các thành phần của lớp>

}

class, extends, implements: từ khóa

 Các kiểu lớp trong Java:

Định nghĩa lớp

Trang 7

 Một chương trình có thể có

nhiều lớp và các lớp có

thể:

◦ Trong 1 file duy nhất.

◦ Trong nhiều file khác nhau,

và các file này có thể nằm

trong cùng một Package hay

nằm trong nhiều Package

khác nhau

class

class abc { class cdf { void method1() {}

void method2() {}

} class ghk { }

public static void main(String[] args) {

} }

Trang 8

 Lớp được sử dụng khi chương trình cần một đối tượng có kiểu của lớp đó.

<tên lớp> <tên đối tượng> = new <tên lớp>();

 Ví dụ

Person myClass = new Person();

Sử dụng class

Trang 9

 Hàm: Hành vi của các đối tượng trong một lớp

 Cú pháp định nghĩa:

[<Phạm vi hoặc thuộc tính kiểm soát truy

nhập>]<Kiểu trả về><Tên phương thức>

([<Danh sách tham biến hình thức>])

Trang 10

 The flow of control following method

invocations

Method

Trang 11

Ex: Lớp RectangleDemo

• Để có thể thực thi, chương trình Java phải có một lớp

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

• Phương thức main() được gọi bởi JVM để bắt đầu

chương trình.

Trang 12

Khái niệm đối tượng

 Đối tượng là một thể hiện của một lớp

 Mỗi đối tượng có các hành vi được định

nghĩa bởi các phương thức mà ta có thể gọi

◦ Ta có thể làm gì với đối tượng này?

◦ Các phương thức nào ta có thể áp dụng cho nó?

Trang 13

Tạo đối tượng

• Một đối tượng phải được tạo trước khi sử dụng trong một chương trình

Trang 14

Syntax to access the

data members of a class

outside the class:

g.drawOval(x,y,radius,radius);

} }

Accessing data members of a class

Trang 15

 Chỉ ra mức độ truy xuất được cho phép đối với

các thành phần dữ liệu và các phương thức của đối tượng

◦ public : có thể được truy cập mọi nơi trong hệ thống và được thừa kế bởi các lớp con của nó

◦ private : có thể được truy cập trong chính lớp đó Không cho phép kế thừa

◦ protected : có thể được truy cập và thừa kế bởi các lớp con và có thể truy xuất bởi mã lệnh của cùng gói đó

◦ Defaul t (không khai báo 3 kiểu trên): chỉ cho phép truy nhập đối với các lớp trong cùng gói, kể cả các lớp con Không cho phép kế thừa.

Access modifer

Trang 16

Public-ex

Trang 17

Protected-ex

Trang 18

Private

Trang 19

Default

Trang 20

 Khi khai báo các thành phần của lớp:

◦ có staitc: những thành phần đó dùng chung cho tất

cả đối tượng trong một lớp

◦ Không có static: thường mỗi biến đều có bản sao

các giá trị riêng của từng đối tượng.

 Truy nhập tới các thuộc tính dữ liệu static có thể thực hiện

◦ Thông qua tên lớp

◦ Thông qua tên đối tượng

Đặc tính Static

Trang 21

class varStatic { int x=2;

static int y=3;

varStatic(){

x++; y++; }

public static void main(String[] args){

varStatic So = new varStatic();

Trang 22

class methodStatic { private int x=2;

private static int y=3;

public static void setxy () {

x++; //error

y++; }

public static void main(String[] args){

methodStatic So2 = new methodStatic();

Trang 23

 Toán tử móc xích giữa các lớp kế thừa

 Ngăn kế thừa với khai báo final

Thừa kế (Inheritance)

Trang 24

Thừa kế (Inheritance)

• Tạo ra một lớp mới từ lớp có sẵn

• Sử dụng lại thuộc tính và phương thức

Trang 25

 Superclass (Base class)

◦ Là lớp mà từ đó lớp con được dẫn xuất

◦ Có thể gọi là lớp cơ sở hoặc lớp cha

 Subclass (Derived class)

Trang 26

 Sử dụng từ khoá extends để khai báo sự thừa kế

 Một lớp có thể dẫn xuất trực tiếp từ duy nhất một

lớp (đơn thừa kế)

 Nếu một lớp không có bất kỳ lớp cha nào thì mặc

nhiên nó cũng được dẫn xuất từ lớp Object

◦ Lớp Object là cha của tất cả các lớp trong Java

 Một lớp con có thể thừa kế tất cả các thành phần

được khai báo protected và public của lớp cha

Inheritance

Trang 27

class Parent {

}

class Child1 extends Parent {

//Các thuộc tính dữ liệu bổ sung

Trang 28

Ví dụ về thừa kế

Trang 29

Inheriting a class does not

overrule the private access

restriction Thus, even

though a subclass includes

all of the members of its

superclass, it cannot access

those members of the

superclass that have been

declared private

class vdInher {

private double width;

private double height;

void showDim() { System.out.println("Width and height are:“+width + " and " + height);

} public static void main(String[] args){

Triangle ve1 = new Triangle();

ve1.showDim();

System.out.println(ve1.area());

ve1.showStyle();

} }

class Triangle extends vdInher { String style;

double area() {

Member access & Inheritance

Trang 30

class vdPrivate

{

private double width;

private double height ;

Trang 31

 Constructor:

◦ là một phương thức đặc biệt (không có hoặc có

nhiều tham số)

◦ không có giá trị trả về và có tên trùng với tên lớp

◦ đặt các giá trị khởi tạo cho các đối tượng

◦ khi một đối tượng được tạo, dùng với toán tử new

◦ Có thể có nhiều hơn một constructor

 Trường hợp không có constructor: trình biên dịch sẽ cung cấp constructor mặc định (không làm gì cả, null, false,0) cho lớp đó.

Constructor – toán tử tạo lập

Trang 32

[<thuộc tính>] <tên lớp> (<ds tham biến>){

// Nội dung cần tạo lập

Trang 33

Class without constructor Class with constructor

class VdConstructor { private int x,y;

System out.println(So.x);

class VdConstructor {

private int x,y;

public static void

Trang 34

Nhiều Constructor

Trang 35

 trình biên dịch sẽ tự động chèn lời gọi tới Constructor

mặc nhiên (implicity) hoặc Constructor không tham số

(explicity) của lớp cha trước khi thực thi đoạn code khác trong Constructor lớp con

◦ Có gọi tường minh constructor của lớp cha bằng cách sử dụng từ khoá super trong phần đặc tả constructor của lớp dẫn xuất

Trang 36

Chuỗi constructor

Parent

F1

F2

Trang 37

Chuỗi constructor

• Thể hiện của lớp dẫn xuất

luôn gọi constructor của

lớp cơ sở trước rồi mới

đến constructor của lớp

dẫn xuất

Trang 38

Các nguyên tắc của Constructor

 Constructor mặc nhiên (default constructor)

sẽ tự động sinh ra bởi trình biên dịch nếu lớp không khai báo Constructor.

Trang 39

Ex: Parent()

Trang 40

Ex ?: Parent() default

Trang 41

 Các toán tử tạo lập:

◦ có thể được nạp chồng (Overloading) trong cùng

1 lớp.

◦ không thể viết đè (Override) ở các lớp con

 Java có 2 toán tử tạo lập: this() và super()

This(): sử dụng để tạo ra đối tượng của cùng lớp hiện thời

Supper(): được sử dụng trong các toán tử tạo

lập của lớp con để truy xuất đến các thành phần

và constructor của lớp cha từ lớp con

Toán tử móc xích giữa các lớp kế thừa

Trang 42

class Ve2C{

protected double x,y ;

public Ve2C(double x,double y)

Trang 43

} methodB(int k){

super.methodA(k) ; }

} // end class B

Trang 44

class Ve3C extends Ve2C {

Trang 45

Triệu hồi tường minh Constructor lớp cha (explicitly)

Trang 46

Ví dụ

Trang 47

 Nạp chồng các phương thức (overloading):

 cùng 1 tên,

 cùng lớp

 khác nhau về danh sách tham số

 khác nhau về số lượng hoặc

 khác nhau về thứ tự các kiểu.

 Ex, JDK API có lớp java.lang.Math có nhiều hàm nạp chồng (min())

Nạp chồng các phương thức

Trang 48

class TinhToan {

public static void main(String[] args) {

Tinh c = new Tinh();

Trang 49

Ghi đè phương thức

 Ghi đè phương thức (Overriding) là:

◦ Lớp con định nghĩa phương thức mới có cùng

dấu hiệu với phương thức ở lớp cha (khác lớp)

 Dấu hiệu(signature) bao gồm:

Trang 50

class vd1 {

public static void main(String[] args) {

Child c= new Child();

c.Infor();

}

}

class Parent {

public void Infor(){

System out println( "Calling Parent " );

}

}

class Child extends Parent {

Ex: overriding

Trang 52

Biến, phương thức và lớp Final

 Biến Final - Final Variables

 Phương thức Final - Final Methods

 Lớp Final - Final Classes

Trang 53

Biến Final

 Từ khóa “ final ” được sử dụng với biến để chỉ

rằng giá trị của biến là hằng số.

 Hằng số là giá trị được gán cho biến vào thời

điểm khai báo và sẽ không thay đổi về sau.

Trang 54

Phương thức hằng (Final)

 Được sử dụng để ngăn chặn việc ghi đè (overriding) hoặc

che lấp (hidden) trong các lớp Java.

 Phương thức được khai báo là private hoặc là một thành

phần của lớp final thì được xem là phương thức hằng.

 Phương thức hằng không thể khai báo là trừu tượng

(abstract).

Trang 55

 Các phương thức được khai báo là final không thể được nạp chồng

class A {

final void method (){

} } class B extends A{

final void method (){ // error }

ex

Trang 56

Lớp hằng - Final Classes

 Là lớp không có lớp con.

 Được sử dụng để hạn chế việc thừa kế và ngăn chặn việc sửa đổi một

lớp.

 Là lớp có thể hoặc không có các phương thức hằng.

 Lớp hằng có thể tạo đối tượng

Trang 57

1 Cú pháp lời gọi hàm

2 Các cách truyền tham số

 Truyền theo tham trị:

• Các tham biến hình thức có kiểu nguyên thủy

 Truyền theo tham biến

• Các tham biến hình thức có kiểu class

• Các tham biến hình thức có kiểu array

3 Các tham biến final.

Truyền tham số và các lời gọi hàm

57

Trang 58

 Các đối tượng trong ct trao đổi với nhau thông qua các thông điệp – được cài đặt như lời gọi hàm.

Trang 59

 Cách truyền các giá trị phụ thuộc vào kiểu của các tham biến hình thức

Cách truyền các tham số

59

Kiểu của tbht Giá trị được truyền

Kiểu nguyên thủy Kiểu nguyên thủy

(Tham trị) Kiểu lớp Giá trị tham chiếu Kiểu mảng Giá trị tham chiếu

Trang 60

 Khi tham biến hình thức có kiểu nguyên thủy thì giá trị của các biến được sao chép sang biến hình thức

 Gọi là truyền theo tham trị:

◦ ->Mọi thay đổi của biến hình thức không ảnh hưởng đến tham biến hiện thời

Truyền các giá trị kiểu nguyên thủy

60

Trang 61

class Thamtri { public int test(int i,int j) {

System.out.println("Gia tri cua ham test tdoi: "+ ex.test(a, b));

System.out.println("Sau goi phuong thuc:" + a + " " + b);

}

Ex: truyền theo tham trị

61

Kiểu nguyên thủy

Trang 62

 Khi biến hiện thời tham chiếu tới đối tượng , thì giá trị tham chiếu của đối tượng sẽ được truyền cho biến hình thức.

 Khi đó, biến hiện thời và biến hình thức là 2 tên gọi khác nhau của đối tượng được tham chiếu

◦ -> mọi thay đổi thực hiện đối với các thành phần của đối tượng thông qua tham biến hình thức

Truyền các giá trị tham chiếu

62

Trang 63

class Thamchieu { public static void test(tchieu aa) {

class tchieu { int x, y ;

Ex: truyền theo tham chiếu

63

Kiểu Lớp

Trang 64

 Mảng được xem là đối tượng

 Các phần tử của mảng có thể có kiểu nguyên thủy hoặc kiểu lớp (tham chiếu).

 Ta xét bài toán: sx mảng

◦ Định nghĩa 1 hàm doicho có biến hình thức là kiểu mảng

◦ Biến hiện thời có kiểu mảng

Truyền tham chiếu kiểu mảng

64

Trang 66

 Tham biến hình thức có thể khai báo với final -> biến cuối trắng – nó không được khởi tạo giá trị (trắng) cho đến khi nó được gán một trị nào đó, khi đó giá trị được gán là cuối cùng, không thay đổi.

Các tham biến final

66

Trang 67

class vd0 { public int test (int i, final int j) {

System.out.println("Sau goi phuong thuc:"+a+" "+b);

System.out.println(“Gia tri cua ham test t.doi: "+c);

}

Final - ex

67

Trang 68

 Có thể truyền các tham số cho chương trình trên dòng lệnh.

Các đối số của chương trình

68

Trang 69

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

1 Định nghĩa lớp trừu tượng

2 Hiện thực lớp trừu tượng

3 Định nghĩa phương thức trừu tượng

4 Ví dụ

Trang 70

đặc tả trong lớp cơ sở Nếu không nó phải được đặc tả là

trừu tượng.

Trang 71

• Nếu một lớp chứa phương thức trừu tượng thì

chính nó cũng phải được đặc tả là trừu tượng

Trang 72

Ví dụ lớp và phương thức trừu tượng

Trang 73

1 Giới thiệu

2 Định nghĩa giao tiếp

3 Thực thi giao tiếp

4 Ví dụ

Giao tiếp (Interface)

Trang 74

 Trong đa thừa kế , lớp con có thể thừa kế từ nhiều

lớp khác nhau (cần thiết trong lập trình)

◦ cho phép đa kế thừa trong Interface.

◦ Đ/n: Một giao tiếp là một tập hợp các định nghĩa phương

thức trừu tượng (không có cài đặt) và có thể định nghĩa các hằng.

◦ Với giao tiếp ta có thể xác định một lớp phải làm gì nhưng

Giao tiếp (Interface)

Trang 75

lớp được định nghĩa trong cùng gói với giao tiếp

phương thức có trong giao tiếp (không cung cấp cách cài đặt).

Khai báo giao tiếp (Interface)

Trang 76

public interface CalculatorInterface

{

public double add(double x, double y);

public double sub(double x, double y);

public double mul(double x, double y);

public double div(double x, double y);

}

Interface Const { Double PI=3.14;

String DONVI_S= “cm2 “ ;

Interfaces - ex

Trang 77

 Một lớp thực thi một giao tiếp tuân theo những quy

ước đã được khai báo trong giao tiếp đó

<InterfaceNames>: danh sách các giao tiếp

Thực thi giao tiếp

Trang 78

class CalculatorTest implements CalculatorInterface {

public double add(double x, double y) { return x+y; }

public double sub(double x, double y) { return x-y; }

public double mul(double x, double y) { return x*y; }

public double div(double x, double y) {return x/y; }

public static void main(String[] args) {

Trang 79

Implementing Multiple Interfaces

 An interface can extend zero or more interfaces

 Multiple interfaces can be implemented in a single class.

 This implementation provides the functionality of multiple

inheritance.

 Implement multiple interfaces by placing commas between the

interface names when implementing them in a class.

 A class must implement all inherited interface methods

Trang 80

Ex of Implementing Multiple Interfaces

Trang 82

 Quan hệ:

◦ lớp ngoài (enclosing, outter class)

◦ Lớp trong (nested, inner class):

Là lớp khai báo bên trong 1 lớp khác

 Lớp trong có quyền truy xuất lớp ngoài

 Lớp ngoài chỉ truy xuất được lớp con khi có một thể hiện của lớp trong (bằng toán tử new)

 Lợi ích: có thể viết code truy xuất lớp ngoài từ lớp

trong mà không cần định nghĩa đối tượng lớp ngoài

Lớp con (trong /inner)

Trang 84

public class Outer {

private String st = "Outer Class"; //

InnerClass innerClass = new InnerClass();

Trang 85

 là nơi tổ chức các lớp và các giao diện bạn

coi như là các thành viên của nó

Trang 86

Tạo một tham chiếu đến các thành phần của gói:

//import mypackage.Calculate;

class PackageDemo{

public static void main(String args[]){

// Calculate calc = new Calculate();

mypackage.Calculate calc = new

mypackage.Calculate();

}

Package

Trang 87

 Xây dựng lớp cơ sở Dagiac, lớp con HCN,

Ngày đăng: 12/04/2015, 03:08

w