KỸ THUẬT LẬP TRÌNH JAVA CƠ BẢN Chương LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Mục tiêu Kết thúc chương, học viên có thể: ¾ ¾ ¾ ¾ ¾ ¾ ¾ ¾ ¾ ¾ Định nghĩa Lập trình hướng Đối tượng (Object-oriented Programming) Nhận thức Trừu tượng hóa Dữ liệu (Data Abstraction) Định nghĩa Lớp (Class) Định nghĩa Đối tượng (Object) Nhận thức khác biệt Lớp Đối tượng Nhận thức cần thiết Thiết lập (Construction) Hủy (Destruction) Định nghĩa tính Bền vững (Persistence) Hiểu biết tính Thừa kế (Inheritance) Định nghĩa tính Đa hình (Polymorphism) Liệt kê thuận lợi phương pháp hướng Đối tượng 1.1 Giới thiệu Lập trình hướng Đối tượng (Object-oriented Programming) Lập trình hướng Đối tượng (OOP) phương pháp thiết kế phát triển phần mềm Những ngôn ngữ OOP khơng bao gồm cú pháp trình biên dịch (compiler) mà cịn có mơi trường phát triển tồn diện Mơi trường bao gồm thư viện thiết kế tốt, thuận lợi cho việc sử dụng đối tượng Đối với ngơn ngữ lập trình hỗ trợ OOP việc triển khai kỹ thuật lập trình hướng đối tượng dễ dàng Kỹ thuật lập trình hướng đối tượng cải tiến việc phát triển hệ thống phần mềm Kỹ thuật đề cao nhân tố chức (fucntionality) mối quan hệ liệu OOP phương thức tư để giải vấn đề máy tính Để đạt kết quả, lập trình viên phải nắn vấn đề thành thực thể quen thuộc với máy tính Cách tiếp cận hướng đối tượng cung cấp giải pháp toàn vẹn để giải vấn đề Hãy xem xét tình cần triển khai thành hệ thống máy vi tính: việc mua bán xe Vấn đề vi tính hóa việc mua bán xe bao gồm gì? Những yếu tố rõ ràng liên quan đến việc mua bán xe là: 1) Các kiểu xe (model) 2) Nhân viên bán hàng 3) Khách hàng Những hoạt động liên quan đến việc mua bán: 1) Nhân viên bán hàng đưa khách hàng tham quan phòng trưng bày 2) Khách hàng chọn lựa xe 3) Khách hàng đặt hóa đơn Chương 1: Lập Trình Hướng Đối Tượng 4) Khách hàng trả tiền 5) Chiếc xe trao cho khách hàng Mỗi vấn đề chia thành nhiều yếu tố, gọi Đối tượng (Objects) Thực thể (Entities) Chẳng hạn ví dụ trên, khách hàng, xe nhân viên bán hàng đối tượng thực thể Lập trình viên ln ln cố gắng tạo kịch (scenarios) thật quen thuộc với tình đời sống thực Bước thứ đường hướng làm cho máy tính liên kết với đối tượng giới thực Tuy nhiên, máy tính cỗ máy Nó thực cơng việc lập trình mà thơi Vì thế, trách nhiệm lập trình viên cung cấp cho máy tính thơng tin theo cách thức mà nhận thức thực thể nhận thức Đó lãnh vực kỹ thuật hướng đối tượng Chúng ta sử dụng kỹ thuật hướng đối tượng để ánh xạ thực thể gặp phải đời sống thực thành thực thể tương tự máy tính Phát triển phần mềm theo kỹ thuật lập trình hướng đối tượng có khả giảm thiểu lẫn lộn thường xảy hệ thống lãnh vực ứng dụng Lập trình hướng đối tượng đề cập đến liệu thủ tục xử lý liệu theo quan điểm đối tượng Lập trình hướng đối tượng xem xét liệu thực thể đơn vị độc lập, với chất riêng đặc tính thực thể Bây khảo sát hạn từ ‘đối tượng’ (object), ‘dữ liệu’ (data) ‘phương thức’ (method) Có nhiều loại đối tượng khác Chúng ta xem phận khác quan đối tượng Điển hình quan có phận liên quan đến việc quản trị, đến việc kinh doanh, đến việc kế toán, đến việc tiếp thị … Mỗi phận có nhân riêng, nhân trao cho trách nhiệm rõ ràng Mỗi phận có liệu riêng chẳng hạn thông tin cá nhân, bảng kiểm kê, thể thức kinh doanh, liệu liên quan đến chức phận Rõ ràng quan chia thành nhiều phận việc quản trị nhân hoạt động doanh nghiệp dễ dàng Nhân quan điều khiển xử lý liệu liên quan đến phận Chẳng hạn phận kế tốn chịu trách nhiệm lương bổng quan Nếu người đơn vị tiếp thị cần chi tiết liên quan đến lương bổng đơn vị mình, người cần liên hệ với phận kế tốn Một người có thẩm quyền phận kế tốn cung cấp thơng tin cần biết, thơng tin chia sẻ Một người khơng có thẩm quyền từ phận khác khơng thể truy cập liệu, khơng thể thay đổi làm hư hỏng liệu Ví dụ minh chứng đối tượng hữu dụng việc phân cấp tổ chức liệu Hình 1.1 Minh họa cấu trúc quan điển hình Core Java Phịng Kế tốn Phịng Nhân Phịng Kinh doanh Hình 1.1 Khái niệm đối tượng mở rộng đến hầu hết lãnh vực đời sống, nữa, đến giới lập trình Bất kỳ ứng dụng định nghĩa theo hạn từ thực thể đối tượng để tạo tiến trình xử lý mơ theo tiến trình xử lý mà người nghĩ Phương pháp giải ‘top-down’ (từ xuống) gọi ‘lập trình hướng cấu trúc’ (structured programming) Nó xác định chức chương trình chức phân thành đơn vị nhỏ mức độ thấp Bằng kỹ thuật này, chương trình cấu trúc theo hệ thống phân cấp module Mỗi module có đầu vào riêng đầu riêng Trong module, điều khiển có chiều hướng xuống theo cấu trúc khơng có chiều hướng lên Phương pháp OOP cố gắng quản lý việc thừa kế phức tạp vấn đề đời thực Để làm việc này, phương thức OOP che giấu vài thông tin bên đối tượng OOP tập trung trước hết liệu Rồi gắn kết phương thức thao tác liệu, việc xem phần thừa kế việc định nghĩa liệu Bảng 1.1 minh họa khác biệt hai phương pháp: Phương pháp Top-Down OOP Chúng ta xây dựng khách Chúng ta xây dựng tòa nhà 10 sạn tầng với dãy phịng trung bình, sang trọng, phòng họp lớn Chúng ta thiết kế tầng lầu, Chúng ta xây dựng khách sạn với phòng phòng họp thành phần Bảng 1.1 Một ví dụ hai phương pháp giải OOP Structured 1.2 Trừu tượng hóa liệu (Data Abstraction) Khi lập trình viên phải phát triển chương trình ứng dụng khơng có nghĩa người viết mã cho ứng dụng Trước hết, người phải nghiên cứu ứng dụng xác định thành phần tạo nên ứng dụng Kế tiếp, người phải xác định thông tin cần thiết thành phần Hãy khảo sát chương trình ứng dụng cho việc mua bán xe nói Chương trình phải xuất hóa đơn cho xe bán cho khách hàng Để xuất hóa đơn, cần thông tin chi tiết khách hàng Vậy bước thứ xác định đặc tính khách hàng Chương 1: Lập Trình Hướng Đối Tượng Một vài đặc tính gắn kết với khách hàng là: ¾ ¾ ¾ ¾ ¾ Tên Địa Tuổi Chiều cao Màu tóc Từ danh sách kể trên, xác định đặc tính thiết yếu ứng dụng Bởi đề cập đến khách hàng mua xe, chi tiết thiết yếu là: ¾ Tên ¾ Địa Cịn chi tiết khác (chiều cao, màu tóc …) không quan trọng ứng dụng Tuy nhiên, phát triển ứng dụng hỗ trợ cho việc điều tra tội phạm thơng tin chẳng hạn màu tóc thiết yếu Bên cạnh chi tiết khách hàng, thông tin sau cần thiết: ¾ Kiểu xe bán ¾ Nhân viên bán xe Bên cạnh đặc tính khách hàng, xe nhân viên bán hàng, cần liệt kê hành động thực Cơng việc xuất hóa đơn địi hỏi hành động sau: ¾ ¾ ¾ ¾ ¾ Nhập tên khách hàng Nhập địa khách hàng Nhập kiểu xe Nhập tên nhân viên bán xe Xuất hóa đơn với định dạng địi hỏi Khung thơng tin bên cho thấy thuộc tính hành động liên quan đến hóa đơn: Các thuộc tính Tên khách hàng Địa khách hàng Kiểu xe bán Nhân viên bán xe Các hành động Nhập tên Nhập địa Nhập kiểu xe Core Java Nhập tên nhân viên bán xe Xuất hóa đơn Định nghĩa Sự trừu tượng hóa liệu tiến trình xác định nhóm thuộc tính hành động liên quan đến thực thể đặc thù, xét mối tương quan với ứng dụng phát triển Tiếp theo, muốn ứng dụng tính tốn tiền hoa hồng cho nhân viên bán hàng Những thuộc tính liên kết với nhân viên bán hàng có tương quan với ứng dụng là: ¾ Tên ¾ Số lượng xe bán ¾ Tiền hoa hồng Những hành động địi buộc cơng việc là: ¾ Nhập tên nhân viên bán xe ¾ Nhập số lượng xe bán ¾ Tính tiền hoa hồng kiếm Những thuộc tính Tên Số lượng xe bán Tiền hoa hồng Những hành động Nhập tên Nhập số lượng xe bán Tính tiền hoa hồng Như thế, việc trừu tượng hóa liệu tra đặt câu hỏi ‘Đâu thuộc tính hành động cần thiết cho vấn đề đặt ra?’ 1.2.1 Những thuận lợi việc Trừu tượng hóa Những thuận lợi việc Trừu tượng hóa là: ¾ Tập trung vào vấn đề ¾ Xác định đặc tính thiết yếu hành động địi hỏi ¾ Giảm thiểu chi tiết khơng cần thiết Việc trừu tượng hóa liệu cần thiết, khơng thể mơ tất hành động thuộc tính thực thể Vấn đề mấu chốt tập trung đến hành vi cốt Chương 1: Lập Trình Hướng Đối Tượng yếu áp dụng chúng ứng dụng Chẳng hạn khách hàng nhân viên bán hàng thực hành động sau: ¾ Người lại ¾ Người nói chuyện Tuy nhiên, hành động không liên quan đến ứng dụng Việc trừu tượng hóa liệu loại bỏ chúng 1.3 Lớp (Class) Trong ứng dụng mua bán xe, xác định thuộc tính hành động cần có để xuất hóa đơn cho khách hàng Các hành động thuộc tính chung cho khách hàng mua xe Ví thể, chúng nhóm lại thực thể đơn gọi ‘lớp’ Hãy khảo sát lớp có tên ‘khách hàng’ Lớp bao gồm thuộc tính hành động địi hỏi khách hàng Lớp Khách hàng Tên khách hàng Địa khách hàng Kiểu xe bán Nhân viên bán xe Nhập tên Nhập địa Nhập kiểu xe bán Nhập tên nhân viên bán xe Xuất hóa đơn Định nghĩa Một lớp định nghĩa thực thể theo thuộc tính hành động chung Hoặc Những thuộc tính hành động chung thực thể nhóm lại để tạo nên đơn vị gọi lớp Hoặc Một lớp xác định cấp chủng loại thực thể giống Một lớp mơ hình khái niệm thực thể Nó mang tính cách tổng qt khơng mang tính cách đặc thù Khi định nghĩa lớp, muốn phát biểu lớp phải có tập hợp thuộc tính hành động riêng Chẳng hạn định nghĩa lớp đây: Lớp Con người Core Java Tên Chiều cao Màu tóc Viết Nói Lớp định nghĩa thực thể ‘Con người’ Mọi thực thể thuộc kiểu ‘Con người’ có đặc tính hành động định nghĩa Một lớp định nghĩa, biết thuộc tính hành động thực thể ‘trơng giống’ lớp Vì thế, tự chất lớp nguyên mẫu (prototype) Một ví dụ khác lớp liên quan đến việc mua bán xe sau: Lớp Nhân viên bán hàng Tên Số lượng xe bán Tiền hoa hồng Nhập tên Nhập số lượng xe bán Tính tiền hoa hồng Lớp định nghĩa thuộc tính hành động đặc trưng cho nhân viên bán xe 1.4 Đối tượng (Object) Một lớp nguyên mẫu phác họa thuộc tính hành động khả thể thực thể Để sử dụng thực thể mà lớp định nghĩa, phải tạo ‘đối tượng’ từ lớp Lớp khái niệm, đối tượng mẫu thực định nghĩa lớp Hãy khảo sát lớp ‘Khách hàng’ định nghĩa Lớp định nghĩa thuộc tính hành động gắn liền với khách hàng Khi người mua xe cửa hàng, cửa hàng có khách hàng Vào thời điểm ấy, đối tượng giống lớp ‘Khách hàng’ tạo Đối tượng phải có giá trị thực thuộc tính ‘Tên’, ‘Địa chỉ’, ‘Kiểu xe’ … Chẳng hạn khách hàng có tên ‘Mark’, sống ‘London’ mua xe kiểu ‘Honda Civic’ từ nhân viên bán hàng tên ‘Tom’ Như thế, ‘Mark’ đối tượng kiểu ‘Khách hàng’ Định nghĩa: Một đối tượng trường hợp lớp Một đối tượng thực thể cụ thể (thơng thường bạn sờ chạm, xem thấy cảm nhận) Kể từ lúc đối tượng hữu, thuộc tính giá trị xác định, Chương 1: Lập Trình Hướng Đối Tượng hành động định nghĩa cho đối tượng thực thi Trong ¾ ¾ ¾ đối tượng, khía cạnh sau xác định rõ: Tình trạng (state) Thái độ (behavior) Chân tính (identity) Hình 1.2 trình bày hai đối tượng đời thực Con người Xe Tên: Jack Tuổi: 28 Trọng lượng: 65 kgs Kiểu: Ferrari Màu: Đỏ Năm: 1995 Hành động: Đi Nói Suy nghĩ Hành động: Khởi động Ngưng Chuyển động Hình 1.2: Một đối tượng Con người đối tượng Xe Mỗi đối tượng có đặc tính riêng mơ tả đối tượng gì, hành động Chẳng hạn thuộc tính đối tượng ‘Con người’ là: ¾ Tên ¾ Tuổi ¾ Trọng lượng Những thuộc tính đối tượng ‘Xe hơi’ là: ¾ Màu sắc ¾ Kiểu xe ¾ Năm Một đối tượng thực số hành động Một xe có khả thực hành động sau: ¾ Khởi động ¾ Ngưng ¾ Chuyển động Để chuyển đổi đối tượng lập trình đối tượng đời thực, cần phải kết hợp thuộc tính hành động đối tượng Core Java 1.4.1 Thuộc tính Chúng ta xác định thuộc tính hành động để định nghĩa lớp Một thuộc tính gán cho giá trị, chúng mô tả đối tượng Hãy khảo sát lớp sau: Các thuộc tính lớp Khách hàng Tên khách hàng Địa khách hàng Kiểu xe bán Nhân viên bán xe Khi thuộc tính ‘Tên’ gán cho giá trị ‘Mark’ mơ tả đối tượng xác định tạo từ lớp ‘Khách hàng’ Định nghĩa Một thuộc tính đặc tính mơ tả đối tượng Như thế, thuộc tính nắm giữ giá trị liệu đối tượng, chúng định nghĩa đối tượng đặc thù Bởi lớp nguyên mẫu thuộc tính lớp khơng thể nắm giữ giá trị Một thuộc tính gán giá trị sau đối tượng dựa lớp tạo Để lưu giữ chi tiết khách hàng, trường hợp (đối tượng) lớp ‘Khách hàng’ phải tạo Các thuộc tính đối tượng hữu đối tượng tạo Mọi đối tượng lớp phải có thuộc tính Khảo sát ví dụ sau: Các thuộc tính lớp Con người Tên Chiều cao Màu tóc = = = Đối tượng tạo từ lớp Con người Mark ft in Black 1.4.2 Hoạt động (Operation) Các hành động khả thi, định nghĩa lớp, gọi ‘các hoạt động’ Chương 1: Lập Trình Hướng Đối Tượng ... Đối với ngôn ngữ lập trình hỗ trợ OOP việc triển khai kỹ thuật lập trình hướng đối tượng dễ dàng Kỹ thuật lập trình hướng đối tượng cải tiến việc phát triển hệ thống phần mềm Kỹ thuật đề cao nhân... tính cỗ máy Nó thực cơng việc lập trình mà thơi Vì thế, trách nhiệm lập trình viên cung cấp cho máy tính thơng tin theo cách thức mà nhận thức thực thể nhận thức Đó lãnh vực kỹ thuật hướng đối tượng... đối tượng Chúng ta sử dụng kỹ thuật hướng đối tượng để ánh xạ thực thể gặp phải đời sống thực thành thực thể tương tự máy tính Phát triển phần mềm theo kỹ thuật lập trình hướng đối tượng có khả