Các khái niệm cơ bản trong OOP được tóm tắt từ các tài liệu tham khảo, dễ hiểu. Tài liệu cho môn lập trình hướng đối tượng, khái niệm, ví dụ đơn giản ngắn gọn, dễ nhớ cho các kì thi vấn đáp, trắc nghiệm yêu cầu học thuốc kiến thức
1 Khái niệm Hướng đối tượng kĩ thuật mơ hình hóa hệ thống giới thực phần mềm dựa đối tượng Đối tượng (object) khái niệm trung tâm OOP, mơ hình thực thể hay khái niệm giới thực Mỗi đối tượng có tập thuộc tính (attribute) giá trị hay trạng thái để mơ hình hóa đối tượng Mỗi lớp(class) đặc tả đặc điểm đối tượng thuộc lớp Cụ thể, định nghĩa lớp mơ tả tất thuộc tính đối tượng thành viên lớp phương thức thực thi hành vi đối tượng Ví dụ, ta có nhiều đối tượng tơ với thơng số khác lượng xăng có, tốc độ tại, biển số xe; định nghĩa lớp ô tô mô tả đặc điểm chung thông số với phương thức thực hoạt động tăng tốc, giảm tốc Quan hệ lớp đối tượng gần giống quan hệ kiểu liệu biến thuộc kiểu liệu Mỗi đối tượng tạo từ lớp gọi thực thể (instance) lớp Một chương trình viết kết hợp lớp khác Cịn chạy, tập hợp đối tượng hoạt động tương tác với nhau, đối tượng sinh từ lớp cấu thành nên chương trình Mỗi đối tượng có thời gian sống Trong chương trình chạy, đối tượng tạo khởi tạo giá trị theo yêu cầu Ngay đối tượng tạo ra, hệ thống tự động gọi hàm khởi tạo (constructor) để khởi tạo giá trị cho thuộc tính đối tượng Các nguyên tắc trụ cột Lập trình hướng đối tượng có ba ngun tắc trụ cột: đóng gói, thừa kế đa hình, cịn trừu tượng hóa khái niệm tảng Trừu tượng hóa (abstraction) chế cho phép biểu diễn tình phức tạp giới thực mơ hình đơn giản hóa Nó bao gồm việc tập trung vào tính chất quan trọng đối tượng phải làm việc với lượng lớn thơng tin Ví dụ, mèo ngữ cảnh cửa hàng bán thú cảnh, ta tập trung vào giống mèo, màu lông, cân nặng, tuổi, tiêm phòng dại hay chưa, bỏ qua thơng tin khác dung tích phổi, nồng độ đường máu, huyết áp, mèo ngữ cảnh bệnh viện thú y lại chuyện khác Các đối tượng ta thiết kế chương trình OOP trừu tượng hóa theo nghĩa đó, ta bỏ qua nhiều đặc điểm đối tượng thực tập trung vào thuộc tính quan trọng cho việc giải tốn cụ thể Người ta gọi trừu tượng hóa mơ hình đối tượng khái niệm giới thực Khi viết chương trình giải tốn giới thực, trừu tượng hóa cách để mơ hình hóa tốn Đóng gói (encapsulation): Các trừu tượng hóa có liên quan đến đóng gói vào đơn vị Các trạng thái hành vi trừu tượng hóa bọc lại khối gọi lớp Cụ thể, sau xác định đối tượng, đến thuộc tính hành động đối tượng, mục tiêu đóng gói đối tượng tính cần thiết để thực vai trị chương trình Thí dụ, đối tượng nhiệt kế cần có cần thiết để đo nhiệt độ, lưu trữ số liệu lần đo nhiệt độ trước cho phép truy vấn số liệu Định nghĩa lớp công cụ lập trình yếu cho việc thực ngun tắc đóng gói Một lớp mơ tả tập hợp đối tượng có thuộc tính, hành vi Thuộc tính (attribute) dùng để lưu trữ thơng tin trạng thái đối tượng Một thuộc tính đơn giản biến Boolean lưu trữ trạng thái tắt bật, hay phức tạp lại đối tượng khác Các thuộc tính khai báo định nghĩa lớp gọi biến thực thể (instance variable), gọi tắt biến thực thể Chúng gọi thành viên liệu (data member), hay trường (field) Trạng thái (state) phản ánh giá trị thuộc tính đối tượng kết hành vi đối tượng theo thời gian Hành vi (behavior) hoạt động đối tượng mà nhìn thấy từ bên ngồi Trong có việc đối tượng thay đổi trạng thái việc trả thơng tin trạng thái thơng điệp u cầu Phương thức (method) thao tác hay dịch vụ thực đối tượng nhận thơng điệp tương ứng Các phương thức cài đặt hành vi đối tượng định nghĩa định nghĩa lớp Phương thức gọi tên khác như: hàm thành viên (member function) – gọi tắt 'hàm', thao tác (operation), dịch vụ (service) Khái niệm đóng gói cịn kèm với khái niệm che giấu thông tin (information hiding) nghĩa che giấu chi tiết bên đối tượng khỏi giới bên ngồi Thừa kế (inheritance) quan hệ mang tính phân cấp mà thành viên lớp kế thừa lớp dẫn xuất trực tiếp gián tiếp từ lớp Đây chế cho phép định nghĩa lớp dựa định nghĩa lớp có sẵn, cho tất thành viên lớp "cũ" (lớp sở hay lớp cha) có mặt lớp (lớp dẫn xuất hay lớp con) đối tượng thuộc lớp sử dụng thay cho đối tượng lớp cũ đâu Đa hình (polymorphism) khả tồn nhiều hình thức Trong hướng đối tượng, đa hình kèm với quan hệ thừa kế có nghĩa tên hiểu theo cách khác tùy tình Các đối tượng thuộc lớp dẫn xuất khác đối xử nhau, thể chúng đối tượng thuộc lớp sở, chẳng hạn đặt đối tượng Triangle Circle cấu trúc liệu dành cho Shape, dùng lời gọi hàm rotate cho đối tượng Triangle hay Circle Và nhận thơng điệp đó, đối tượng thuộc lớp khác hiểu theo cách khác Ví dụ, nhận thơng điệp "rotate", đối tượng Triangle Amoeba thực phương thức rotate() khác Ngơn ngữ lập trình Java Java ngôn ngữ hướng đối tượng Các ngôn ngữ hướng đối tượng chia chương trình thành mơ-đun riêng biệt, gọi đối tượng, chúng đóng gói liệu thao tác chương trình Java có tính độc lập tảng (platform independent) Các chương trình viết Java biên dịch thành mã máy, loại ngôn ngữ máy dành cho loại máy tính khơng tồn – loại máy "ảo" gọi Máy ảo Java (Java Virtual Machine – JVM) Ngôn ngữ máy dành cho máy ảo Java gọi Java bytecode, hay ngắn gọn bytecode Các bước để xây dựng thực thi chương trình Java: • Soạn thảo: Mã nguồn chương trình viết phần mềm soạn thảo văn dạng text lưu ổ đĩa Mã nguồn Java đặt file với tên có phần mở rộng java • Dịch: Trình biên dịch Java (javac) lấy file mã nguồn dịch thành lệnh bytecode mà máy ảo Java hiểu được, kết file có class • Nạp chạy: Trình nạp Java (java) dùng máy ảo Java để chạy chương trình dịch dạng bytecode Để thuận tiện tăng suất cho việc lập trình, người ta dùng mơi trường lập trình tích hợp (IDE – integrated development environment) Trong đó, bước dịch chạy thường kết hợp thực tự động, tất công đoạn người dùng cịn việc chạy tính phần mềm Cấu trúc mã nguồn Java Mỗi file mã nguồn (tên file có java) chứa định nghĩa lớp (class) Mỗi lớp đại diện cho mảnh chương trình, chương trình nhỏ bao gồm lớp Định nghĩa lớp phải bọc cặp ngoặc { } Mỗi lớp có vài phương thức Trong lớp Car, phương thức break chứa lệnh mô tả xe cần phanh Các phương thức lớp phải khai báo bên định nghĩa lớp Bên cặp ngoặc { } phương thức, ta viết chuỗi lệnh quy định hoạt động phương thức Có thể tạm coi phương thức Java gần giống hàm hay chương trình Từ khóa public dịng main() có nghĩa phương thức có mức truy nhập public (cơng khai) – phương thức gọi từ đâu mã chương trình Thực tế main() gọi từ trình thơng dịch – thứ nằm ngồi chương trình Từ khóa void có nghĩa phương thức main() khơng có kết trả Tham số String[] args hàm main() mảng chứa xâu kí tự nhập vào hình thức tham số dịng lệnh ta chạy chương trình từ cửa sổ lệnh (console) Mỗi lệnh Java kết thúc dấu chấm phẩy Lệnh gọi hàm: Lệnh gọi hàm System.out.println(), hàm có sẵn thư viện chuẩn Java, yêu cầu hàm thực việc hiển thị thơng điệp Lệnh có tác dụng hiển thị thơng điệp đầu chuẩn (standard output) Lệnh thơng điệp gửi tới đối tượng có tên System.out yêu cầu in đầu chuẩn xâu kí tự Khi chạy chương trình, thơng điệp "Hello, world!" hiển thị đầu chuẩn Lưu ý : Java, hàm tồn độc lập Nó phải thuộc lớp Một chương trình định nghĩa lớp public có dạng Trong đó: tên lớp, tên chương trình, tên file mã nguồn public từ khóa cần đặt đầu khai báo lớp chương trình Những lớp khai báo với từ khóa cần đặt file có tên file trùng với tên lớp, xác đến chữ hoa hay chữ thường Ví dụ, lớp HelloWorld nằm file mã nguồn có tên HelloWorld.java Sau biên dịch file mã nguồn HelloWorld.java, ta file bytecode HelloWorld.class – file chạy trình thơng dịch Java Biến Biến tên vùng nhớ dùng để lưu liệu chương trình chạy ● Dữ liệu lưu biến gọi giá trị biến ● Chúng ta truy nhập, gán hay thay đổi giá trị biến, biến gán giá trị mới, giá trị cũ bị ghi đè lên ● Java yêu cầu biến trước dùng phải khai báo Ví dụ: Các biến khai báo hàm biến địa phương Nên khai báo biến địa phương trước sử dụng đầu khối mã chương trình đóng khung cặp ngoặc { } Biến địa phương khai báo hàm có hiệu lực bên hàm đó, VD: numberOfBaskets applePerBasket Hình 2.4 biến địa phương hàm main có hiệu lực bên hàm main() Ngoài biến địa phương, Java cịn có loại biến thực thể với phạm vi nằm đối tượng biến lớp với phạm vi lớp Một biến địa phương khai báo chưa gán giá trị gọi biến chưa khởi tạo có giá trị khơng xác định Trình biên dịch báo lỗi mã sử dụng biến địa phương chưa khởi tạo (Có thể khởi tạo giá trị biến lệnh khai báo để tránh tình quên khởi tạo biến, VD: char grade = 'A'; ) Vùng hiệu lực biến cịn nhỏ phạm vi phương thức Trong phương thức, ta thường tạo khối lệnh Các khối giới hạn cặp ngoặc { } Nếu biến khai báo bên khối lệnh có phạm vi hết khối lệnh Các phép toán Phép gán Phép gán cách gắn giá trị cho biến thay đổi giá trị biến Lệnh gán Java có cơng thức: biến = biểu thức; Trong đó, dấu (=) gọi dấu gán hay toán tử gán, biểu thức vế phải dấu gán tính lấy kết gán cho biến nằm vế trái Biểu thức vế phải giá trị trực tiếp, biến, biểu thức phức tạp Các phép toán số học Java hỗ trợ năm phép toán số học sau: + (cộng), - (trừ), * (nhân), / (chia), % (modulo – lấy phần dư phép chia) Các phép toán áp dụng cho biến kiểu int, long không áp dụng cho kiểu tham chiếu Phép chia thực cho hai giá trị kiểu nguyên cho kết thương nguyên Ví dụ biểu thức / cho kết 1, / cho kết Java cho phép sử dụng phép gán phức hợp (+=, -=, *=, /=, %=, >>=,