Thứ Năm, 27 tháng 8, 2015

Ngoại lệ

Khối try/catch:

  • Nếu có nhiều catch thì kiểm tra ngoại lệ từ khối đầu xuống
  • Family là dù cho không có ngoại lệ cũng chạy
  • Khối catch tổng quát hơn bao giờ cũng phải đặt sau lớp chuyên biệt hơn

Thành viên lớp và thành viên thực thể

Biến của lớp:

  • Biến thực thể không có từ khóa static
  • Biến lớp được khai báo với từ khóa static
  • Từ bên ngoài lớp, có thể dùng tên lớp để truy cập biến static
Phương thức của lớp:
  • Phương thức của lớp(phương thức static) nó có thể tồn tại độc lập với các đối tượng và lớp có thể gọi trực tiếp đến nó mà không cần tham chiếu đến đối tượng nào.
Thành viên lớp thuộc về lớp và độc lập với các thực thể của lớp đó. Trong khi đó, thành viên thực thể gắn bó chặt chẽ với từng thực thể cụ thể

Khởi tạo biến lớp:
  • Các biến lớp (static) được khởi tạo trước khi bất cứ đối tượng nào của lớp đó khởi tạo
  • Các biến static trong một lớp khởi tạo trước khi các hàm static được chạy
Thành viên bất biến - final:
  1. Biến final là biến không thể sửa giá trị
  2. Một phương thức final là phương thức mà lớp con không thể cài đè
  3. Một lớp final là lớp không thể có lớp con

Hàm khởi tạo và vấn đề thừa kế


Gọi hàm khởi tạo của lớp cha... cha... cha... :
  • Khi khởi tạo lớp con, hàm khởi tạo của lớp cha cũng được chạy dù không gọi hàm super(). Nghĩa là khi vừa tạo lớp con thì lớp cha cũng được tạo, chạy trước khi làm công việc trong hàm của lớp con.
Truyền tham số cho hàm khởi tạo lớp cha:
  • Khi truyền tham số vào hàm của lớp con tức là đưa giá trị cho biến thực thể ở lớp cha nắm giữ và sử dụng
  • Lớp con không thừa kế hàm khởi tạo của lớp cha
  • Ngoại trừ dùng super() để truyền tham số cho hàm khởi tạo của lớp cha, thì ta có thể truyền bằng cách dùng this("thamso") 
Chú ý: Nếu hàm khởi tạo của lớp con có danh sách tham số giống lớp cha thì phải gọi hàm super() hoặc this()


Thứ Ba, 25 tháng 8, 2015

Các mức truy nhập


  • Mức private: Chỉ sử dụng trong một lớp
  • Mức public: Bất cứ ở đâu cũng có thể truy nhập đến các thức public
  • Mức protected: Chỉ các lớp thừa kế của lớp đó mới được dùng, kể cả khi các con không nằm trong một gói.
NHỮNG ĐIỂM QUAN TRỌNG
  1. Lớp con chuyên biệt hóa lớp cha của nó
  2. Lớp con thừa kế các biến thực thể, các phương thức của cha nếu là public còn private thì không được
  3. Có thể cài đè phương thức được thừa kế nhưng không cài đè các biến thực thể của lớp cha
  4. Dùng thử quan niệm IS-A để kiểm tra cấu trúc thừa kế có hợp lý hay không, quan hệ chỉ một chiều. VD: Con sói nào cũng là động vật, nhưng không phải động vật nào cũng là con sói
  5. Khi cài đè phương thức lớp cha thì khi gọi, sẽ gọi phương thức ở lớp con. Nghĩa là gọi cái thấp nhất
  6. Để gọi phương thức của cha thì gọi hàm super()

Cài đè và nạp chồng

Cài đè:
  1. Khi gọi super() thì phương thức được cài đè sẽ chạy
  2. Các nguyên tắc khi cài đè:
  • Danh sách tham số phải trùng nhau, kiểu giá trị trả về phải tương thích
  • Không được giảm quyền truy cập so với lớp cha
Nạp chồng đơn giản là tạo ra nhiều hàm có trùng tên nhưng khác tham số.

Đa hình


  1. Theo nghĩa tổng quát đa hình là việc tồn tại ở nhiều hình thức
  2. Có thể tham chiếu đến lớp con của đối tượng
  3. Đa hình còn thể hiện ở việc truyền tham số, nghĩa là cùng một phương thức nhưng ta truyền các tham số khác nhau thì nó cho ra kết quả khác nhau.

Khi nào nên dùng quan hệ thừa kế

  • Nên dùng khi một lớp là một loại cụ thể của lớp cha 
  •  Nên dùng khi có mã tổng quát được dùng chung cho nhiều lớp
  1. Không nên dùng vì mục đích tái sử dụng mã, có nghĩa là dù nó không liên quan nhau nhưng vẫn thừa kế
  2. Không nên dùng khi lớp cha không qua được thử nghiệm IS-A. VD: Xe đạp  một phương tiện giao thông 
LỢI ÍCH CỦA VIỆC THỪA KẾ
  • Tránh mã trùng lập
  • Dễ quản lý các hành vi của lớp cha

Sử dụng API

Ta cần biến 2 điều sau:

  1. Trong thư viện có những lớp nào
  2. Khi đã biết được lớp, làm sao biết nó dùng để làm gì?
Ta có thể tra cứu sách về java tại đây: http://docs.oracle.com/javase/6/docs/api/

Biến thực thể và biến địa phương


  • Biến thực thể khai báo bên trong lớp mà không nằm trong một địa phương nào.
  • Biến địa phương nằm trong một phương thức
  • Biến địa phương phải khai báo trước khi sử dụng còn thằng biến thực thể thì không cần

Biến và kiểu dữ liệu

  • Định danh (identifier) là thuật ngữ chỉ tên (tên biến, tên hàm, tên lớp,..). Nó không được trùng với từ khóa(keyword).
  • Tên lớp viết Hoa chữ cái đầu còn định danh thì viết thường chữ cái đầu, nếu định danh được cấu tạo từ nhiều từ đơn thì viết hoa những từ đơn còn lại VD: totalApple
  • Biến tham chiếu đối tượng  không phải là một đối tượng, nó chỉ đóng vai trò như một con trỏ trỏ tới đối tượng nào đó.

Lớp và đối tượng

Một đối tượng tạo ra từ một lớp ta gọi nó là thực thể (intance)!
Có 2 loại thông tin quan trọng của đối tượng:

  • Một thông tin mà đối tượng đó biết
  • Những việc mà nó làm
  • Một class không phải là một đối tượng mà nó là khuôn mẫu dùng để tạo ra đối tượng


Thứ Hai, 24 tháng 8, 2015

Các nguyên tắc trụ cột của OOP

OOP có 3 nguyên tắc trụ cột là: Đóng gói, thừa kế và đa hình, còn trừu tượng hóa là các khái niệm nền tảng.
One *'v'* : Trừu tượng hóa(abstraction) là một cơ chế cho phép biểu diễn một tình huống phức tạp trong thế giới thực thành một mô hình được đơn giản hóa! Có nghĩa là tập trung vào những cái quan trọng của đối tượng.
Two *'v'*:  Đóng gói(encapsulation) có nghĩa là các trừu tượng hóa của những gì liên quan đến nhau được đóng gói vào một đơn vị duy nhất. Lớp chính là công cụ chủ yếu cho lập trình viên thực hiện nguyên tắc đóng gói. Một lớp là mô tả về một tập hợp các đối tượng có cùng thuộc tính, hành vi.
  • Thuộc tính (attribute) dùng để lưu trữ thông tin trạng thái của một đối tượng. Một thuộc tính có thể đơn giản là một biến kiểu boolean, hay phức tạp hơn nó là một đối tượng khác. Các thuộc tính được khai báo trong định nghĩa lớp được gọi là các biến của thực thể (instance variable)
  • Trạng thái (state) phản ánh các giá trị hiện tại của các thuộc tính và là kết quả của đối tượng theo thời gian.
  • Hành vi (behavior) là hoạt động của đối tượng mà có thể nhìn thấy được từ bên ngoài.
  • Phương thức (method) là thao tác hay dịch vụ được thực hiện đối với đối tượng khi nó nhận được thông điệp tương ứng. Nó còn được gọi là hàm, thao tác(operation), dịch vụ.
Three *'v'*: Thừa kế (inheritance) là quan hệ mang tính chất phân cấp, trong đó các thành viên của một lớp được thừa kế bởi lớp dẫn xuất trực tiếp hoặc gián tiếp từ lớp đó.
Four *'v'*: Đa hình (polymorphism) theo nghĩa tổng quát, là khả năng tồn tại ở nhiều hình thức. Có nghĩa là cùng một cái tên nhưng hiểu theo cách khác nhau tùy tình huống.


Giới thiệu

Lập trình hướng cấu trúc (structured programming): Phương pháp lập trình này là chia 1 bài toán lớn thành nhiều bài toán con, cháu chắt. :v Chia tới khi nào nhìn là biết làm thì nghỉ! Chia xong lập trình từ trên xuống dưới một cách tuần tự, thế nên gọi là lập trình từ trên xuống :)) top download nhầm top - down programming!!!
Nhược điểm của thằng này cũng ít à, có 3 cái thôi:
1. Em ấy chỉ tạo ra các lệnh, quy trình để giải bài toán.
2. Em này khó tái sử dụng lại mấy thằng mình lập trình rồi. Làm biếng mà gặp em này thôi xong
3. Cuối cùng em ấy đi đời luôn, các ứng dụng luôn thay đổi mà em không thay đổi thì anh cho cưng ra rìa!!!

Lập trình hướng đối tượng (object - oriented programming): Nó chia thành các mô-đun chứa các số liệu và các hàm/thủ tục để xử lý nó. Với cách này dữ liệu được bảo vệ vì nó chỉ được xử lý theo cách đã được biết trước và được định nghĩa chặt chẽ.