asfsafsd

Màu nền
Font chữ
Font size
Chiều cao dòng

Bạn đang ở: Home / Kiến thức / Học lập trình / Bài 4: Lập trình hướng đối tượng với công nghệ Java

Bài 4: Lập trình hướng đối tượng với công nghệ Java

Giới thiệu

Công nghệ Java bao trùm nhiều thứ, nhưng bản thân ngôn ngữ Java lại không lớn lắm. Tuy nhiên, trình bày nó bằng ngôn ngữ thông thuờng, lại không phải là nhiệm vụ đơn giản. Phần này sẽ không bàn kỹ về ngôn ngữ này. Thay vào đó, sẽ nêu những gì bạn cần biết để khởi đầu và những gì bạn hầu như chắc chắn sẽ gặp với tư cách là lập trình viên mới vào nghề. Các tài liệu hướng dẫn khác (xem Các tài nguyên để nhận được những gợi ý về một số tài liệu này) sẽ trình bày các khía cạnh khác nhau của ngôn ngữ này, các thư viện hữu ích bổ trợ do Sun cung cấp, các tài nguyên khác và thậm chí cả các IDE.

Chúng tôi sẽ trình bày đầy đủ ở đây cả lời dẫn giải và các ví dụ mã lệnh để bạn có thể bắt đầu viết các chương trình Java và học cách lập trình hướng đối tượng đúng đắn trong môi trường Java. Từ đó, vấn đề chỉ còn là việc thực hành và học tập.

Hầu hết các tài liệu hướng dẫn nhập môn đọc lên giống như những cuốn sách tham khảo đặc tả ngôn ngữ. Đầu tiên bạn thấy tất cả các quy tắc cú pháp, sau đó bạn xem các ví dụ áp dụng, tiếp đó là nói về những chủ đề nâng cao hơn, như các đối tượng chẳng hạn. Ở đây chúng tôi sẽ không đi theo con đường đó. Đó là vì nguyên nhân chính dẫn đến các mã lệnh hướng đối tượng tồi tệ viết bằng ngôn ngữ Java là những lập trình viên mới vào nghề không đặt mình vào môi trường hướng đối tượng ngay từ đầu. Các đối tượng có khuynh hướng bị đối xử như một chủ đề phụ thêm (add-on) hay lệ thuộc. Thay vào đó, chúng tôi sẽ đan xen việc học cú pháp Java thông qua quá trình học Java hướng đối tượng. Bằng cách này, bạn sẽ có được một bức tranh mạch lạc về việc sử dụng ngôn ngữ ra sao trong bối cảnh hướng đối tượng.

Cấu trúc của một đối tượng Java

Hãy nhớ rằng, đối tượng là một thứ được bao gói kín, tự biết mọi điều về mình và có thể làm một số việc khi được yêu cầu thích hợp. Mọi ngôn ngữ đều có quy tắc định nghĩa một đối tượng như thế nào. Trong ngôn ngữ Java, đối tượng nói chung nom giống như liệt kê dưới đây, mặc dù chúng có thể thiếu hụt một số thành phần:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

package  packageName;

import  packageNameToImport;

accessSpecifier class  ClassName {

accessSpecifier

dataType

variableName [=  initialValue ];

...

accessSpecifier ClassName(  arguments ) {

constructor statement(s)

}

accessSpecifier

returnValueDataType

methodName (  arguments ) {

statement(s)

}

}

Ở đây có một số khái niệm mới mà chúng ta sẽ thảo luận trong vài phần tiếp sau.

Các gói

Khai báo gói phải xuất hiện đầu tiên khi bạn định nghĩa một lớp:

?

1

package  packageName;

Mọi đối tượng Java đều nằm trong một package. Nếu bạn không nói rõ ràng nó thuộc gói nào, Java sẽ đặt nó vào trong gói mặc định. Một package chỉ đơn giản là một tập các đối tượng, tất cả (thường là thế) liên quan với nhau theo một cách nào đó. Các package quy chiếu theo đường dẫn đến tệp tin trong hệ thống tệp của bạn. Tên của các gói dùng ký pháp dấu chấm (.) để dịch đường dẫn tệp tin này thành một thứ mà nền tảng Java hiểu được. Mỗi mẩu trong tên package gọi là một nút (node).

Ví dụ, trong gói có tên là java.util.ArrayList, java là một nút, util là một nút và ArrayList là một nút. Nút cuối cùng trỏ đến tệp ArrayList.java.

Các câu lệnh nhập khẩu

Tiếp theo là các câu lệnh nhập khẩu, khi bạn định nghĩa một lớp:

?

1

2

3

import  packageNameToImport;

...

Khi đối tượng của bạn sử dụng các đối tượng trong các gói khác, trình biên dịch của Java cần biết tìm chúng ở đâu. Một lệnh nhập khẩu (import) sẽ cho trình biên dịch biết nơi tìm những lớp bạn cần dùng. Ví dụ, nếu bạn muốn dùng lớp ArrayList từ gói java.util, bạn cần nhập khẩu theo cách sau:

?

1

import java.util.ArrayList;

Mỗi lệnh import kết thúc bằng một dấu chấm phẩy (;), giống như hầu hết các câu lệnh trong ngôn ngữ Java. Bạn có thể viết bao nhiêu câu lệnh nhập khẩu cũng được khi bạn cần cho Java biết tìm tất cả các lớp mà bạn dùng ở đâu. Ví dụ, nếu tôi muốn dùng lớp ArrayList từ gói java.util, lớp BigInteger từ gói java.math, tôi sẽ nhập khẩu chúng như sau:

?

1

2

import java.util.ArrayList;

import java.math.BigInteger;

Nếu bạn nhập khẩu nhiều hơn một lớp từ cùng một gói, bạn có thể dùng cách viết tắt để cho biết bạn muốn nạp tất cả các lớp trong gói này. Ví dụ, nếu tôi muốn dùng cả ArrayList và HashMap, cả hai đều từ gói java.util, tôi sẽ nhập khẩu chúng như sau:

?

1

import java.util.*;

Bạn muốn nhập khẩu gói nào thì phải có lệnh nhập khẩu riêng cho gói đó.

Khai báo một lớp

Tiếp theo là khai báo lớp, khi bạn định nghĩa một lớp:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

accessSpecifier class  ClassName {

accessSpecifier

dataType

variableName [=  initialValue ];

...

accessSpecifier ClassName(  arguments ) {

constructor statement(s)

}

accessSpecifier

returnValueDataType

methodName (  arguments ) {

statement(s)

}

}

Bạn định nghĩa một đối tượng Java như một lớp. Hãy nghĩ rằng lớp là khuôn mẫu của đối tượng, một thứ gì đó giống như máy cắt bánh quy vậy. Lớp định nghĩa kiểu của đối tượng bạn có thể tạo ra từ lớp. Bạn có thể dập khuôn ra bao nhiêu đối tượng thuộc cùng kiểu đó như bạn muốn. Khi bạn làm thế, bạn đã tạo ra một cá thể của lớp – hoặc nói theo cách khác là bạn đã cụ thể hóa một đối tượng. (Chú ý: từ đối tượng được dùng hoán đổi lẫn lộn để chỉ một lớp lẫn một cá thể của lớp.)

Định tố truy cập (access specifier) của một lớp có thể có nhiều giá trị, nhưng hầu hết đều là public (công cộng), và đó cũng là tất cả những gì chúng ta sẽ nói tới trong tài liệu hướng dẫn này. Bạn có thể đặt một cái tên bất kỳ nào bạn thích cho một lớp, nhưng tên của lớp theo quy ước bắt đầu bằng bằng một chữ cái viết hoa, và mỗi từ tiếp theo trong tên cũng bắt đầu bằng một chữ cái viết hoa.

Lớp có hai kiểu thành phần: các biến (hay thành phần dữ liệu) và các phương thức. Tất cả các thành phần của lớp đều được định nghĩa trong thân lớp, nằm giữa cặp ngoặc nhọn của lớp.

Các biến

Giá trị của các biến trong một lớp là cái để phân biệt từng cá thể của lớp, đó là lý do vì sao chúng thường được gọi là các biến cá thể. Một biến có một định tố truy cập chỉ rõ những đối tượng nào được phép truy cập nó, một kiểu dữ liệu, một tên và (tùy chọn) một giá trị khởi tạo. Đây là danh sách các định tố truy cập và ý nghĩa của chúng:

* public (công cộng): Bất kỳ đối tượng nào trong bất kỳ gói nào đều có thể thấy biến này.

* protected (có bảo vệ): Bất kỳ một cá thể nào của lớp, lớp con trong cùng một gói và bất kỳ lớp nào không phải là lớp con nhưng nằm trong cùng một gói có thể thấy biến này. Lớp con trong các gói khác không thể thấy nó.

* private (riêng tư): Không một đối tượng nào ngoài cá thể cụ thể của lớp có thể thấy được biến, thậm chí cả lớp con.

* Không có định tố, (hoặc package protected (có bảo vệ theo gói)): Chỉ có các lớp trong cùng một gói với lớp chứa biến là có thể thấy biến mà thôi.

Nếu bạn cố truy cập một biến không thể truy cập được, trình biên dịch sẽ thông báo biến đó là không nhìn thấy đối với bạn. Bạn sẽ dùng định tố truy cập gì trong những hoàn cảnh nào là nhờ vào óc suy xét, và chúng ta sẽ quay trở lại vấn đề này sau.

Các phương thức

Các phương thức của một lớp định nghĩa lớp có thể làm những gì. Có hai loại phương thức trong ngôn ngữ Java:

* Hàm tạo

* Các phương thức khác

Cả hai đều có định tố truy cập (để chỉ ra những đối tượng nào có thể sử dụng chúng) và phần thân (giữa cặp ngoặc nhọn), có chứa một hay nhiều câu lệnh. Ngoài điều này ra, khuôn dạng và chức năng của chúng rất khác nhau. Chúng ta sẽ đề cập đến từng loại phương thức này ở hai phần tiếp sau.

Hàm tạo

Các hàm tạo cho phép bạn chỉ rõ cách cá thể hóa một lớp. Bạn khai báo một hàm tạo như sau:

?

1

2

3

accessSpecifier ClassName(  arguments ) {

constructor statement(s)

}

Bạn nhận được sẵn một hàm tạo mặc định (không có tham số truyền vào) cho mọi lớp mà bạn tạo ra mà không phải làm gì. Thậm chí bạn không phải định nghĩa nó. Các hàm tạo trông khác với các phương thức khác ở chỗ chúng không có kiểu dữ liệu của giá trị trả về. Đó là vì kiểu dữ liệu giá trị trả lại của nó chính là lớp đó. Bạn viết mã lệnh gọi một hàm tạo như sau:

?

1

ClassName variableHoldingAnInstanceOfClassName = new ClassName(  arguments );

Khi bạn gọi một hàm tạo, bạn dùng từ khóa new. Các hàm tạo có thể nhận tham số truyền vào hoặc không (hàm tạo mặc định không có tham số vào). Nghiêm túc mà nói, các hàm tạo không phải là phương thức hay thành viên của lớp. Chúng là một sinh thể đặc biệt trong ngôn ngữ Java. Tuy vậy, trong thực tế, vẻ bề ngoài và hoạt động của chúng nhiều lúc cũng giống các phương thức khác, và nhiều người gộp cả hai vào với nhau. Hãy ghi nhớ rằng chúng là đặc biệt.

Các phương thức không là hàm tạo

Các phương thức không là hàm tạo trong ngôn ngữ Java là thứ mà bạn thường sử dụng nhất. Bạn khai báo chúng như sau:

?

1

2

3

4

5

accessSpecifier

returnValueDataType

methodName (  arguments ) {

statement(s)

}

Bạn đang đọc truyện trên: Truyen2U.Pro

#king