LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG BỘ TÀI CHÍNH HỌC VỆN TÀI CHÍNH 2018 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TS VŨ BÁ ANH Ths HÀ VĂN SANG sanghvhvtc edu vn A C A D E M Y O F F I N A N C E LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Trang.LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG BỘ TÀI CHÍNH HỌC VỆN TÀI CHÍNH 2018 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TS VŨ BÁ ANH Ths HÀ VĂN SANG sanghvhvtc edu vn A C A D E M Y O F F I N A N C E LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Trang.
BỘ TÀI CHÍNH HỌC VỆN TÀI CHÍNH LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG TS VŨ BÁ ANH Ths HÀ VĂN SANG sanghv@hvtc.edu.vn 2018 ACADEMY OF FINANCE LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Mục lục MỞ ĐẦU Chương GIỚI THIỆU VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Tổng quan kỹ thuật lập trình .6 1.1 Lập trình tuyến tính .6 1.2 Lập trình cấu trúc 1.3 Lập trình mơ đun hố 1.4 Nhược điểm lập trình hướng thủ tục .8 1.5 Lập trình hướng đối tượng Một số khái niệm 11 2.1 Hệ thống hướng đối tượng 11 2.2 Đối tượng (Objects) .12 2.3 Thuộc tính (Attribute) Phương thức (method) .12 2.4 Lớp (Class) lớp (SubClass) 12 2.5 Lớp trừu tượng 13 2.6 Truyền thông điệp .13 2.7 Sự trừu tượng hoá (abstraction) 14 2.8 Sự đóng gói (encapsulation) 14 2.9 Tính kế thừa 14 1.10 Tính đa hình .15 Các bước cần thiết để thiết kế chương trình theo hướng đối tượng 16 Các ưu điểm lập trình hướng đối tượng .16 Một số ngơn ngữ lập trình hướng đối tượng 16 Một số ứng dụng lập trình hướng đối tượng 18 Chương GIỚI THIỆU VỀ C++ 19 Lịch sử C++ 19 Các mở rộng C++ .19 2.1 Lời thích 19 Trang LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 2.2 Từ khoá 20 2.3 Kiểu liệu char int .20 2.4 Khai báo biến .20 2.5 Chuyển đổi ép kiểu 21 2.6 Vào C++ 22 2.7 Cấp phát giải phóng nhớ 26 2.8 Biến tham chiếu 28 2.9 Hằng tham chiếu 29 2.10 Truyền tham số cho hàm theo tham chiếu .30 2.11 Hàm với tham số có giá trị mặc định 34 2.12 Các hàm nội tuyến .35 2.13 Hàm tải bội 36 Chương LỚP VÀ ĐỐI TƯỢNG 39 Xây dựng lớp đối tượng 39 1.1 Khai báo lớp 39 1.2 Khai báo đối tượng 42 1.3 Truy xuất thành phần đối tượng .43 Các phương thức 46 2.1 Hàm khởi tạo - Constructor 46 2.2 Hàm hủy – Destructor 49 Đa hóa tóan tử 51 Mảng trỏ lớp .57 Các hàm bạn lớp bạn .59 5.1 Hàm bạn (friend function) 59 5.2 Lớp bạn 61 Thành phần tĩnh 63 6.1 Các thành phần liệu tĩnh 63 6.2 Các hàm thành viên tĩnh 64 Thành phần 67 7.1 Dữ liệu 67 Trang LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG 7.2 hàm thành phần (phương thức hằng) 69 Thành phần đối tượng .69 Chương TÍNH KẾ THỪA 72 Khái niệm 72 Khai báo lớp dẫn xuất .73 Các kiểu kế thừa 75 Định nghĩa lại quyền truy xuất 78 Hàm khởi tạo hàm hủy lớp sở 81 Đa kế thừa 84 Lớp sở ảo nhập nhằng đa kế thừa 86 Chương TÍNH ĐA HÌNH 90 Phương thức ảo 90 Phương thức ảo túy lớp trừu tượng 97 Chương KHN HÌNH MẪU 101 Template 101 a Khuôn hình hàm 101 b Khn hình lớp .105 Trang LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG MỞ ĐẦU Cơ sở lập trình học phần (CSLT) hai mơn học quan trọng sinh viên chuyên ngành Tin học Tài Kế tốn, ngành Hệ thống thơng tin quản lý thuộc Học viện Tài chính; mơn học giúp cho sinh viên nắm bắt lý thuyết chung khái niệm, phương pháp lập trình hướng đối tượng, sau đó, giúp sinh viên thực hành cài đặt chương trình cho tốn lĩnh vực Tài Kê tốn Hệ thống thơng tin kế tốn mỡi đơn vị Mơn học “Cơ sở lập trình” dành cho sinh viên chuyên ngành Tin học Tài Kế tốn chia thành học phần sau đây: - CSLT HP1: Nhập mơn Cơ sở lập trình học phần Học phần nhập mơn sẽ trình bày lý thuyết chung CSLT, đặc biệt tập trung giới thiệu kỹ thuật lập trình hướng cấu trúc sử dụng phổ biến - CSLT HP2: Lập trình hướng đối tượng với C++ Học phần sẽ trang bị cho sinh viên nội dung cần thiết để xây dựng chương trình hướng đối tượng lĩnh vực tài kế tốn - CSLT HP3: Lập trình ứng dụng web Học phần bị cho sinh viên kiến thức để lập trình mơi trường web thơng qua mạng máy tình; học phần cũng giúp cho sinh viên có khả tích hợp hệ quản trị CSLT HP2 với phần mềm khác (C#, VB, NET, Crystal Report) để quản trị ứng dụng mạng máy tính Bài giảng gốc “CSLT HP2” biên soạn nhằm phục vụ cho nhu cầu học tập nghiên cứu sinh viên chun ngành Tin học Tài Kế tốn, khoa Hệ thống thơng tin kinh tế, Học viện Tài Trong trình biên soạn Bài giảng gốc “CSLT học phần 2”, chương 1, Tiến sĩ Vũ Bá Anh (chủ biên), trình bày kiến thức để làm tảng cho lập trình cấu trúc lập trình hướng đối tượng Trong chương từ chương đến chương 6, Thạc sỹ Hà Văn Sang (đồng chủ biên) sẽ trình bày kiến thức tổng quan lập trình hướng đối tượng, điểm ngơn ngữ lập trình C++, khái niệm lớp, đối tượng, tính kế thừa, đa hình khn hình mẫu Trong mỡi chương đó, sẽ giới thiệu lý thuyết chung thành phần hướng đối tượng, sau lấy ví dụ minh họa cho việc xây dựng thành phần tương ứng trình xây dựng phần mềm tài Kế tốn Trang LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Chương GIỚI THIỆU VỀ LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Lập trình hướng đối tượng (Object-Oriented Programming-OOP), hay cịn gọi lập trình định hướng đối tượng, kỹ thuật lập trình hỡ trợ cơng nghệ đối tượng OOP xem là cách tiếp cận mới, hiệu việc giải vấn đề Nó giúp tăng suất, đơn giản hố độ phức tạp bảo trì cũng mở rộng phần mềm cách cho phép lập trình viên tập trung vào đối tượng phần mềm bậc cao Mục đích OOP giúp người lập trình giảm nhẹ thao tác viết mã, cho phép tạo ứng dụng mà yếu tố bên ngồi tương tác với ứng dụng tương tác với đối tượng vật lý Lập trình hướng đối tượng dễ học dựa vài khái niệm đơn giản mạnh Trước tìm hiểu kỹ thuật lập trình hướng đối tượng tìm hiểu lịch sử kỹ thuật lập trình Tổng quan kỹ thuật lập trình 1.1 Lập trình tuyến tính Lập trình tuyến tính thường dùng để viết chương trình nhỏ đơn giản gồm chương trình Chương trình gồm dãy câu lệnh dùng để thay đổi liệu Các ngơn ngữ lập trình thời kỳ thiết kế để giải tính tốn tương đối đơn giản Phần lớn chương trình ngắn, 100 dịng Cũng theo thời gian ngơn ngữ không đáp ứng việc triển khai phần mềm khuyết điểm lập trình tuyến tính: - Các ngơn ngữ khơng có khả sử dụng lại đoạn mã - Khơng có khả kiểm soát phạm vi truy xuất liệu - Mọi liệu chương trình tồn cục (global) Hình 1.1 Lập trình tuyến tính 1.2 Lập trình cấu trúc Lập trình cấu trúc đời vào cuối năm 1970 Các chương trình cấu trúc thường tổ chức theo công việc mà chúng thường thực Chương trình chia nhỏ thành chương trình riêng rẽ, mỡi chương trình thực Trang LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG nhiệm vụ Các chương trình thường gọi hàm thủ tục Các hàm thường độc lập với nhau, mỡi hàm có liệu riêng Thông tin chuyển giao hàm thơng qua tham số biến tồn cục Các biến cục hàm khơng thể truy xuất hàm khác Ở lập trình cấu trúc bắt đẫu xuất khái niệm trừu tượng hoá (Abstraction) Sự trừu tượng hố xem khả quan sát vật mà không quan tâm tới chi tiết bên Trong chương trình có cấu trúc ta quan tâm xem hàm thủ tục gì, cần tham số khơng quan tâm tới việc hàm thực lệnh Các ngơn ngữ hỡ trợ kỹ thuật lập trình có cấu trúc chương trình có cấu trúc dễ viết, dễ bảo dưỡng so với chương trình khơng có cấu trúc Một số ngơn ngữ cấu trúc điển hình C, Pascal, Foxpro… Hình 1.2 Lập trình cấu trúc 1.3 Lập trình mơ đun hố Với lập trình mơ đun, thủ tục có chung chức nhóm lại với thành môđun riêng lẻ Lúc chương trình khơng phần đơn mà chia thành số phần nhỏ Các phần tương tác với thông qua việc gọi thủ tục Trang LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Hình 1.3 Lập trình mơ đun hóa Mỡi mơđun có liệu riêng Điều cho phép mỡi mơđun quản lý liệu nó, liệu sửa đổi việc gọi thủ tục 1.4 Nhược điểm lập trình hướng thủ tục Một hệ thống phần mềm theo cách tiếp cận lập trình truyền thống xem dãy cơng việc cần thực đọc liệu, tính tốn, xử lý, lập báo cáo in ấn kết … Mỡi cơng việc sẽ thực hàm thủ tục định Đó tiếp cận lập trình hướng thủ tục Ta thấy trọng tâm cách tiếp cận hàm chức Lập trình hướng thủ tục sử dụng kỹ thuật phân hàm chức theo cách tiếp cận từ xuống để tạo cấu trúc phân cấp Các ngơn ngữ lập trình bậc cao COBOL, FORTRAN, PASCAL, C ngơn ngữ lập trình hướng thủ tục Những nhược điểm lập trình hướng thủ tục là: Chương trình khó kiểm sốt khó khăn việc bổ sung, nâng cấp Chương trình xây dựng theo cách tiếp cận hướng thủ tục thực chất danh sách câu lệnh mà theo máy tính cần thực Danh sách lệnh tổ chức thành nhóm theo đơn vị cấu trúc ngơn ngữ lập trình gọi hàm/thủ tục Trong chương trình có nhiều hàm/thủ tục, thường có nhiều thành phần liệu quan trọng sẽ khai báo toàn cục (global) để hàm truy nhập, đọc làm thay đổi giá trị biến toàn cục Điều làm cho chương trình khó kiểm sốt, chương trình lớn, phức tạp vấn đề trở nên khó khăn Khi ta Trang LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG muốn thay đổi, bổ sung cấu trúc liệu dùng chung cho số hàm/thủ tục phải thay đổi tất hàm/thủ tục liên quan tới liệu Chương trình chưa loại bỏ đoạn mã lặp lại Mơ hình xây dựng theo cách hướng thủ tục không mô tả đầy đủ, trung thực hệ thống thực tế Phương pháp tổ chức hướng thủ tục đặt trọng tâm vào hàm hướng tới hoạt động sẽ không thực tương ứng với thực thể hệ thống giới thực 1.5 Lập trình hướng đối tượng Tiếp cận hướng đối tượng Trong giới thực xung quanh đối tượng, thực thể có mối quan hệ với Ví dụ phịng cơng ty kinh doanh xem đối tượng Các phịng là: phịng quản ký, phịng bán hàng, phịng kế tốn, phịng tiếp thị… Mỡi phịng ngồi cán đảm nhiệm cơng việc cụ thể, cịn có liệu riêng thông tin nhân viên, doanh số bán hàng, liệu khác có liên quan tới phận Việc phân chia phịng chức cơng ty sẽ tạo điều kiện dễ dàng cho việc quản lý Mỡi nhân viên phịng sẽ điều khiển xử lý liệu phịng Ví dụ phịng kế toán phụ trách lương bổng nhân viên công ty Nếu bạn phận tiếp thị cần thông tin chi tiết lương đơn vị bạn gửi u cầu phịng kế toán Với cách làm việc bạn đảm bảo có nhân viên phận kế tốn quyền truy cập liệu cung cấp thông tin cho bạn Điều cũng cho thấy rằng, người thuộc phận khác truy cập thay đổi liệu phận kế toán Khái niệm đối tượng mở rộng lĩnh vực đời sống xã hội – việc tổ chức chương trình Mọi ứng dụng định nghĩa tập thực thể đối tượng, cho trình tái tạo suy nghĩ gần sát với giới thực Lập trình hướng đối tượng phương pháp lập trình lấy đối tượng làm tảng để xây dựng thuật giải, xây dựng chương trình Đối tượng xây dựng sở gắn cấu trúc liệu với phương thức (hàm/thủ tục) sẽ thể cách mà suy nghĩ, bao quát giới thực Lập trình hướng đối tượng cho phép ta kết hợp tri thức bao quát trình với khái niệm trừu tượng sử dụng máy tính Điểm phương pháp lập trình hướng đối tượng thiết kế xoay quanh liệu hệ thống Nghĩa thao tác xử lý hệ thống gắn liền với liệu có thay đổi cấu trúc liệu ảnh hưởng tới số phương thức xử lý liên quan Trang LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Lập trình hướng đối tượng không cho phép liệu chuyển động tự hệ thống Dữ liệu gắn chặt với phương thức thành vùng riêng mà phương thức tác động lên bảo vệ cấm việc truy nhập tuỳ tiện từ bên ngồi Lập trình hướng đối tượng cho phép phân tính tốn thành lập thực thể gọi đối tượng sau xây dựng liệu cũng với phương thức xung quanh đối tượng Lập trình OOP cho phép bạn tạo đối tượng, đối tượng lưu trữ thư viện sử dụng lại cơng việc khác Nó tiết kiệm thời gian cho người lập trình, nhiều cơng ty phần mềm xây dựng thư viện bán thị trường, từ giúp cho người lập trình dễ dàng tạo ngơn ngữ lập trình hướng đối tượng sử dụng "OPC" (Other People's Code) OOP cho phép bạn định nghĩa đối tượng bao gồm cấu trúc liệu phương thức xử lý liệu Một phương thức định nghĩa chương trình có cấu trúc nhỏ bên đối tượng Các phương thức xác định đối tượng sẽ hoạt động Một lớp lại định nghĩa đối tượng, khái niệm đóng kín liệu phương thức đối tượng gọi đóng kín hay đóng gói Lập trình hướng đối tượng bao gồm kỹ thuật lập trình cấu trúc cấu trúc liệu nâng cao Nó giúp cho người phát triển kết hợp liệu phương thức vào thành phần gọi đối tượng Nói cách khác, đối tượng bao gồm thứ cần thiết cho việc thực thi tập hợp hàm, bao gồm liệu Hình 1.4 Lập trình hướng đối tượng Lập trình hướng đối tượng kỹ thuật lập trình Nó thiết kế nhằm tiết kiệm thời gian tiền bạc thông qua việc cho phép người lập trình sử dụng lại đoạn mã chương trình Khả tái sử dụng hồn thiện qua tính kế thừa Có Trang 10 LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG p=(a+b+c)/2 s=sqrt(p*(p-a)*(p-b)*(p-c)); return s; } }; void HV::nhap() { couta; } void HTG::in() { cout