Kế thừa (Inheritance)

Bài viết được viết được viết trong chuyên mục OOP và có liên quan đến những kiến thức trong những bài cùng chuyên mục. Nếu các bạn lần đầu tìm hiểu về OOP có thể nên quay lại chuyên mục đọc từ những bài viết đầu. Vì mục đích nói về OOP cơ bản, không theo chuẩn mực của ngôn ngữ C++ nên ví dụ trong bài viết không đặt nặng vấn đề cú pháp chuẩn mực khi kế thừa và một số thể hiện của C++ trong kế thừa, mục đích chính mình muốn trình bày là kiến thức chung về kế thừa.

Khi các bạn sử dụng class của một người khác cho mục đích cá nhân (code reusing) có hai phương cách để làm điều này:

  • Composition
  • Inheritance

Composition có thể dịch thành “quan hệ” hoặc “liên kết”, tuy nhiên đừng quá quan tâm đến thuật ngữ, ta sẽ có thể hiểu composition là hành động kết hợp sử dụng code của người khác thông qua việc sử dụng các đối tượng của một lớp do người đó viết.

Continue reading

Advertisements

Everything is an Object

Để nghiên cứu tốt bài viết, các bạn nên có kiến thức căn bản về OOP (có thể xem trong chuyên mục OOP) về lớp và đối tượng. Java là một ngôn ngữ lập trình hướng đối tượng, và khi tìm hiểu về ngôn ngữ java, cần ý thức rằng tất cả mọi thứ bạn đang tác động đều là những đối tượng.
ví dụ đơn giản nhất:
String a = new String(“abcd”);
a là một đối tượng.

Bạn phải cấp phát cho tất cả các đối tượng.

String a = “abcd”; (1)
String a = new String(“abcd”); (2)

Cả hai câu lệnh trên theo một cách tiếp cận thông thường được gọi là cấp phát. Thực chất chỉ có lệnh (2) được gọi là cấp phát cho đối tượng a, lệnh (1) hoạt động theo một cơ chế khác – không được gọi là cấp phát cho đối tượng a. (Ta sẽ làm rõ vấn đề này một lát sau).

Kiểu dữ liệu nguyên thủy (Primitive Type)

các kiểu dữ liệu nguyên thủy trong Java là

image

khi ta khai báo các đối tượng thuộc kiểu nguyên thủy, trình biên dịch cho phép ta không cần cấp phát, trình biên dịch sẽ tự động làm điều đó và khởi tạo giá trị ban đầu cho đối tượng. Tuy nhiên trình biên dịch sẽ hoạt động cấp phát theo cơ chế khác với các kiểu dữ liệu định nghĩa (class type).
int a;
a sẽ mang giá trị 0

Continue reading

Lớp, đối tượng, phương thức truy nhập

Tiếp theo bài viết về cơ chế bao gói (Encapsulation), hay được biết đến với thuật ngữ “cơ chế che dấu thông tin” (Information Hiding Mechanism), ta sẽ tiếp cận sâu với hai ý niệm cơ bản của OOP là Lớp Và đối tượng (Class và Object).

Với những ngôn ngữ hỗ trợ OOP, đều có những cú pháp tương tự nhau và kiến thức chung về OOP về mặt ý niệm cũng tương đồng, khi bạn học OOP chuyên sâu ở một ngôn ngữ, khi tiếp cận OOP của ngôn ngữ khác sẽ rất dễ dàng và nhanh chóng. Trong bài viết này mình sẽ dùng ngôn ngữ C++ để demo, ngoài ra mình có viết một bài về phương thức truy nhập trong mục JAVA, các bạn đang nghiên cứu ngôn ngữ này có thể truy cập tại đây.

Continue reading

Intro to OOP – Encapsulation

Đây là bài viết khởi đầu của chuyên mục OOP trong blog, bài viết này chỉ là một phần giới thiệu về phương pháp lập trình hướng đối tượng. Nội dung của bài viết này rất phù hợp với người mới học, chưa có kiến thức gì về OOP, nếu bạn không phải đối tượng này và muốn tìm hiểu sâu hơn về hướng đối tượng thì nội dung bài viết này chưa đáp ứng được nhu cầu. Bạn có thể tìm kiếm một số bài viết phù hợp trong chuyên mục hoặc các tài liệu điện tử khác. (hiện tại đây là bài viết khởi đầu, sử dụng để giới thiệu song song làm nền tảng cho các bài viết của chuyên mục ngôn ngữ Java).

Các ví dụ demo trong bài viết này và chỉ bài viết này sẽ hướng dẫn các bạn tiếp cận với OOP sử dụng ngôn ngữ C++(sử dụng IDE là visual studio), vì ngôn ngữ này hỗ trợ kiến trúc lập trình thủ tục, từ đó so sánh với kiến trúc lập trình hướng đối tượng.

Ta sẽ không bắt đầu với khái niệm hay nội dung khái quát mô tả OOP là gì?Ta sẽ bắt đầu với công việc nhìn nhận một ví dụ về bài tập phân công công việc cho nhiều người.

Continue reading

[Part II] Access Control – Access Specifiers

 

Như đã đề cập ở Part 1, ở Part này chúng ta sẽ tìm hiểu các phương thức truy cập – Access Specifiers. Nếu các bạn đã có nền tảng kiến thức OOP trong quá trình nghiên cứu các ngôn ngữ khác, thì trong JAVA bạn có thể chỉ cần quan tâm đến phương thức truy nhập default, protected, các phần còn lại là private và public là tương tự.

Ta xét một project được xây dựng như sau.

·       Lớp YourClass(package access).

Để ngắn gọn trong phần trình bày, khi mình nói một biến hoặc phương thức là ‘private’…, ta hiểu rằng biến/phương thức đó có phương thức truy cập là ‘private’… Biến/Phương thức là var/method.

Gồm 4 biến a,b,c,d lần lượt được định nghĩa là default, private, public, protected. Khi bạn không dùng từ khóa trước phần khai báo var/method, trình biên dịch mặc định var/method đó là default.

Gồm 3 phương thức p(), d(), f() lần lượt là private, default, public.

Nhận xét tại lớp YourClass

Trong constructor có thể sử dụng cả 4 biến a, b, c, d và 3 phương thức p(),d(),f(). Từ đó ta có thể kết luận rằng, ngay tại một phương thức của class, ta có toàn quyền sử dụng tất cả các biến và phương thức được định nghĩa trong nội bộ class đó.

clip_image002

·       Lớp MyClass (default package) Continue reading

[Part I] Access Control – Package

Đối với người mới tiếp cận với lập trình, cách tiếp cận và thực hiện một chương trình nói chung hay một bài tập demo cụ thể nói riêng thường được thực hiện theo cấu trúc top-down, nghĩa là tiếp cận bằng phương pháp lập trình thủ tục (lập trình cấu trúc) – Structure Architecture. Tuy nhiên kiểu thiết kế chương trình theo kiến trúc nói trên không còn phù hợp cho những hệ thống hoặc chương trình lớn. OOP  – Object Oriented Programming ra đời để đáp ứng nhu cầu này, được biết đến như một “phương pháp lập trình công nghiệp”.

Về chi tiết của OOP, trong bài vết này không được đề cập. Tuy nhiên nếu có cơ sở kiến thức về OOP sẽ là một lợi thế khi tìm hiểu những nội dung được chia sẻ trong bài viết này.

Hầu hết các lập trình viên kinh nghiệm đều biết rằng: Khi hoàn thành code một phần nhỏ công việc, họ ý thức được rằng đoạn mà họ viết không thực sự tốt cho đến khi họ nhìn nhận lại và chỉnh sửa nhiều lần. Công việc đáng chú ý ở đây là “nhìn nhận lại”, “chỉnh sửa lại”. Khi ta chỉ thực hiện công việc một mình, ta có thể nghĩ rằng việc “chỉnh sửa” không quá nhiều ảnh hưởng, vậy khi ta thực hiện code chung với những người khác, tự thân việc “chỉnh sửa” lại code đã hoàn thành là một vấn đề dẫn đến nhiều rắc rối.

Tình huống xảy ra như sau:

Khi bạn hoàn thành một công việc với tư cách là người viết thư viện (Library programmer ), và một người khác kế thừa lại kết quả của bạn (tư cách là client programmer), nghĩa là họ toàn quyền sử dụng code của bạn. Nảy sinh tình huống họ muốn sửa đổi một số code về tên biến/ phương thức,vv của phần code bạn viết (bạn không thể hoàn toàn ngăn cấm điều này vì đó hoàn toàn là một nhu cầu cần thiết trong thực tế). Bạn cũng không thể sử dụng comment hoặc sử dụng coding convention (quy tắc đặt tên biến/phương thức) để thông báo cho client programmer rằng những thứ có thể thay đổi, những thứ nào thì không. Ta cần phải có một cách thức mang tính hệ thống, khoa học hơn. Ngôn ngữ lập trình sẽ phục vụ cho mục đích này.

Trong các language hỗ trợ OOP, ta thường bắt gặp các cách thức truy cập biến/phương thức theo các cơ chế như : public, private, protected, default( trong java nói riêng), được sử dụng để phục vụ cho vấn đề được nêu ở trên. Những cách truy cập trên sẽ được đề cập trong phần sau.

Continue reading

Cài đặt môi trường lập trình

Nhắc đến môi trường lập trình của C++,C#, vv ta sẽ nghĩ ngay tới VISUAL STUDIO, một IDE có thể gọi là tuyệt vời ở mặt hỗ trợ tối đa cho coder. Vậy môi trường lập trình cho JAVA là gì?

Có một số tool phổ biến hiện nay như ECLIPSE, NETBEAN, BLUEJ, vv. tất cả các IDE này đều free và các bạn có thể chọn một trong số các IDE trên để bắt đầu với quá trình nghiên cứu ngôn ngữ JAVA, hoặc sử dụng tất cả tùy cảm giác của bạn. Các bạn có thể download các IDE trên tại trang chủ.

Mình chọn Eclipse: eclipse.org

 

Có nhiều gói để bạn chọn, tùy mục đích sử dụng mà khi các bạn đã thông hiểu các nhu cầu và mục đích của công việc mà các bạn có thể tự chọn. Với mục đích nghiên cứu ngôn ngữ thì các bạn cứ chọn gói Eclipse IDE for Java EE Developers là đủ.

Capture

Continue reading