Professional Documents
Culture Documents
Chương 10
Chương 10
Chương 10
OOP sử dụng tất cả các khái niệm quen thuộc của lập trình thủ tục mô-đun, chẳng hạn như các biến,
các phương thức và truyền đối số. Các phương thức trong chương trình hướng đối tượng tiếp tục được sử dụng
cấu trúc tuần tự, lựa chọn và lặp và tận dụng các mảng. Tuy nhiên, OOP cho biết thêm
một số khái niệm mới về lập trình và liên quan đến một cách suy nghĩ khác. A
lượng từ vựng mới đáng kể cũng được tham gia. Đầu tiên, bạn sẽ đọc về OOP
các khái niệm nói chung, và sau đó bạn sẽ học các thuật ngữ cụ thể.
Năm tính năng quan trọng của ngôn ngữ hướng đối tượng là:
Các lớp học
Các đối tượng
Tính đa hình
Di sản
Đóng gói
https://translate.googleusercontent.com/translate_f 2/41
9/7/2021 Lập trình hướng đối tượng
Trang 3
Các đối tượng cả trong thế giới thực và trong lập trình hướng đối tượng có thể chứa các thuộc tính
và các phương pháp. Các thuộc tính là các đặc điểm của một đối tượng. Ví dụ, một số
thuộc tính của ô tô là sản xuất, kiểu máy, năm và giá mua. Các thuộc tính này không
thay đổi trong suốt vòng đời của xe. Ví dụ về các thuộc tính thường xuyên thay đổi bao gồm
ô tô hiện đang chạy, hộp số, tốc độ của nó và nó có bị bẩn hay không. Tất cả ô tô
sở hữu các thuộc tính giống nhau, nhưng không cùng giá trị cho các thuộc tính đó. Tương tự, con chó của bạn
có các thuộc tính về giống, tên, tuổi và liệu các mũi chích ngừa của nó có hiện tại hay không. Các phương pháp là
các hành động có thể được thực hiện trên một đối tượng; thường họ thay đổi, sử dụng hoặc truy xuất các thuộc tính. Đối với
ví dụ, một chiếc ô tô có các phương pháp để thay đổi và xem tốc độ của nó, và một con chó có
các phương pháp để thiết lập và tìm ra trạng thái bắn của nó.
Việc coi các mục như các thể hiện của một lớp cho phép bạn áp dụng kiến thức chung của mình về
lớp cho các đối tượng riêng lẻ được tạo ra từ nó. Bạn biết một đối tượng có những thuộc tính nào khi
bạn biết lớp nào định nghĩa nó. Ví dụ: nếu bạn của bạn mua Ô tô , bạn
biết nó có tên kiểu mẫu, và nếu bạn của bạn nhận được một con Chó , bạn sẽ biết con chó đó có giống. Bạn
có thể không biết trạng thái hiện tại của Ô tô của bạn bè bạn , chẳng hạn như tốc độ hiện tại của nó, hoặc
trạng thái các cảnh quay của Chú chó của cô ấy , nhưng bạn có biết những thuộc tính nào tồn tại cho Ô tô và
Các lớp chó ,
cho phép bạn hình dung các đối tượng này một cách hợp lý trước khi bạn nhìn thấy chúng.
Bạn biết đủ để hỏi kiểu xe ô tô chứ không phải giống của nó; bạn biết đủ để hỏi
tên của Con chó chứ không phải kích thước động cơ của nó. Một ví dụ khác, khi bạn sử dụng một ứng dụng mới
trên máy tính của mình, bạn mong đợi mỗi thành phần có các thuộc tính cụ thể, nhất quán, chẳng hạn như
một nút có thể nhấp được hoặc một cửa sổ có thể đóng được. Mỗi thành phần nhận được các thuộc tính này như
một thể hiện của lớp chung của các thành phần GUI (giao diện người dùng đồ họa).
Trang 4
Hầu hết các lập trình viên sử dụng một quy ước đặt tên trong đó tên lớp bắt đầu bằng một chữ cái viết hoa và
các mã nhận dạng nhiều từ được chạy cùng nhau, chẳng hạn như SavingsAccount hoặc TemporaryWorker. Mỗi cái mới
từ trong mã định danh bắt đầu bằng một chữ cái viết hoa. Trong Chương 2, bạn đã biết rằng quy ước này là
được gọi là vỏ Pascal.
Phần lớn hiểu biết của bạn về thế giới đến từ khả năng phân loại các đối tượng và
430
sự kiện thành các lớp. Khi còn nhỏ, bạn đã học khái niệm về động vật từ rất lâu trước khi bạn biết
từ. Cuộc gặp gỡ đầu tiên của bạn với một con vật có thể là với con chó của gia đình, một
con mèo của nhà hàng xóm, hoặc một con dê ở vườn thú cưng. Khi bạn phát triển bài phát biểu, bạn có thể đã sử dụng
cùng một thuật ngữ cho tất cả những sinh vật này, vui sướng hét lên "Doggie!" như cha mẹ bạn đã chỉ ra
bò, ngựa và cừu trong sách tranh hoặc dọc theo lề đường trên đường lái xe trong nước. Như
bạn trở nên tinh vi hơn, bạn học cách phân biệt chó với bò; vẫn sau đó, bạn
đã học để phân biệt các giống. Sự hiểu biết của bạn về lớp Động vật giúp bạn thấy
sự tương đồng giữa chó và bò và hiểu biết của bạn về lớp Chó giúp bạn thấy
điểm tương đồng giữa Great Dane và Chihuahua. Việc hiểu các lớp học mang lại cho bạn một
khung phân loại trải nghiệm mới. Bạn có thể không biết thuật ngữ okapi, nhưng khi
bạn học nó là một con vật, bạn bắt đầu phát triển một khái niệm về okapi có thể như thế nào.
Khi bạn suy nghĩ theo hướng đối tượng, mọi thứ đều là đối tượng. Bạn có thể nghĩ về bất kỳ
vật thể vô tri vô giác như một đồ vật — bàn làm việc, máy tính và ngôi nhà của bạn đều được gọi là
đồ vật trong hội thoại hàng ngày. Bạn cũng nghĩ về đồ vật cũng như đồ vật — cây nhà của bạn,
con cá vàng cưng của bạn, và em gái của bạn là đồ vật. Các sự kiện cũng là đối tượng — việc mua cổ phiếu mà bạn
đã thực hiện, việc đóng thế chấp mà bạn đã tham dự, và bữa tiệc tốt nghiệp của bạn đều là đồ vật.
Mọi thứ đều là một đối tượng, và mọi đối tượng là một thể hiện của một lớp tổng quát hơn. Bàn của bạn là một
thể hiện của lớp bao gồm tất cả các bàn và chú cá vàng cưng của bạn là một thể hiện của lớp
chứa tất cả cá. Những tuyên bố này thể hiện mối quan hệ là mối quan hệ bởi vì bạn có thể nói, "Của tôi
bàn làm việc bằng gỗ sồi với vết xước phía trên là Bàn và con cá vàng của tôi tên là Moby là Cá ”. Của bạn
cá vàng, cá bảy màu của tôi và cá mập trong vườn thú mỗi con tạo thành một thể hiện của lớp Cá .
Các lập trình viên hướng đối tượng cũng sử dụng thuật ngữ is-a khi mô tả sự kế thừa. Bạn sẽ học về
kế thừa ở phần sau của chương này và trong chương 11.
Khái niệm về một lớp rất hữu ích vì khả năng tái sử dụng của nó. Ví dụ, nếu bạn mời tôi đến một
tiệc tốt nghiệp, tôi tự động biết nhiều điều về đối tượng của đảng. Tôi cho rằng
sẽ có các thuộc tính như thời gian bắt đầu, số lượng khách, số lượng thức ăn và
những món quà. Tôi hiểu các đảng vì kiến thức trước đây của tôi về lớp Đảng , trong đó tất cả
các bên là những ví dụ hoặc trường hợp hữu hình. Tôi không biết số lượng khách hoặc ngày hoặc
thời gian của bữa tiệc cụ thể này, nhưng tôi hiểu rằng vì tất cả các bên đều có ngày và giờ,
thì cái này cũng phải như vậy. Tương tự, mặc dù mọi giao dịch mua cổ phiếu là duy nhất, nhưng mỗi lần mua phải
có một lượng đô la và một số cổ phiếu. Tất cả các đối tượng đều có các thuộc tính có thể dự đoán được vì
chúng được khởi tạo từ các lớp cụ thể.
Các thành phần dữ liệu của một lớp thuộc về mọi đối tượng được khởi tạo là các thành phần của lớp
biến cá thể . Các biến phiên bản thường được gọi là các trường để giúp phân biệt chúng với
các biến khác mà bạn có thể sử dụng. Tập hợp tất cả các giá trị hoặc nội dung của phiên bản đối tượng
Trang 5
các biến được gọi là trạng thái của nó . Ví dụ: trạng thái hiện tại của một bên cụ thể có thể là
8 giờ tối và thứ sáu; trạng thái của một giao dịch mua cổ phiếu cụ thể có thể là $ 10 và năm cổ phiếu.
https://translate.googleusercontent.com/translate_f 4/41
9/7/2021 Lập trình hướng đối tượng
Ngoàikhởi
được các thuộc
tạo từ tính
một của
lớp chúng, cácsởlớp
nhất định cócác
hữu cácphương
phươngthức
thứcgiống
được nhau.
liên kết
Vívới
dụ,chúng và nào
một lúc mọiđó
đốibạn
tượng
có thể muốn đưa ra lời mời cho một bữa tiệc. Bạn có thể đặt tên cho phương thức là issueInvitations () , 431
và nó có thể hiển thị một số văn bản cũng như giá trị của các trường ngày và giờ của bên. Của bạn
bữa tiệc tốt nghiệp, sau đó, có thể được đặt tên là myGraduationParty . Là đối tượng của giai cấp Đảng ,
nó có thể có các thành viên dữ liệu cho ngày và giờ, giống như tất cả các bên và nó có thể có một phương thức để
phát hành lời mời. Khi bạn sử dụng phương pháp này, bạn có thể muốn gửi một đối số
to issueInvitations () cho biết cần in bao nhiêu bản. Khi bạn nghĩ về một
đối tượng và các phương thức của nó, giống như thể bạn có thể gửi một thông điệp đến đối tượng để hướng nó đến
hoàn thành một nhiệm vụ cụ thể — bạn có thể yêu cầu đối tượng bên có tên myGraduationParty để in
số lượng lời mời bạn yêu cầu. Mặc dù yourAnniversaryParty cũng là một ví dụ
của lớp Đảng và mặc dù nó cũng có quyền truy cập vào phương thức issueInvitations () ,
bạn sẽ gửi một giá trị đối số khác tới yourAnniversaryParty ’s issueInvitations ()
phương thức mà tôi gửi tới phương thức tương ứng của myGraduationParty . Trong một hướng đối tượng
chương trình, bạn liên tục thực hiện các yêu cầu đối với các phương thức của một đối tượng, thường bao gồm các đối số
như một phần của những yêu cầu đó.
Trong ngữ pháp, một danh từ tương đương với một đối tượng và giá trị của các thuộc tính của một lớp là tính từ — chúng
mô tả đặc điểm của các đối tượng. Một đối tượng cũng có thể có các phương thức, tương đương với động từ.
Khi bạn lập trình bằng ngôn ngữ hướng đối tượng, bạn thường xuyên tạo các lớp từ đó
các đối tượng sẽ được khởi tạo. Bạn cũng viết ứng dụng để sử dụng các đối tượng, cùng với
dữ liệu và phương pháp. Thông thường, bạn sẽ viết các chương trình sử dụng các lớp do người khác tạo ra; lúc khác
lần, bạn có thể tạo một lớp mà các lập trình viên khác sẽ sử dụng để khởi tạo các đối tượng bên trong
các chương trình của riêng họ. Một chương trình hoặc lớp khởi tạo các đối tượng của một lớp viết sẵn khác là
một máy khách lớp hoặc người dùng lớp . Ví dụ: tổ chức của bạn có thể đã có một lớp có tên
Khách hàng cóchứa các thuộc tính như tên , địa chỉ , và PhoneNumber , và bạn có thể
tạo khách hàng bao gồm mảng hàng nghìn Khách hàng . Tương tự, trong hoạt động GUI
môi trường, bạn có thể viết các ứng dụng bao gồm các thành phần viết sẵn từ các lớp
với các tên như Cửa sổ và Nút .
Tính đa hình
Thế giới thực có rất nhiều đối tượng. Hãy xem xét một cánh cửa. Một cánh cửa cần được mở và đóng lại. Bạn
mở một cánh cửa với giao diện dễ sử dụng được gọi là tay nắm cửa. Hướng đối tượng
các lập trình viên sẽ nói rằng bạn đang chuyển một thông điệp tới cánh cửa khi bạn yêu cầu nó mở
xoay núm của nó. Thông báo tương tự (xoay một núm) có kết quả khác khi áp dụng cho
đài của bạn so với khi áp dụng cho một cánh cửa. Như được mô tả trong Hình 10-2, quy trình bạn sử dụng để
mở một cái gì đó — gọi đó là quy trình “mở” — hoạt động trên một cánh cửa khác với trên
ngăn bàn, tài khoản ngân hàng, tập tin máy tính, hoặc đôi mắt của bạn. Tuy nhiên, mặc dù
các thủ tục này hoạt động khác nhau bằng cách sử dụng các đối tượng khác nhau, bạn có thể gọi từng
thủ tục "mở."
Trang 6
mở()
432
Trong các lớp trong chương trình hướng đối tượng, bạn có thể tạo nhiều phương thức với cùng một
tên, sẽ hoạt động khác nhau và phù hợp khi được sử dụng với các loại đối tượng khác nhau. Trong
Chương 9, bạn đã học được rằng khái niệm này được gọi là đa hình và bạn đã học cách nạp chồng
các phương pháp. Ví dụ: bạn có thể sử dụng một phương thức có tên print () để in hoá đơn của khách hàng,
đơn xin vay, hoặc phong bì. Bởi vì bạn sử dụng cùng một tên phương pháp để mô tả
các hành động cần thiết để in các đối tượng đa dạng này, bạn có thể viết các câu lệnh theo hướng đối tượng
ngôn ngữ lập trình giống tiếng Anh hơn; bạn có thể sử dụng cùng một tên phương pháp để
mô tả cùng một loại hành động, bất kể loại đối tượng nào đang được tác động. Sử dụng
methodname print () dễ dàng hơn đánh số printInvoice () , printLoanApplication () ,
và như thế. Ngôn ngữ hướng đối tượng hiểu các động từ trong ngữ cảnh, giống như mọi người.
Một ví dụ khác về lợi ích của việc sử dụng một tên cho nhiều đối tượng, hãy xem xét một màn hình
bạn có thể thiết kế để người dùng nhập dữ liệu vào ứng dụng bạn đang viết. Giả sử rằng
màn hình chứa nhiều đối tượng — một số biểu mẫu, nút, thanh cuộn, hộp thoại, v.v.
Cũng giả sử rằng bạn quyết định làm cho tất cả các đối tượng có màu xanh lam. Thay vì phải ghi nhớ
tên phương thức mà các đối tượng này sử dụng để thay đổi màu — có lẽ là changeFormColor () ,
changeButtonColor () ,
và sắp tới — công việc của bạn sẽ dễ dàng hơn nếu bộ tạo của tất cả các đối tượng đó có
đã phát triển một phương thức setColor () hoạt động phù hợp với từng loại đối tượng.
Những người theo chủ nghĩa thuần túy tìm thấy một sự khác biệt tinh tế giữa quá tải và đa hình. Một số bảo lưu thời hạn
đa hình (hoặc đa hình thuần túy ) cho các tình huống trong đó một phần thân phương pháp được sử dụng với nhiều loại
tranh luận. Ví dụ, một phương thức duy nhất có thể được sử dụng với bất kỳ loại đối tượng nào là đa hình. Thời hạn
nạp chồng được áp dụng cho các tình huống trong đó bạn xác định nhiều phương thức với một tên duy nhất — ví dụ:
ba phương thức, tất cả đều có tên là display (), hiển thị một số, một nhân viên và một học sinh, tương ứng.
Chắc chắn, hai thuật ngữ có liên quan với nhau; cả hai đều đề cập đến khả năng sử dụng một tên duy nhất để liên lạc với nhiều
ý nghĩa. Bây giờ, hãy nghĩ về quá tải như một kiểu đa hình nguyên thủy.
Trang 7
Di sản
Một khái niệm quan trọng khác trong lập trình hướng đối tượng là kế thừa , là
quá trình tiếp thu những nét của người đi trước. Trong thế giới thực, một cánh cửa mới với
cửa sổ kính màu thừa hưởng hầu hết các đặc điểm của nó từ một cửa tiêu chuẩn. Nó có cùng mục đích,
nó mở và đóng theo cùng một cách, và nó có cùng một núm và bản lề. Như hình 10-3 433
cho thấy, cánh cửa với cửa sổ kính màu chỉ đơn giản có một đặc điểm bổ sung — cửa sổ của nó.
Ngay cả khi bạn chưa bao giờ nhìn thấy một cánh cửa có cửa sổ kính màu, bạn cũng biết nó là gì và như thế nào
để sử dụng nó vì bạn hiểu các đặc điểm của tất cả các cửa. Với hướng đối tượng
lập trình, khi bạn tạo một đối tượng, bạn có thể phát triển các đối tượng mới có tất cả
đặc điểm của đối tượng ban đầu cộng với bất kỳ đặc điểm mới nào mà bạn mong muốn. Nếu bạn phát triển lớp CustomerBill
của các đối tượng, không cần phải phát triển lớp OverdueCustomerBill từ đầu. Bạn có thể
tạo lớp mới để chứa tất cả các đặc điểm của lớp đã được phát triển và đơn giản là
bổ sung các đặc điểm mới cần thiết. Điều này không chỉ làm giảm công việc liên quan đến việc tạo mới
đối tượng, điều này làm cho chúng dễ hiểu hơn vì chúng sở hữu hầu hết các đặc điểm
của các đối tượng đã được phát triển.
Một ví dụ về sự kế thừa: Một cánh cửa với một cửa sổ kính màu
kế thừa tất cả các thuộc tính và phương thức của một cửa.
Đóng gói
Các đối tượng trong thế giới thực thường sử dụng tính năng đóng gói và ẩn thông tin. Đóng gói là
quá trình kết hợp tất cả các thuộc tính và phương thức của một đối tượng thành một gói duy nhất; các
gói bao gồm dữ liệu thường bị ẩn khỏi các lớp bên ngoài cũng như các phương thức
có sẵn cho các lớp bên ngoài để truy cập và thay đổi dữ liệu. Ẩn thông tin là khái niệm
rằng các lớp khác không được thay đổi thuộc tính của đối tượng — chỉ các phương thức của riêng đối tượng
lớp nên có đặc quyền đó. (Khái niệm này còn được gọi là ẩn dữ liệu .) Bên ngoài các lớp
chỉ nên được phép đưa ra yêu cầu thay đổi một thuộc tính; sau đó nó là vào
các phương thức của lớp để xác định xem yêu cầu có phù hợp hay không. Khi sử dụng cửa, bạn
thường không quan tâm đến kết cấu chốt hoặc bản lề và bạn không có quyền truy cập vào
Trang 8
hoạt động bên trong của núm. Bạn chỉ quan tâm đến chức năng và giao diện,
ranh giới thân thiện giữa người dùng và các cơ chế bên trong của thiết bị. Khi bạn
xoay núm cửa, bạn đang tương tác một cách thích hợp với giao diện. Đập vào núm
sẽ là một tương tác không phù hợp, vì vậy cửa sẽ không phản hồi. Tương tự, chi tiết
hoạt động của các đối tượng bạn tạo trong các chương trình hướng đối tượng có thể bị ẩn khỏi bên ngoài
434 các chương trình và mô-đun nếu cần thiết và các phương thức bạn viết có thể kiểm soát cách các đối tượng
vận hành. Khi các chi tiết được ẩn, các lập trình viên có thể tập trung vào chức năng và
giao diện, như mọi người làm với các đối tượng trong cuộc sống thực.
Tóm lại, hiểu được lập trình hướng đối tượng có nghĩa là bạn phải xem xét năm
các thành phần tích hợp của nó: lớp, đối tượng, đa hình, kế thừa và đóng gói.
Tham khảo nhanh 10-1 minh họa các thành phần này.
THAM KHẢO NHANH 10-1 Các thành phần của lập trình hướng đối tượng
Tính đa hình
các phương pháp có cùng tên hoạt động
thích hợp cho loại đối tượng
Trang 9
1. Học về lập trình hướng đối tượng rất khó vì nó không sử dụng 435
các khái niệm bạn đã biết, chẳng hạn như khai báo biến và sử dụng mô-đun.
2. Trong thuật ngữ hướng đối tượng, một lớp mô tả một nhóm hoặc tập hợp các đối tượng
với các thuộc tính chung; một thể hiện của một lớp là một đối tượng hiện có của một lớp.
3. Một chương trình hoặc lớp khởi tạo các đối tượng của một lớp được viết trước khác là một lớp
khách hàng hoặc người dùng lớp.
Khi bạn khai báo một biến đơn giản là kiểu dữ liệu dựng sẵn, bạn viết một câu lệnh chẳng hạn như
một trong những điều sau đây:
số tiền
tên chuỗi
436 Khi bạn viết một chương trình khai báo một đối tượng là kiểu dữ liệu lớp, bạn viết
như sau:
Nhân viên myAssistant
Trong một số ngôn ngữ lập trình hướng đối tượng, bạn cần thêm nhiều hơn vào câu lệnh khai báo để
thực sự tạo một đối tượng Nhân viên. Ví dụ, trong Java, bạn sẽ viết:
Bạn sẽ hiểu thêm về định dạng của câu lệnh này khi bạn tìm hiểu về các hàm tạo trong Chương 11.
Khi bạn khai báo đối tượng myAssistant , nó chứa tất cả các trường dữ liệu và có quyền truy cập vào tất cả
các phương thức chứa trong lớp của nó. Nói cách khác, một phần bộ nhớ lớn hơn được dành riêng
so với khi bạn khai báo một biến đơn giản, vì một Nhân viên chứa nhiều trường. Bạn
có thể sử dụng bất kỳ phương thức nào của Nhân viên với đối tượng myAssistant . Cú pháp thông thường là
cung cấp tên đối tượng, dấu chấm (dấu chấm) và tên phương thức có dấu ngoặc đơn và có thể
danh sách đối số. Ví dụ: bạn có thể viết một chương trình có chứa các câu lệnh như
được hiển thị trong Hình 10-4.
khởi đầu
Tuyên bố
Nhân viên myAssistant
myAssistant.setLastName ("Reynolds")
myAssistant.setHourlyWage (16,75)
Hình 10-4 Ứng dụng khai báo và sử dụng đối tượng Employee
© 2015 Cengage Learning
Đoạn chương trình trong Hình 10-4 rất ngắn. Trong một chương trình thực tế hữu ích hơn, bạn có thể đọc
dữ liệu nhân viên từ tệp dữ liệu trước khi gán nó vào các trường của đối tượng, mỗi Nhân viên có thể chứa
hàng chục trường và ứng dụng của bạn có thể tạo ra hàng trăm hoặc hàng nghìn đối tượng.
Bên cạnh việc đề cập đến Employee như một lớp, nhiều lập trình viên sẽ đề cập đến nó như một loại do người dùng xác định ,
nhưng một thuật ngữ chính xác hơn là kiểu do lập trình viên xác định. Một lớp mà từ đó các đối tượng được khởi tạo là
kiểu dữ liệu của các đối tượng của nó. Các lập trình viên hướng đối tượng thường đề cập đến một lớp như Employee như một lớp trừu tượng
kiểu dữ liệu (ADT); thuật ngữ này ngụ ý rằng dữ liệu của kiểu là riêng tư và chỉ có thể được truy cập thông qua các phương thức. Bạn
tìm hiểu về dữ liệu cá nhân ở phần sau của chương này.
Trang 11
Khi bạn viết một câu lệnh chẳng hạn như myAssistant.setHourlyWage (16.75) , bạn đang thực hiện một
gọi đến một phương thức được chứa trong lớp Employee . Bởi vì myAssistant là một
Đối tượng Employee , nó được phép sử dụng phương thức setHourlyWage () là một phần của lớp nó. Bạn
có thể cho biết từ cuộc gọi phương thức rằng setHourlyWage () phải chấp nhận một tham số số.
Khi bạn viết ứng dụng trong Hình 10-4, bạn không cần biết các câu lệnh là gì
437
được viết trong các phương thức của lớp Nhân viên , mặc dù bạn có thể đưa ra một phỏng đoán có học thức
dựa trên tên phương thức. Trước khi bạn có thể thực thi ứng dụng trong Hình 10-4,
ai đó sẽ phải viết các câu lệnh thích hợp trong các phương thức của lớp Employee . Nếu
bạn đã viết các phương thức, tất nhiên bạn sẽ biết nội dung của chúng, nhưng nếu một lập trình viên khác
đã viết sẵn các phương thức, bạn có thể sử dụng ứng dụng mà không cần biết chi tiết
chứa trong các phương thức. Để sử dụng các phương pháp, bạn chỉ cần biết tên của chúng,
danh sách tham số và kiểu trả về.
Trong Chương 9, bạn đã học được rằng khả năng sử dụng các phương thức như một hộp đen mà không biết
nội dung là một tính năng của đóng gói. Thế giới thực có rất nhiều thiết bị hộp đen. Đối với
ví dụ, bạn có thể sử dụng tivi và lò vi sóng mà không biết chúng hoạt động như thế nào
nội bộ — tất cả những gì bạn cần hiểu là giao diện. Tương tự, với các phương pháp được viết tốt
thuộc về các lớp bạn sử dụng, bạn không cần hiểu cách chúng hoạt động nội bộ để có thể
sử dụng chúng; bạn chỉ cần hiểu kết quả cuối cùng khi bạn sử dụng chúng.
Trong phân đoạn chương trình khách hàng trong Hình 10-4, trọng tâm là đối tượng — Nhân viên
được đặt tên là myAssistant —và các phương thức bạn có thể sử dụng với đối tượng đó. Đây là bản chất của
lập trình hướng đối tượng.
Trong các ngôn ngữ lập trình hướng đối tượng cũ hơn, các số và ký tự đơn giản được cho là nguyên thủy
Loại dữ liệu; điều này phân biệt chúng với các đối tượng là các loại lớp. Trong chương trình mới nhất
ngôn ngữ, mọi mục bạn đặt tên, ngay cả mục là kiểu số hoặc chuỗi, đều là đối tượng được tạo từ một lớp
xác định cả dữ liệu và phương thức.
Khi bạn khởi tạo các đối tượng, các trường dữ liệu của chúng được lưu trữ tại các vị trí bộ nhớ riêng biệt. Tuy nhiên, tất cả các đối tượng
của cùng một lớp chia sẻ một bản sao các phương thức của lớp. Bạn sẽ tìm hiểu thêm về khái niệm này ở phần sau
chương.
Tạo sơ đồ lớp
Một sơ đồ lớp bao gồm một hình chữ nhật được chia thành ba phần, như thể hiện trong hình 10-5.
Phần trên cùng chứa tên của lớp, phần giữa chứa tên và dữ liệu
các loại thuộc tính và phần dưới cùng bao gồm các phương thức. Sơ đồ lớp chung này
hiển thị hai thuộc tính và ba phương thức, nhưng một lớp nhất định có thể có bất kỳ số lượng thuộc tính nào
hoặc các phương pháp, bao gồm không có. Các lập trình viên thường sử dụng một biểu đồ lớp để lập kế hoạch hoặc minh họa lớp
đặc trưng. Biểu đồ lớp cũng hữu ích để mô tả một lớp cho những người không lập trình.
Hình 10-6 cho thấy sơ đồ lớp cho lớp Nhân viên . Theo quy ước, một sơ đồ lớp
liệt kê tên của các mục dữ liệu trước tiên; mỗi tên được theo sau bởi dấu hai chấm và kiểu dữ liệu.
Tên phương thức được liệt kê tiếp theo và mỗi tên được theo sau bởi kiểu dữ liệu của nó (kiểu trả về). Liệt kê
tên đầu tiên và kiểu dữ liệu cuối cùng nhấn mạnh mục đích của các trường và phương thức.
Trang 12
Nhân viên
lastName: string
hàng giờ
WeekPay: num
Tên lớp
438
setLastName (name: string): void
Thuộc tính1: dataType
setHourlyWage (lương: num): void
Thuộc tính2: dataType
getLastName (): chuỗi
Method1 (): dataType getHourlyWage (): num
Method2 (): dataType getWeeklyPay (): num
Method3 (): dataType tính toánWeeklyPay (): void
Hình 10-5 Biểu đồ lớp chung Hình 10-6 Biểu đồ lớp nhân viên
© 2015 Cengage Learning © 2015 Cengage Learning
Biểu đồ lớp là một loại biểu đồ Ngôn ngữ Mô hình Hợp nhất (UML). Chương 13 trình bày về UML.
Một số nhà phát triển thích chèn từ void vào trong dấu ngoặc đơn của các phương thức được liệt kê trong sơ đồ lớp
khi các phương thức không có danh sách tham số. Ví dụ: khoảng trống có thể được chèn vào giữa
dấu ngoặc đơn trong getLastName () trong sơ đồ lớp trong Hình 10-6. Chèn khoảng trống cho thấy rằng một
danh sách tham số không vô tình bị bỏ qua. Bạn nên tuân theo các quy ước của tổ chức của bạn.
Hình 10-5 và 10-6 đều cho thấy rằng một sơ đồ lớp chỉ nhằm mục đích tổng quan về
các thuộc tính và phương thức của lớp. Biểu đồ lớp hiển thị các mục dữ liệu và phương thức của lớp
sẽ sử dụng, không phải chi tiết của các phương pháp cũng như khi nào chúng sẽ được sử dụng. Nó là một công cụ thiết kế giúp
bạn nhìn thấy bức tranh lớn về các yêu cầu của lớp học. Hình 10-6 cho thấy lớp Nhân viên
chứa ba trường dữ liệu đại diện cho tên của nhân viên, mức lương hàng giờ và hàng tuần
Số tiền trả. Mọi đối tượng Employee được tạo trong một chương trình sử dụng lớp này sẽ chứa các
ba trường dữ liệu. Nói cách khác, khi bạn khai báo một đối tượng Employee , khai báo đơn
câu lệnh phân bổ đủ bộ nhớ để chứa cả ba trường.
Hình 10-6 cũng cho thấy rằng lớp Employee chứa sáu phương thức. Ví dụ, đầu tiên
phương pháp được định nghĩa như sau:
setLastName (name: string): void
Ký hiệu này có nghĩa là tên phương thức là setLastName () , nó nhận một chuỗi đơn
Nhiều sách, trang web và tổ chức khác nhau sử dụng sơ đồ lớp mô tả các phương pháp theo những cách khác nhau.
Ví dụ: một số nhà phát triển chỉ sử dụng tên phương thức và những người khác bỏ qua danh sách tham số. Cuốn sách này sẽ
thực hiện phương pháp tiếp cận đầy đủ nhất có thể, vì vậy các sơ đồ lớp bạn thấy ở đây sẽ chứa từng
định danh của phương thức, danh sách tham số với các kiểu và kiểu trả về.
Trang 13
Các nhân viên chương trình sơ đồ lớp rằng hai trong số sáu phương pháp lấy thông số
( setLastName () và setHourlyWage () ). Biểu đồ cũng hiển thị kiểu trả về cho mỗi
phương thức — ba phương thức void, hai phương thức số và một phương thức chuỗi. Lớp
sơ đồ không chỉ ra những gì diễn ra bên trong phương thức, mặc dù bạn có thể
thực hiện một phỏng đoán có học. Sau đó, khi bạn viết mã thực sự tạo ra Nhân viên
lớp, bạn bao gồm các chi tiết triển khai phương thức. Ví dụ, Hình 10-7 cho thấy một số 439
mã giả mà bạn có thể sử dụng để liệt kê các chi tiết cho các phương thức trong lớp Nhân viên .
string getLastName ()
trả lại lastName
num getHourlyWage ()
trả lại hàng giờ
num getWeeklyPay ()
trả lại hàng tuần
void tínhWeeklyPay ()
Tuyên bố
num WORK_WEEK_HOURS = 40
weekPay = hourlyWage * WORK_WEEK_HOURS
trở về
endClass
Hình 10-7 Mã giả cho lớp Nhân viên được mô tả trong biểu đồ lớp ở Hình 10-6
© 2015 Cengage Learning
Trong Hình 10-7, các thuộc tính lớp Nhân viên được xác định với một kiểu dữ liệu và một tên trường.
Ngoài việc liệt kê các trường dữ liệu bắt buộc, hình này cho thấy các phương pháp hoàn chỉnh cho
Tầng lớp công nhân viên . Mục đích của các phương pháp có thể được chia thành ba loại:
Hai trong số các phương pháp chấp nhận các giá trị từ thế giới bên ngoài; những phương pháp này, theo quy ước,
đặt tiền tố. Các phương thức này được sử dụng để thiết lập các trường dữ liệu trong lớp.
Trang 14
Ba trong số các phương pháp gửi dữ liệu ra thế giới bên ngoài; những phương pháp này, theo quy ước, có
tiền tố get. Các phương thức này trả về giá trị trường cho một chương trình khách.
Một phương thức thực hiện công việc trong lớp; phương thức này được đặt tên là CalculWeeklyPay () .
Phương pháp này không giao tiếp với bên ngoài; mục đích của nó là nhân lên hàng giờ
440
theo số giờ trong một tuần.
Trong phương thức này, một tên chuỗi được chuyển vào dưới dạng tham số và được gán cho trường lastName .
Bởi vì lastName được chứa trong cùng một lớp với phương thức này, phương thức có quyền truy cập vào
trường và có thể thay đổi nó.
Tương tự, phương thức setHourlyWage () chấp nhận một tham số số và gán nó cho
trường lớp hourlyWage . Phương thức này cũng gọi phương thức CalculWeeklyPay () , phương thức này thiết lập
Thanh toán hàng tuần dựa
trên Mức lương theo giờ . Bằng cách viết phương thức setHourlyWage () để gọi
tự động tính toán phương thức allowWeeklyPay () , bạn đảm bảo rằng trường weekPay là
cập nhật bất cứ lúc nào hourlyWage thay đổi.
Khi bạn tạo một đối tượng Employee với một tuyên bố, chẳng hạn như Employee mySecretary , bạn
có thể sử dụng các câu lệnh như sau:
mySecretary.setLastName ("Johnson")
mySecretary.setHourlyWage (15.00)
Thay vì các hằng số theo nghĩa đen, bạn có thể truyền các biến hoặc các hằng được đặt tên cho các phương thức như
miễn là chúng là kiểu dữ liệu chính xác. Ví dụ: nếu bạn viết một chương trình mà bạn
thực hiện khai báo sau, khi đó phép gán trong câu lệnh tiếp theo là hợp lệ.
Tuyên bố
num PAY_RATE_TO_START = 8,00
mySecretary.setHourlyWage (PAY_RATE_TO_START)
Trong một số ngôn ngữ — ví dụ: Visual Basic và C # —bạn có thể tạo thuộc tính thay vì tạo
phương pháp thiết lập. Sử dụng thuộc tính cung cấp một cách để đặt giá trị trường bằng cú pháp đơn giản hơn. Theo quy ước, nếu a
trường lớp là Giờ theo giờ, thuộc tính của nó sẽ là Giờ theo giờ và trong một chương trình, bạn có thể tạo
tuyên bố tương tự như mySecretary.HourlyWage = PAY_RATE_TO_START. Việc thực hiện
của thuộc tính HourlyWage (với chữ cái đầu viết hoa) sẽ được viết ở định dạng rất giống với
của phương thức setHourlyWage ().
Trang 15
Giống như các phương thức khác, các phương thức thao tác với các trường trong một lớp có thể chứa bất kỳ
tuyên bố bạn cần. Ví dụ: một phương thức setHourlyWage () phức tạp hơn
đầu vào xác nhận có thể được viết, như trong Hình 10-8. Trong phiên bản này, tiền lương được chuyển cho
phương thức được kiểm tra dựa trên các giá trị tối thiểu và tối đa, và được gán cho trường lớp
hourlyWage chỉkhi nó nằm trong giới hạn quy định. Nếu mức lương quá thấp, MINWAGE
giá trị được thay thế và nếu mức lương quá cao, giá trị MAXWAGE sẽ được thay thế. 441
Tương tự, nếu các phương thức được thiết lập trong một lớp yêu cầu chúng, các phương thức có thể chứa đầu ra
câu lệnh, vòng lặp, khai báo mảng hoặc bất kỳ câu lệnh lập trình hợp pháp nào khác. Tuy nhiên, nếu
mục đích chính của một phương thức không phải là đặt giá trị trường, vì vậy để rõ ràng phương thức phải
không được đặt tên với tiền tố đã đặt.
num getHourlyWage ()
trả lại hàng giờ
num getWeeklyPay ()
trả lại hàng tuần
9/7/2021 Lập trình hướng đối tượng
Trang 16
Mỗi phương thức này chỉ trả về giá trị trong trường được liên kết với tên phương thức.
Giống như các phương thức set, bất kỳ phương thức get nào trong số này cũng có thể chứa các câu lệnh phức tạp hơn như
cần thiết. Ví dụ: trong một lớp phức tạp hơn, bạn có thể trả lại mức lương theo giờ của một
chỉ nhân viên nếu người dùng cũng đã chuyển một mã truy cập thích hợp cho phương thức, hoặc bạn
có thể trả lại giá trị trả hàng tuần dưới dạng một chuỗi có đính kèm ký hiệu đô la thay vì dưới dạng
442 giá trị số. Khi bạn khai báo một đối tượng Employee chẳng hạn như Employee mySecretary , bạn
sau đó có thể thực hiện các câu lệnh trong một chương trình tương tự như sau:
Tuyên bố
string staffName
workerName = mySecretary.getLastName ()
đầu ra "Wage is", mySecretary.getHourlyWage ()
đầu ra "Thanh toán cho nửa tuần là", mySecretary.getWeeklyPay () * 0,5
Nói cách khác, giá trị được trả về từ một phương thức get có thể được sử dụng như bất kỳ biến nào khác của nó
loại sẽ được sử dụng. Bạn có thể gán giá trị cho một biến khác, hiển thị nó, thực hiện
số học với nó hoặc thực hiện bất kỳ câu lệnh nào khác hoạt động chính xác với
loại dữ liệu.
Trong một số ngôn ngữ — ví dụ: Visual Basic và C # —trước khi tạo phương thức get, bạn có thể thêm
các câu lệnh cho thuộc tính để trả về một giá trị bằng cách sử dụng cú pháp đơn giản hơn. Ví dụ: nếu bạn đã tạo
Thuộc tính HourlyWage, bạn có thể viết một chương trình có chứa đầu ra câu lệnh mySecretary.
Lương theo giờ.
Không có giá trị nào cần được chuyển vào phương thức này và không có giá trị nào được trả về từ nó vì
phương pháp không giao tiếp với thế giới bên ngoài. Thay vào đó, phương thức này chỉ được gọi là
từ một phương thức khác trong cùng một lớp ( phương thức setHourlyWage () ) và phương thức đó là
được gọi từ thế giới bên ngoài. Mỗi khi một chương trình sử dụng phương thức setHourlyWage () để
thay đổi trường Mức lương theo giờ của Nhân viên , CalculatedWeeklyPay () được gọi để tính toán lại
trường WeekPay . Không có phương thức setWeeklyPay () nào được bao gồm trong lớp Nhân viên này vì
ý định là weekPay chỉ được đặt bên trong phương thức CalculWeeklyPay () mỗi lần
các setHourlyWage () phương pháp gọi nó. Nếu bạn muốn các chương trình để có thể thiết lập các weeklyPay
trực tiếp, bạn sẽ phải viết một phương thức để cho phép nó.
Trang 17
Các lập trình viên chưa quen với việc tạo lớp thường muốn chuyển giá trị hàng giờ vào
Phương thức mathWeeklyPay () để nó có thể sử dụng giá trị trong phép tính của nó. Mặc dù kỹ thuật này
sẽ hoạt động, nó không bắt buộc. Phương thức CalculWeeklyPay () có quyền truy cập trực tiếp vào
lĩnh vực tiền lương theo giờ do là thành viên của cùng một lớp.
Ví dụ, Hình 10-9 cho thấy một chương trình khai báo một đối tượng Nhân viên và thiết lập 443
giá trị tiền lương. Theprogramdisplaysthe weeklyPay value.Then anewvalueis assignedto hourlyWage ,
và weekPay được hiển thị lại. Như bạn có thể thấy từ kết quả trong Hình 10-10, WeekPay
giá trị đã được tính toán lại mặc dù nó chưa bao giờ được đặt trực tiếp bởi chương trình khách hàng.
khởi đầu
Tuyên bố
num LOW = 9,00
num CAO = 14,65
Nhân viên myGardener
myGardener.setLastName ("Greene")
myGardener.setHourlyWage (THẤP)
đầu ra "Người làm vườn của tôi làm",
myGardener.getWeeklyPay (), "mỗi tuần"
myGardener.setHourlyWage (CAO)
đầu ra "Người làm vườn của tôi làm",
myGardener.getWeeklyPay (), "mỗi tuần"
dừng lại
Hình 10-9 Chương trình thiết lập và hiển thị dữ liệu Nhân viên hai lần
© 2015 Cengage Learning
2. Sau khi một đối tượng đã được khởi tạo, các phương thức của nó có thể được truy cập bằng cách sử dụng
mã định danh của đối tượng, một dấu chấm và một lệnh gọi phương thức.
3. Sơ đồ lớp bao gồm một hình chữ nhật được chia thành ba phần; đỉnh
phần chứa tên của lớp, phần giữa chứa tên
và kiểu dữ liệu của các thuộc tính và phần dưới cùng chứa các phương thức.
. I màu
yêu
đỏcầu
Làcô ấy
neit ough alth ods, meth và dữ liệuaintiếp sses mệnh
Phần
đề lớn
# 1. Làent vật tổest giả dối
Các
Hình 10-11 cho thấy một lớp Nhân viên hoàn chỉnh mà các chỉ định truy cập đã được thêm vào
mô tả từng thuộc tính và phương thức. Công cụ xác định quyền truy cập là tính từ xác định loại
truy cập ( công khai hoặc riêng tư) các lớp bên ngoài sẽ phải thuộc tính hoặc phương thức. bên trong
hình, mỗi thông số truy cập được tô bóng.
Trang 19
trở về
public void setHourlyWage (số lương)
giờ lương = tiền lương
tính toánWeeklyPay ()
trở về
Hình 10-11 Lớp nhân viên bao gồm các chỉ định truy cập công cộng và riêng tư
© 2015 Cengage Learning
Trong nhiều ngôn ngữ lập trình hướng đối tượng, nếu bạn không khai báo mã định danh truy cập cho trường dữ liệu hoặc
, thì nó là riêng tư theo mặc định. Cuốn sách này sẽ tuân theo quy ước chỉ định rõ ràng quyền truy cập cho
mọi thành viên trong lớp.
Trong Hình 10-11, mỗi trường dữ liệu là riêng tư, có nghĩa là mỗi trường không thể truy cập được đối với
đối tượng được khai báo trong một chương trình. Nói cách khác, nếu một chương trình khai báo một đối tượng Employee ,
với tư cách là Employee myAssistant , sau đó là
tuyên bố là bất hợp pháp: Đừng làm điều đó
Bạn không thể chỉ định trực tiếp
myAssistant.hourlyWage = 15,00
một giá trị cho một dữ liệu riêng tư
trường từ bên ngoài lớp của nó.
Thay vào đó, chỉ có thể chỉ định Mức lương theo giờ
thông qua một phương thức công khai như sau:
myAssistant.setHourlyWage (15.00)
Trang 20
Nếu bạn đặt giờ công khai thay vì riêng tư, thì một câu lệnh chuyển nhượng trực tiếp sẽ
hoạt động, nhưng bạn sẽ vi phạm nguyên tắc OOP quan trọng về việc ẩn dữ liệu bằng cách sử dụng tính năng đóng gói.
Các trường dữ liệu thường phải ở chế độ riêng tư và ứng dụng khách phải có thể truy cập chúng
chỉ thông qua các giao diện công khai — nói cách khác, thông qua các phương thức công khai của lớp. Cái đó
bằng cách này, nếu bạn có các hạn chế về giá trị của hourlyWage , những hạn chế đó sẽ được thực thi bởi
446 phương thức công cộng hoạt động như một giao diện cho trường dữ liệu riêng tư. Tương tự, công chúng nhận được
phương thức có thể kiểm soát cách một giá trị riêng tư được truy xuất. Có lẽ bạn không muốn khách hàng
được tiếp cận với một nhân viên của hourlyWage nếu nó là nhiều hơn một giá trị cụ thể, hoặc có thể bạn muốn
để trả lại tiền lương cho khách hàng dưới dạng một chuỗi có gắn ký hiệu đô la. Ngay cả khi một trường có
không có yêu cầu hoặc hạn chế về giá trị dữ liệu, đặt dữ liệu ở chế độ riêng tư và cung cấp tập hợp công khai và
phương thức get thiết lập một khuôn khổ giúp cho việc sửa đổi như vậy dễ dàng hơn trong tương lai.
Trong lớp Nhân viên trong Hình 10-11, tất cả các phương thức đều là công khai ngoại trừ một phương thức —
Phương thức mathWeeklyPay () là riêng tư. Điều đó có nghĩa là nếu bạn viết một chương trình và khai báo một
Trong một số ngôn ngữ lập trình hướng đối tượng, chẳng hạn như C ++, bạn có thể gắn nhãn một tập hợp các trường hoặc phương thức dữ liệu
dưới dạng công khai hoặc riêng tư bằng cách sử dụng tên công cụ xác định quyền truy cập chỉ một lần, sau đó theo sau nó với danh sách các mục trong đó
thể loại. Trong các ngôn ngữ khác, chẳng hạn như Java, bạn sử dụng trình xác định công khai hoặc riêng tư với mỗi trường hoặc phương thức.
Để rõ ràng, cuốn sách này sẽ gắn nhãn từng trường và phương pháp là công khai hoặc riêng tư.
Nhiều lập trình viên muốn chỉ định trong sơ đồ lớp xem mỗi thành phần trong một lớp là
công cộng hoặc tư nhân. Hình 10-12 cho thấy các quy ước thường được sử dụng. Dấu trừ
(-) đứng trước các mục riêng tư (ít truy cập hơn); dấu cộng (+) đứng trước những dấu
công khai (dễ tiếp cận hơn).
Trang 21
Nhân viên
-lastName: string
-hourlyWage: num
-weeklyPay: num 447
Hình 10-12 Biểu đồ lớp nhân viên với các chỉ định truy cập công cộng và riêng tư
© 2015 Cengage Learning
Khi bạn tìm hiểu thêm về kế thừa trong Chương 11, bạn sẽ tìm hiểu về một quyền truy cập bổ sung
specifier — trình chỉ định quyền truy cập được bảo vệ. Trong một sơ đồ lớp, bạn sử dụng một octothorpe, còn được gọi là
dấu thăng hoặc dấu số (#), để biểu thị quyền truy cập được bảo vệ.
Trong các ngôn ngữ lập trình hướng đối tượng, chương trình chính thường được viết dưới dạng một phương thức có tên
main () hoặc Main (), và phương thức đó hầu như luôn được định nghĩa là public.
1. Các lập trình viên hướng đối tượng thường chỉ định rằng các trường dữ liệu của họ sẽ có
truy cập riêng tư.
2. Các lập trình viên hướng đối tượng thường chỉ định rằng các phương thức của họ sẽ có
truy cập riêng tư.
3. Trong sơ đồ lớp, dấu trừ (-) đứng trước các mục là private;
dấu cộng (+) đứng trước những giá trị công khai.
Trang 22
1. Khi các lớp ngày càng phức tạp, việc quyết định cách tổ chức chúng trở nên
ngày càng quan trọng.
2. Bạn có sự linh hoạt đáng kể trong cách tổ chức các trường dữ liệu
trong một lớp học.
3. Trong một lớp, các phương thức phải được lưu trữ theo thứ tự mà chúng được sử dụng.
Trang 23
các sinh viên lớp. Lớp này trở thành mô hình cho một kiểu dữ liệu mới có tên là Sinh viên ; khi nào
Sinh viên đối
tượng được tạo ra cuối cùng, mỗi người sẽ có riêng của mình gradePointAverage lĩnh vực và
có quyền truy cập vào các phương pháp để lấy và thiết lập nó.
Sinh viên
-gradePointAverage: num
gradePointAverage = gpa
trở về
Nếu bạn tạo nhiều đối tượng Sinh viên bằng cách sử dụng lớp trong Hình 10-14, bạn cần một
vị trí lưu trữ trong bộ nhớ máy tính để lưu trữ điểm trung bình duy nhất của mỗi Học sinh .
Ví dụ: Hình 10-15 cho thấy một chương trình khách tạo ra ba đối tượng Sinh viên và
gán giá trị cho các trường điểm trung bình của chúng . Nó cũng cho thấy các đối tượng Student trông như thế nào
trong bộ nhớ sau khi các giá trị đã được gán.
Trang 24
Hình 10-15 Chương trình StudentDemo và cách các đối tượng Student trông như thế nào trong bộ nhớ
© 2015 Cengage Learning
Mỗi đối tượng Sinh viên trong Hình 10-15 có điểm riêng của nó là rất hợp lý
nhưng không có ý nghĩa gì đối với mỗi Học sinh khi có bản sao riêng của các phương thức
lấy và đặt điểm trung bình . Tạo các bản sao giống hệt nhau của một phương thức cho mỗi phiên bản
sẽ không hiệu quả. Thay vào đó, mặc dù tất cả các sinh viên có riêng của mình gradePointAverage
, chỉ một bản sao của mỗi phương thức getGradePointAverage () và
setGradePointAverage () được
lưu trữ trong bộ nhớ; tuy nhiên, mỗi đối tượng được khởi tạo của lớp
có thể sử dụng bản sao phương pháp duy nhất. Một phương pháp hoạt động thích hợp với các đối tượng khác nhau là
một phương thức thể hiện .
Mặc dù lớp Sinh viên chỉ chứa một bản sao của các phương thức get và set, chúng hoạt động
chính xác cho bất kỳ số lượng trường hợp nào. Do đó, các phương thức như getGradePointAverage () và
setGradePointAverage () là
các phương thức phiên bản. Bởi vì chỉ một bản sao của mỗi phiên bản
phương pháp được lưu trữ, máy tính cần một cách để xác định điểm trung bình đang được
thiết lập hoặc truy xuất khi một trong các phương thức được gọi. Cơ chế xử lý vấn đề này
được minh họa trong Hình 10-16. Khi một phương thức gọi chẳng hạn như oneSophomore.
setGradePointAverage (2.6) được
thực hiện, là lệnh gọi phương thức thực, ẩn và
được tạo tự động, bao gồm địa chỉ bộ nhớ của đối tượng oneSophomore . (Những
các lệnh gọi phương thức được biểu diễn bằng ba hộp hẹp ở giữa Hình 10-16.)
Trang 25
khởi đầu
Tuyên bố
Sinh viên một
Sinh viên một
Địa chỉ này là
Sinh viên một
được gọi là cái này 451
oneSophomore.setGradePointAverage (2.6)
tài liệu tham khảo.
oneJunior.setGradePointAverage (3.8)
oneSenior.setGradePointAverage (3.4)
dừng lại
Hình 10-16 Cách địa chỉ bộ nhớ đối tượng Student được truyền từ một ứng dụng đến một
Trong phương thức setGradePointAverage () trong lớp Sinh viên , một phương thức ẩn và
tham số được tạo tự động được thêm vào danh sách. (Đối với mục đích minh họa, thông số này
được đặt tên là aStudentAddress và được tô bóng trong định nghĩa lớp Sinh viên trong Hình 10-16. Trong
thực tế, không có tham số nào được tạo với tên đó.) Tham số này chấp nhận địa chỉ của một
Đối tượng Student vì phương thức instance thuộc về lớp Student ; nếu phương pháp này
Trang 26
thuộc về một lớp khác— Ví dụ: nhân viên — thì phương thức sẽ chấp nhận một địa chỉ
cho loại đối tượng đó. Các địa chỉ được tô bóng không được viết dưới dạng mã trong bất kỳ chương trình nào — chúng là
"Bí mật" được gửi và nhận ở hậu trường. Biến địa chỉ trong Hình 10-16 được gọi là
tài liệu tham khảo này . Một này tham khảo là một biến tự động tạo ra chứa địa chỉ của
một đối tượng và chuyển nó đến một phương thức thể hiện bất cứ khi nào phương thức này được gọi. Nó được gọi là cái này
452 tham chiếu vì nó đề cập đến “đối tượng cụ thể này” đang sử dụng phương thức vào lúc này. Trong
nói cách khác, một phương thức thể hiện nhận một tham chiếu này đến một cá thể lớp cụ thể. bên trong
ứng dụng trong Hình 10-16, khi oneSophomore sử dụng phương thức setGradePointAverage () ,
địa chỉ của đối tượng oneSophomore được chứa trong tham chiếu này . Sau đó trong
chương trình, khi đối tượng oneJunior sử dụng phương thức setGradePointAverage () , điều này
tham chiếu sẽ giữ địa chỉ của đối tượng Sinh viên đó.
Hình 10-16 hiển thị mỗi nơi này tham khảo được sử dụng trong sinh viên lớp. Nó được ngầm hiểu
được truyền dưới dạng tham số cho mỗi phương thức phiên bản. Bạn không bao giờ đề cập đến điều này một cách rõ ràng
tham chiếu khi bạn viết tiêu đề phương thức cho một phương thức thể hiện; Hình 10-16 chỉ cho thấy
nơi nó ngầm tồn tại. Trong mỗi phương thức phiên bản, tham chiếu này được ngụ ý bất kỳ
thời gian bạn tham chiếu đến một trong các trường dữ liệu lớp. Ví dụ, khi bạn gọi
setGradePointAverage () bằng
cách sử dụng đối tượng oneSophomore , lớpPointAverage được chỉ định
trong phương thức là “ this gradePointAverage ”, hoặc thuộc về
đối tượng oneSophomore . Cụm từ “này gradePointAverage ” thường được viết dưới dạng này ,
theo sau là dấu chấm, theo sau là tên trường— this.gradePointAverage .
Các này tham khảo tồn tại khắp mọi phương pháp dụ. Bạn có thể sử dụng cái này một cách rõ ràng
tham chiếu với các trường dữ liệu, nhưng nó không bắt buộc. Hình 10-17 cho thấy hai vị trí nơi
tham chiếu này có thể được sử dụng ngầm, hoặc nơi bạn có thể (nhưng không bắt buộc) sử dụng nó một cách rõ ràng.
Trong một phương thức phiên bản, hai số nhận dạng sau có nghĩa giống hệt nhau:
bất kỳ tên trường nào được xác định trong lớp
cái này , theo sau là một dấu chấm, theo sau là cùng một tên trường
Ví dụ, trong phương thức setGradePointAverage () , gradePointAverage và điều này.
điểm trung bình tham chiếu đến chính xác cùng một vị trí bộ nhớ.
Hình 10-17 Sử dụng điều này một cách rõ ràng trong lớp Sinh viên
Trang 27
Các này tham khảo có thể được sử dụng với định danh là một phần của các lớp định nghĩa-đó
là, tên trường hoặc phương thức thể hiện. Bạn không thể sử dụng nó với các biến cục bộ là các tham số
để thể hiện các phương thức hoặc được khai báo bên trong các thân phương thức. Ví dụ, trong Hình 10-17 bạn
có thể tham khảo this.gradePointAverage , nhưng bạn không thể tham khảo this.gpa vì GPA không phải là một
trường lớp — nó chỉ là một biến cục bộ.
453
Cú pháp để sử dụng điều này khác nhau giữa các ngôn ngữ lập trình. Ví dụ: trong một lớp trong C ++, bạn
có thể tham chiếu đến giá trị Điểm trung bình của lớp Sinh viên như sau-> Điểm trung bình hoặc
(* this) .gradePointAverage, nhưng trong Java, bạn gọi nó là this.gradePointAverage. Trực quan
Về cơ bản, tham chiếu này được đặt tên là Tôi, vì vậy biến sẽ là Me.gradePointAverage.
Thông thường, bạn không cần phải sử dụng tham chiếu này một cách rõ ràng trong các phương thức bạn viết,
nhưng này tham chiếu là luôn luôn ở đó, làm việc đằng sau hậu trường, tiếp cận lĩnh vực dữ liệu cho
đối tượng chính xác.
Tổ chức của bạn có thể muốn bạn sử dụng tài liệu tham khảo này một cách rõ ràng mặc dù nó không
cần thiết để tạo một chương trình khả thi. Lập trình viên có trách nhiệm tuân theo các quy ước
được thành lập tại nơi làm việc hoặc bởi khách hàng.
Để làm ví dụ về thời điểm bạn có thể sử dụng tham chiếu này một cách rõ ràng, hãy xem xét những điều sau
phương thức setGradePointAverage () và so sánh nó với phiên bản trong lớp Sinh viên trong
Hình 10-17.
public void setGradePointAverage (num gradePointAverage)
this.gradePointAverage = gradePointAverage
trở về
Trong phiên bản này của phương pháp, lập trình viên đã sử dụng cấp định danhPointAverage
vừa là tham số cho phương thức vừa là trường cá thể trong lớp. Vì thế,
gradePointAverage là
tên của một biến cục bộ trong phương thức có giá trị được nhận
bằng cách đi qua; nó cũng là tên của một trường lớp. Để phân biệt cả hai, bạn sử dụng
tham chiếu này với bản sao của lớpPointAverage là một thành viên của lớp. Bỏ sót
các này tham khảo trong trường hợp này sẽ cho kết quả trong địa phương tham số gradePointAverage phúc
được gán cho chính nó, và biến thể hiện của lớp sẽ không được đặt. Bất kỳ lúc nào một biến cục bộ
trong một phương thức có cùng định danh với một trường, trường bị ẩn; bạn phải sử dụng cái này
tham chiếu để phân biệt trường với biến cục bộ.
25/41
9/7/2021 Lập trình hướng đối tượng
Trang 28
454 1. Một phương thức phiên bản hoạt động chính xác nhưng khác nhau cho từng
thể hiện của một lớp.
2. Một này tham chiếu là một biến bạn phải khai báo rõ ràng với mỗi lớp bạn
tạo nên.
3. Khi bạn viết một phương thức thể hiện trong một lớp, hai định danh sau trong
phương thức luôn có nghĩa giống hệt nhau: bất kỳ tên trường nào hoặc cái này
tiếp theo là một dấu chấm, tiếp theo là cùng một tên trường.
Khi bạn viết một lớp, bạn có thể chỉ ra hai loại phương thức:
Phương thức tĩnh , còn được gọi là phương thức lớp , là những phương thức mà không có đối tượng nào cần tồn tại,
như phương thức displayStudentMotto () trong Hình 10-18. Các phương thức tĩnh không nhận được một
tham chiếu này như một tham số ngầm định. Thông thường, các phương thức tĩnh bao gồm từ
static trong tiêu đề phương thức, như được hiển thị trong Hình 10-18. (Sử dụng Java, C # và C ++ 455
từ khóa tĩnh . Trong Visual Basic, từ khóa Shared được sử dụng thay cho từ khóa tĩnh .)
Phương thức không phải là phương thức tồn tại để sử dụng với một đối tượng. Những trường hợp này
các phương thức nhận một tham chiếu này đến một đối tượng cụ thể. Trong hầu hết các ngôn ngữ lập trình,
bạn sử dụng từ static khi bạn muốn khai báo một thành viên lớp static, nhưng bạn lại
không sử dụng một từ đặc biệt khi bạn muốn một thành viên trong lớp không có trạng thái bất thường. Nói cách khác,
các phương thức trong một lớp là các phương thức thể hiện không tĩnh theo mặc định.
Trong ngôn ngữ hàng ngày, từ tĩnh có nghĩa là "tĩnh"; nó đối lập với động, có nghĩa là
"thay đổi." Nói cách khác, các phương thức tĩnh luôn giống nhau cho mọi trường hợp của một lớp, trong khi
các phương thức nonstatic hoạt động khác nhau tùy thuộc vào đối tượng được sử dụng để gọi chúng.
Trong hầu hết các ngôn ngữ lập trình, bạn sử dụng một phương thức tĩnh với tên lớp (nhưng không phải
tên đối tượng), như sau:
Student.displayStudentMotto ()
Nói cách khác, không có đối tượng nào là cần thiết với một phương thức tĩnh.
Trong một số ngôn ngữ, đáng chú ý là C ++, ngoài việc sử dụng một phương thức tĩnh với tên lớp, bạn cũng có thể sử dụng
phương thức tĩnh với bất kỳ đối tượng nào của lớp, như trong oneSophomore.displayStudentMotto ().
1. Các phương thức lớp không nhận được tham chiếu này .
3. Các phương thức không theo chủ đề không nhận được tham chiếu này .
Trang 30
class InventoryItem
Tuyên bố
khoảng không quảng cáo chuỗi riêng
mô tả chuỗi riêng tư
giá num riêng
endClass
khởi đầu
Tuyên bố
InventoryItem oneItem
oneItem.setInventoryNumber ("1276")
Hình 10-20 Ứng dụng khai báo và sử dụng đối tượng InventoryItem
© 2015 Cengage Learning
Mục hàng tồn kho được khai báo trong chương trình chính trong Hình 10-20 được chuyển đến
phương thức displayItem () giống như một biến số hoặc chuỗi. Các
phương thức nhận một bản sao của InventoryItem được mục định danh cục bộ biết đến .
Trong phương thức, các giá trị trường của mục cục bộ có thể được truy xuất, hiển thị và sử dụng trong
các câu lệnh số học giống như cách mà chúng có thể có trong chương trình chính, nơi
InventoryItem ban đầu được khai báo.
đối tượng được khai báo. Đối tượng cục bộ này tập hợp và lưu giữ các giá trị đầu vào của người dùng. Người dùng là
được nhắc về mô tả và giá cả, sau đó là số mục đã chuyển và mới lấy được
mô tả và giá được gán cho đối tượng InventoryItem cục bộ thông qua các phương thức đã đặt của nó. Các
đối tượng hoàn thành được trả về chương trình, nơi nó được gán cho đối tượng InventoryItem .
Mục đó sau đó được chuyển sang phương thức displayItem () . Asinthepreviousexample, phương pháp
458 tính thuế và hiển thị kết quả. Hình 10-23 cho thấy một thực thi điển hình.
khởi đầu
Tuyên bố
InventoryItem oneItem
string itemNum
string QUIT = "0"
đầu ra "Nhập số mục hoặc", QUIT, "để thoát ..."
đầu vào itemNum
trong khi itemNum <> QUIT
oneItem = getItemValues (itemNum)
displayItem (oneItem)
đầu ra "Nhập số mục tiếp theo hoặc", QUIT, "để thoát ..."
đầu vào itemNum
cuối cùng
dừng lại
Hình 10-23 Thực hiện chương trình điển hình trong Hình 10-22
© 2015 Cengage Learning
459
Trong Hình 10-22, lưu ý rằng kiểu trả về cho phương thức getItemValues () là
Mục hàng tồn kho .
Một phương thức chỉ có thể trả về một giá trị duy nhất. Do đó, thật tiện lợi khi
Phương thức getItemValues () có thể đóng gói hai chuỗi và một số trong một
Đối tượng InventoryItem mà nó quay trở lại chương trình chính.
Bạn có thể sử dụng cùng một cú pháp để khai báo mảng đối tượng: kiểu dữ liệu (lớp), mã định danh và
kích thước trong ngoặc. Ví dụ: bạn có thể khai báo một mảng gồm bảy đối tượng InventoryItem như
sau:
Mục hàng tồn kho [7]
Trang 34
Bất kỳ phần tử mảng mục riêng lẻ nào cũng có thể được sử dụng theo cách giống như bất kỳ đối tượng đơn lẻ nào của
Loại hàng tồn kho . Ví dụ: phần tử thứ ba trong mảng có thể được chuyển cho
phương thức displayItem () trong Hình 10-22 sử dụng câu lệnh sau:
hiển thị (mục [2])
460 Toàn bộ mảng có thể được chuyển cho một phương thức xác định một mảng có kiểu chính xác là
tham số. Ví dụ, câu lệnh displayArray (items) có thể được sử dụng để gọi một phương thức
với tiêu đề sau:
public static void displayArray (danh sách InventoryItem [])
Hình 10-24 cho thấy một chương trình hoàn chỉnh khai báo bảy đối tượng InventoryItem , thiết lập
và hiển thị chúng.
Trang 35
khởi đầu
Tuyên bố
num SIZE = 7
Mục hàng tồn kho [SIZE] 461
num phụ
phụ = 0
trong khi phụ <SIZE
items [sub] = getItemValues ()
sub = sub + 1
cuối cùng
displayItems (mục, SIZE)
dừng lại
item.setPrice (giá)
trả lại hàng
Hình 10-24 Ứng dụng sử dụng một mảng các đối tượng InventoryItem
© 2015 Cengage Learning
Trang 36
Trong chương trình ở Hình 10-24, một hằng số được khai báo cho kích thước của mảng, và sau đó
mảng được khai báo. Chương trình sử dụng một trong khi vòng lặp để gọi một phương thức có tên getItemValues ()
bảy lần. Phương thức không chấp nhận tham số. Nó khai báo một đối tượng InventoryItem và
sau đó nó sẽ nhắc người dùng nhập số mặt hàng, mô tả và giá cả. Những giá trị đó là
được gán cho đối tượng InventoryItem bằng cách sử dụng các phương thức công khai của nó. Đối tượng hoàn thành sau đó là
462 quay trở lại chương trình chính, chuyển mảng và kích thước của nó đến một phương thức có tên
displayItems () hiển thị dữ liệu cho tất cả các mục.
Chương trình trong Hình 10-24 có thể đã được viết để toàn bộ mảng được chuyển cho một
phương thức để lấy dữ liệu, và sau đó một vòng lặp có thể đã được sử dụng trong phương thức. Các
chương trình cũng có thể đã được viết để phương thức hiển thị chỉ chấp nhận một
Đối tượng InventoryItem thay vì toàn bộ mảng, và sau đó nó sẽ là cần thiết để
gọi phương thức bảy lần trong một vòng lặp. Như bạn đã học trong suốt cuốn sách này, có
thường có nhiều cách để hoàn thành cùng một mục tiêu. Một hỗn hợp các phương pháp đã được sử dụng cho
chương trình trong Hình 10-24 để chứng minh cách hoạt động của cả hai cách tiếp cận.
1. Bạn có thể truyền một đối tượng cho một phương thức.
2. Vì chỉ có thể trả về một giá trị từ một phương thức, bạn không thể trả về
đối tượng chứa nhiều hơn một trường.
3. Bạn có thể khai báo cục bộ một đối tượng trong một phương thức.
Định nghĩa lớp là một tập hợp các câu lệnh chương trình liệt kê các trường và phương thức mỗi
đối tượng có thể sử dụng. Một định nghĩa lớp có thể chứa tên, dữ liệu và các phương thức. Lập trình viên
thường sử dụng biểu đồ lớp để minh họa các đặc điểm của lớp. Nhiều phương thức có trong một lớp
có thể được chia thành ba loại: phương thức thiết lập, phương thức nhận và phương thức làm việc.
Trang 37
Các lập trình viên hướng đối tượng thường chỉ định rằng các trường dữ liệu của họ sẽ có quyền truy cập riêng—
nghĩa là, dữ liệu không thể được truy cập bằng bất kỳ phương thức nào không phải là một phần của lớp. Các phương pháp
thường xuyên hỗ trợ truy cập công khai, có nghĩa là các chương trình và phương pháp khác có thể sử dụng
các phương pháp kiểm soát quyền truy cập vào dữ liệu cá nhân. Trong sơ đồ lớp, dấu trừ (-)
đứng trước mỗi mục là riêng tư; dấu cộng (+) đứng trước mỗi mục được công khai.
463
Khi các lớp ngày càng phức tạp, việc quyết định cách tổ chức chúng ngày càng trở nên
quan trọng. Tùy thuộc vào lớp, bạn có thể chọn lưu trữ các trường dữ liệu bằng cách liệt kê
trường trọng điểm đầu tiên. Bạn cũng có thể liệt kê các trường theo thứ tự bảng chữ cái, theo kiểu dữ liệu hoặc theo khả năng truy cập.
Các phương thức có thể được lưu trữ theo thứ tự bảng chữ cái hoặc theo cặp phương thức get và set.
Một phương thức thể hiện hoạt động chính xác nhưng khác nhau cho mọi đối tượng được khởi tạo từ một
lớp học. Khi một phương thức thể hiện được gọi, một tham chiếu này chứa bộ nhớ của đối tượng
địa chỉ được chuyển tự động và ngầm định cho phương thức.
Một lớp có thể chứa hai loại phương thức: phương thức tĩnh, còn được gọi là lớp
và không nhận tham chiếu này như một tham số ngầm định; và không ổn định
phương pháp, đó là phương pháp dụ và làm nhận này tham khảo ngầm.
Bạn có thể sử dụng các đối tượng theo nhiều cách giống như cách bạn sử dụng các mục có kiểu dữ liệu đơn giản hơn, chẳng hạn như
truyền chúng đến và đi từ các phương thức và tạo mảng.
Một lớp mô tả một nhóm hoặc tập hợp các đối tượng có các thuộc tính chung.
Một đối tượng là một ví dụ hữu hình của một lớp; nó là một thể hiện của một lớp.
Một cá thể là một ví dụ hữu hình của một lớp; nó là một đối tượng.
Một thuyết minh của một lớp là một thể hiện hoặc đối tượng.
Một mối quan hệ là một tồn tại giữa một đối tượng và lớp của nó.
Các biến thể hiện của một lớp là các thành phần dữ liệu thuộc về mọi đối tượng được khởi tạo.
Các trạng thái của một đối tượng là tập hợp của tất cả các giá trị hoặc nội dung của các biến cá thể của nó.
Máy khách lớp hoặc người dùng lớp là một chương trình hoặc lớp khởi tạo các đối tượng của một
lớp viết sẵn.
Trang 38
Tính đa hình thuần túy mô tả các tình huống trong đó một phương pháp được sử dụng với nhiều loại
tranh luận.
Kế thừa là quá trình tiếp thu những đặc điểm của người đi trước.
Đóng gói là quá trình kết hợp tất cả các thuộc tính và phương thức của một đối tượng thành một
464 gói đơn.
Ẩn thông tin (hoặc ẩn dữ liệu ) là khái niệm mà các lớp khác không nên thay đổi một
thuộc tính của đối tượng — chỉ các phương thức của lớp riêng của đối tượng mới có đặc quyền đó.
Một định nghĩa lớp là một tập hợp các báo cáo chương trình xác định các lĩnh vực và phương pháp cho một lớp.
Một kiểu người dùng định nghĩa , hoặc loại lập trình viên định nghĩa , là một loại không được xây dựng thành một ngôn ngữ
nhưng được tạo bởi lập trình viên của ứng dụng.
Một kiểu dữ liệu trừu tượng (ADT) là một loại lập trình viên xác định, chẳng hạn như là một lớp.
Kiểu dữ liệu nguyên thủy là các số và ký tự đơn giản không phải là kiểu lớp.
Một sơ đồ lớp bao gồm một hình chữ nhật được chia thành ba phần cho tên, dữ liệu,
và các phương thức của một lớp.
Một phương pháp thiết lập là một phương pháp dụ rằng bộ hoặc thay đổi giá trị của một trường dữ liệu định nghĩa trong một
lớp học.
Một phương pháp mutator là một phương pháp dụ rằng bộ hoặc thay đổi giá trị của một trường dữ liệu định nghĩa
trong một lớp học.
Một bất động sản cung cấp phương pháp cho phép bạn để có được và thiết lập một giá trị trường lớp bằng cách sử dụng đơn giản
cú pháp.
Một phương pháp get là một phương pháp dụ mà trả về một giá trị từ một lĩnh vực được xác định trong một lớp học.
Một phương pháp accessor là một phương pháp dụ mà trả về một giá trị từ một lĩnh vực được xác định trong một lớp học.
Một phương thức làm việc thực hiện các tác vụ trong một lớp.
Một phương pháp giúp đỡ hoặc điều phối là một phương pháp làm việc.
Quyền truy cập riêng tư chỉ định rằng dữ liệu hoặc phương thức không thể được sử dụng bởi bất kỳ phương thức nào không phải là một phần
của cùng một lớp.
Quyền truy cập công khai chỉ định rằng các chương trình và phương pháp khác có thể sử dụng dữ liệu được chỉ định hoặc
các phương thức trong một lớp.
Một chỉ định truy cập là tính từ xác định kiểu truy cập mà các lớp bên ngoài sẽ phải
thuộc tính hoặc phương thức.
Một phương thức thể hiện hoạt động chính xác nhưng khác nhau cho mỗi đối tượng. Một phương thức phiên bản là
nonstatic và ngầm nhận một tham chiếu này .
Một tài liệu tham khảo này là một biến tự động tạo ra chứa địa chỉ của một đối tượng và
chuyển nó đến một phương thức thể hiện bất cứ khi nào phương thức được gọi.
Trang 39
Phương thức tĩnh là những phương thức không có đối tượng nào cần tồn tại; chúng không phải là các phương thức thể hiện
và họ không nhận được tham chiếu này .
Một phương pháp lớp học là một phương pháp tĩnh; nó không phải là một phương pháp dụ và nó không nhận được này
tài liệu tham khảo.
Phương thức không phải là phương thức tồn tại để sử dụng với một đối tượng; họ là ví dụ 465
Bài tập
a. khách hàng c. ví dụ
b. vật d. GUI
4. Mối quan hệ giữa một thể hiện và một lớp là a (n) mối quan hệ.
a. có một c. đa hình
b. là một d. Hostile
5. Cái nào trong số này không thuộc về những cái khác?
a. biến cá thể c. cánh đồng
b. thuộc tính d. vật
6. Quá trình tiếp thu những nét của người đi trước là .
a. đa hình c. di sản
b. sự đóng gói d. sự định hướng
7. Khi thảo luận về các lớp và đối tượng, tính đóng gói có nghĩa là .
a. tất cả các trường thuộc cùng một đối tượng
b. tất cả các lĩnh vực là riêng tư
c. tất cả các trường và phương thức được nhóm lại với nhau
d. tất cả các phương pháp là công khai
https://translate.googleusercontent.com/translate_f 36/41
9/7/2021 Lập trình hướng đối tượng
Trang 40
a. cung cấp tổng quan về dữ liệu và phương thức của một lớp
b. cung cấp chi tiết triển khai phương pháp
c. không bao giờ được sử dụng bởi những người không lập trình vì nó quá kỹ thuật
d. tất cả những điều trên
12. Trường hợp nào sau đây có khả năng xảy ra nhất đối với một lớp cụ thể?
a. Dữ liệu của nó là riêng tư và các phương pháp của nó là công khai.
b. Dữ liệu của nó là công khai và các phương pháp của nó là riêng tư.
c. Dữ liệu và phương pháp của nó đều được công khai.
d. Dữ liệu và phương pháp của nó đều là riêng tư.
13. Một phương thức thể hiện .
a. là tĩnh c. cả hai ở trên
b. nhận được một tài liệu tham khảo này d. không có cái nào ở trên
14. Giả sử rằng bạn đã tạo một lớp có tên Dog có chứa trường dữ liệu có tên
weight vàmột phương thức instance có tên setWeight () . Hơn nữa, giả định rằng
Phương thức setWeight () chấp nhận một tham số số có tên là weight . Cái nào trong số
các câu lệnh sau đặt đúng trọng lượng của Dog trong phương thức setWeight () ?
a. weight = trọng lượng c. weight = this.weight
b. this.weight = this.weight d. this.weight = trọng lượng
https://translate.googleusercontent.com/translate_f 37/41
9/7/2021 Lập trình hướng đối tượng
Trang 41
Bài tập
15. Một phương thức tĩnh còn được gọi là a (n) phương pháp.
a. ví dụ c. riêng tư
b. công cộng d. lớp học
16. Theo mặc định, các phương thức chứa trong một lớp là các phương pháp.
467
a. tĩnh c. lớp học
b. không ổn định d. công cộng
17. Giả sử rằng bạn đã tạo một lớp có tên MyClass và một chương trình hoạt động
chứa câu lệnh sau:
xuất ra MyClass.number
a. được lưu trữ trong một mảng c. trả về từ một phương thức
b. chuyển cho một phương pháp d. tất cả những điều trên
Trang 42
https://translate.googleusercontent.com/translate_f 38/41
9/7/2021 Lập trình hướng đối tượng
2. Xác định ba lớp khác nhau có thể chứa mỗi đối tượng sau:
a. William Shakespeare
b. Áo len đỏ yêu thích của tôi
d. Thiết kế một ứng dụng khai báo một mảng số năm CheckingAccount đối tượng.
Nhắc người dùng về dữ liệu cho từng đối tượng, sau đó chuyển mảng cho một phương thức
xác định tổng các số dư.
6. Hoàn thành các nhiệm vụ sau:
a. Thiết kế một lớp có tên StockTransaction chứa một biểu tượng cổ phiếu (thường là
một đến bốn ký tự), tên cổ phiếu và giá mỗi cổ phiếu. Bao gồm các phương pháp để thiết lập
và nhận các giá trị cho từng trường dữ liệu. Tạo sơ đồ lớp và viết
mã giả định nghĩa lớp.
b. Thiết kế một ứng dụng khai báo hai đối tượng và bộ StockTransaction và
hiển thị các giá trị của chúng.
c. Thiết kế một ứng dụng khai báo một mảng gồm 10 đối tượng StockTransaction .
Nhắc người dùng về dữ liệu cho từng đối tượng, sau đó hiển thị tất cả các giá trị.
d. Thiết kế một ứng dụng khai báo một mảng gồm 10 đối tượng StockTransaction .
Nhắc người dùng về dữ liệu cho từng đối tượng, sau đó chuyển mảng cho một phương thức
xác định và hiển thị hai cổ phiếu có giá cao nhất và thấp nhất
mỗi chia sẻ.
Trang 43
Bài tập
https://translate.googleusercontent.com/translate_f 39/41
9/7/2021 Lập trình hướng đối tượng
7. Hoàn thành các nhiệm vụ sau:
a. Thiết kế một lớp học mang tên Pizza . Các trường dữ liệu bao gồm một trường chuỗi cho phần đầu
(chẳng hạn như pepperoni) và các trường số cho đường kính tính bằng inch (chẳng hạn như 12)
và giá (chẳng hạn như 13,99). Bao gồm các phương pháp để lấy và đặt giá trị cho từng
các lĩnh vực này. Tạo sơ đồ lớp và viết mã giả định nghĩa 469
lớp.
b. Thiết kế một ứng dụng khai báo hai đối tượng Pizza và thiết lập và hiển thị
giá trị của chúng.
c. Thiết kế một ứng dụng khai báo một mảng 10 đối tượng Pizza . Nhắc nhở
người dùng cho dữ liệu cho mỗi Pizza , sau đó hiển thị tất cả các giá trị.
d. Thiết kế một ứng dụng khai báo một mảng 10 đối tượng Pizza . Nhắc nhở
người dùng cho một lớp phủ và đường kính cho mỗi chiếc Pizza và chuyển từng đối tượng cho một
phương thức tính giá và trả về đối tượng Pizza hoàn chỉnh cho
chương trình chính. Sau đó, hiển thị tất cả các giá trị Pizza . Một chiếc bánh pizza 12 inch là $ 13,99, a
Pizza 14 inch là 16,99 đô la và bánh pizza 15 inch là 19,99 đô la. Bất kỳ kích thước đã nhập nào khác là
không hợp lệ và sẽ khiến giá được đặt thành 0.
8. Hoàn thành các nhiệm vụ sau:
a. Thiết kế một lớp có tên BaseballGame có các trường cho hai tên đội và
một số điểm cuối cùng cho mỗi đội. Bao gồm các phương pháp để đặt và nhận các giá trị cho
mỗi trường dữ liệu. Tạo sơ đồ lớp và viết mã giả
xác định lớp.
1. Tệp có tên MAINTENANCE10-01.txt được bao gồm trong tệp có thể tải xuống của bạn
hồ sơ sinh viên. Giả sử rằng chương trình này là một chương trình làm việc trong tổ chức của bạn
và nó cần sửa đổi như được mô tả trong các nhận xét (các dòng bắt đầu bằng
hai dấu gạch chéo) ở đầu tệp. Công việc của bạn là thay đổi chương trình để đáp ứng
các thông số kỹ thuật mới.
Trang 44
Tìm lỗi
1. Các tệp sinh viên có thể tải xuống của bạn cho Chương 10 bao gồm DEBUG10-01.txt,
DEBUG10-02.txt và DEBUG10-03.txt. Mỗi tệp bắt đầu với một số nhận xét
https://translate.googleusercontent.com/translate_f 40/41
9/7/2021 Lập trình hướng đối tượng
470 mô tả vấn đề. Nhận xét là những dòng bắt đầu bằng hai dấu gạch chéo (//).
Sau các nhận xét, mỗi tệp chứa mã giả có một hoặc nhiều lỗi
bạn phải tìm và sửa lại.
2. Các tệp có thể tải xuống của bạn cho Chương 10 bao gồm một tệp có tên DEBUG10-04.jpg
chứa một sơ đồ lớp với các lỗi cú pháp và / hoặc lôgic. Kiểm tra lớp học
sơ đồ và sau đó tìm và sửa tất cả các lỗi.
1. a. Thẻ chơi được sử dụng trong nhiều trò chơi máy tính, bao gồm cả các phiên bản của
kinh điển như Solitaire, Hearts và Poker. Thiết kế một lớp Thẻ có chứa một chuỗi
trường dữ liệu để giữ một bộ đồ (quân bích, trái tim, kim cương hoặc câu lạc bộ) và dữ liệu số
trường cho giá trị từ 1 đến 13. Bao gồm các phương thức get và set cho mỗi trường. Viết một
ứng dụng chọn ngẫu nhiên hai thẻ chơi và hiển thị giá trị của chúng.
b. Sử dụng hai đối tượng Thẻ , thiết kế một ứng dụng phát phiên bản đơn giản của
trò chơi bài Chiến tranh. Chia hai lá bài — một cho máy tính và một cho người chơi.
Xác định thẻ cao hơn, sau đó hiển thị thông báo cho biết thẻ
bằng nhau, máy tính thắng, hoặc người chơi thắng. (Đánh bài được coi là
bằng nhau khi chúng có cùng giá trị, bất kể bộ đồ của chúng là gì.)
trò chơi, giả sử rằng quân Át (giá trị 1) thấp. Đảm bảo rằng hai lá bài được chia
không giống nhau Thẻ . Ví dụ: một bộ bài không thể chứa nhiều hơn một
Queen of Spades.
1. Trong chương này, bạn đã biết rằng dữ liệu cá thể và phương thức thuộc về các đối tượng, nhưng
rằng dữ liệu tĩnh và các phương thức thuộc về một lớp nói chung. Xem xét cuộc sống thực
lớp có tên StateInTheUnitedStates . Đặt tên cho một số thuộc tính ngoài đời thực của lớp này
đó là các thuộc tính tĩnh và thuộc tính cá thể. Tạo một ví dụ khác về một thực-
life class và thảo luận về các thành viên static và instance của nó có thể là gì.
2. Một số lập trình viên sử dụng một quy ước gọi là ký hiệu Hungary khi đặt tên
các biến và các trường lớp của chúng. Ký hiệu Hungary là gì và tại sao nhiều ký hiệu
các lập trình viên hướng đối tượng cảm thấy nó không phải là một quy ước có giá trị để sử dụng?
https://translate.googleusercontent.com/translate_f 41/41