Tài liệu BÀI GIẢNG MÔN Lập trình hướng đối tượng và C++ docx

127 997 8
Tài liệu BÀI GIẢNG MÔN Lập trình hướng đối tượng và C++ docx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng Lập trình hớng đối tợng v C ++ iả: u Tu tuannhtn@yahoo.com 1 BI GING MễN Lp trỡnh hng ủi tng v C++ Phn A: Gii thiu Chng 1: Lp trỡnh hng ủi tng v ngụn ng C++.(3 tit) 1. S phỏt trin ca cỏc k thut lp trỡnh Phn ny trỡnh by v mt s k thut hay phng phỏp lp trỡnh ủc phỏt trin ủ gii quyt cỏc vn ủ trong Tin hc k t khi mỏy tớnh ra ủi. S phỏt trin ca cỏc k thut lp trỡnh liờn quan cht ch ti s phỏt trin phn cng ca mỏy vi tớnh cng nh vic ng dng mỏy tớnh vo gii quyt cỏc vn ủ trong thc t. Chỳng ta cú th chia cỏc phng phỏp lp trỡnh thnh cỏc kiu sau: Lp trỡnh khụng cú cu trỳc Lp trỡnh hng th tc Lp trỡnh theo kiu module húa Lp trỡnh hng ủi tng Chỳng ta s ln lt xem xột cỏc k thut lp trỡnh ny. 1.1 Lp trỡnh khụng cú cu trỳc (hay lp trỡnh tuyn tớnh) Thụng thng mi ngi bt ủu hc lp trỡnh bng cỏch vit cỏc chng trỡnh nh v ủn gin ch cha mt chng trỡnh chớnh. ủõy mt chng trỡnh chớnh cú ngha l mt tp cỏc lnh hoc cõu lnh lm vic vi cỏc d liu ton cc trong c chng trỡnh (cỏc bin dựng trong chng trỡnh l cỏc bin ton cc). Chỳng ta cú th minh ho bng hỡnh v sau ủõy: Mt s nhc ủim ca lp trỡnh khụng cú cu trỳc: Lp trỡnh khụng cú cu trỳc khụng cú kh nng kim soỏt tớnh thy ủc ca d liu. Mi d liu trong chng trỡnh ủu l bin ton cc do ủú cú th b thay ủi bi bt k phn no ủú ca chng trỡnh. Vic khụng kim soỏt ủc tớnh thy ủc ca d liu dn ủn cỏc khú khn trong vic g li chng trỡnh, ủc bit l cỏc chng trỡnh ln. K thut lp trỡnh khụng cú cu trỳc cú rt nhiu bt li ln khi chng trỡnh ủ ln. Vớ d nu chỳng ta cn thc hin li mt ủon cõu lnh trờn mt tp d liu khỏc thỡ buc phi copy ủon lnh ủú ti v trớ trong chng trỡnh m chỳng ta mun thc hin. iu ny lm ny sinh ý tng trớch ra cỏc ủon lnh thng xuyờn cn thc hin ủú, ủt tờn cho chỳng v ủa ra mt k thut cho phộp gi v tr v cỏc giỏ tr t cỏc th tc ny. Lp trỡnh khụng cú cu trỳc. Chng trỡnh chớnh thao tỏc trc tip trờn cỏc d liu ton cc Bµi gi¶ng LËp tr×nh h−íng ®èi t−îng C ++ i¶: u Tu tuannhtn@yahoo.com 2 1.2 Lập trình thủ tục hay lập trình có cấu trúc Với lập trình thủ tục hay hướng thủ tục chúng ta có thể nhóm các câu lệnh thường xuyên thực hiện trong chương trình chính lại một chỗ ñặt tên ñoạn câu lệnh ñó thành một thủ tục. Một lời gọi tới thủ tục sẽ ñược sử dụng ñể thực hiện ñoạn câu lệnh ñó. Sau khi thủ tục thực hiện xong ñiều khiển trong chương trình ñược trả về ngay sau vị trí lời gọi tới thủ tục trong chương trình chính. Với các cơ chế truyền tham số cho thủ tục chúng ta có các chương trình con. Một chương trình chính bao gồm nhiều chương trình con các chương trình ñược viết mang tính cấu trúc cao hơn, ñồng thời cũng ít lỗi hơn. Nếu một chương trình con là ñúng ñắn thì kết quả thực hiện trả về luôn ñúng chúng ta không cần phải quan tâm tới các chi tiết bên trong của thủ tục. Còn nếu có lỗi chúng ta có thể thu hẹp phạm vi gỡ lỗi trong các chương trình con chưa ñược chứng minh là ñúng ñắn, ñây ñược xem như trừu tượng hàm là nền tảng cho lập trình thủ tục. Một chương trình chính với lập trình thủ tục có thể ñược xem là tập hợp các lời gọi thủ tục. Chương trình chính có nhiệm vụ truyền các dữ liệu cho các lời gọi cụ thể, dữ liệu ñược xử lý cục bộ trong chương trình con sau ñó các kết quả thực hiện này ñược trả về cho chương trình chính. Như vậy luồng dữ liệu có thể ñược minh họa như là một ñồ thị phân cấp, một cây: Lập trình thủ tục. Sau khi chương trình con thực hiện xong ñiều khiển ñược trả về ngay sau vị trí lời gọi tới chương trình con Lập trình hướng thủ tục. Chương trình chính phối hợp các lời gọi tới các thủ tục với các dữ liệu thích hợp là các tham số Bài giảng Lập trình hớng đối tợng v C ++ iả: u Tu tuannhtn@yahoo.com 3 Lp trỡnh hng th tc l mt k thut lp trỡnh cú nhiu u ủim. Khỏi nim chng trỡnh con l mt ý tng rt hay, nú cho phộp mt chng trỡnh ln cú th ủc chia thnh nhiu chng trỡnh con nh hn, ủo ủú d vit hn v ớt li hn. cú th s dng ủc cỏc th tc chung hoc mt nhúm cỏc th tc trong cỏc chng trỡnh khỏc, ngi ta ủó phỏt minh ra mt k thut lp trỡnh mi, ủú l k thut lp trỡnh theo kiu module. 1.3 Lp trỡnh module Trong lp trỡnh module cỏc th tc cú cựng mt chc nng chung s ủc nhúm li vi nhau to thnh mt module riờng bit. Mt chng trỡnh s khụng ch bao gm mt phn ủn l. Nú ủc chia thnh mt vi phn nh hn tng tỏc vi nhau qua cỏc li gi th tc v to thnh ton b chng trỡnh. Mi module cú d liu riờng ca nú. iu ny cho phộp cỏc module cú th kim soỏt cỏc d liu riờng ca nú bng cỏc li gi ti cỏc th tc trong module ủú. Tuy nhiờn mi module ch xut hin nhiu nht mt ln trong c chng trỡnh. Yu ủim ca lp trỡnh th tc v lp trỡnh module húa: Khi ủ phc tp ca chng trỡnh tng lờn s ph thuc ca nú vo cỏc kiu d liu c bn m nú x lý cng tng theo. Vn ủ tr nờn rừ rng rng cu trỳc d liu s dng trong chng trỡnh cng quan trng khụng kộm cỏc phộp toỏn thc hin trờn chỳng. iu ny cng l rừ khi kớch thc chng trỡnh tng. Cỏc kiu d liu ủc x lý nhiu trong cỏc th tc ca mt chng trỡnh cú cu trỳc. Do ủú khi thay ủi ci ủt ca mt kiu d liu s dn ủn nhiu thay ủi trong cỏc th tc s dng nú. Mt nhc ủim na l khi cn dựng nhiu nhúm lm vic ủ xõy dng mt chng trỡnh chung. Trong lp trỡnh cú cu trỳc mi ngi s ủc giao xõy dng mt s th tc v kiu d liu. Nhng lp trỡnh viờn x lý cỏc th tc khỏc nhau nhng li cú liờn quan ti cỏc kiu d liu dựng chung nờn nu mt ngi thay ủi Lp trỡnh module. Chng trỡnh chớnh l s kt hp gia cỏc li gi ti cỏc th tc trong cỏc module riờng bit vi cỏc d liu thớch hp Bµi gi¶ng LËp tr×nh h−íng ®èi t−îng C ++ i¶: u Tu tuannhtn@yahoo.com 4 kiểu dữ liệu thì sẽ làm ảnh hưởng tới công việc của nhiều người khác, ñặc biệt là khi có sai sót trong việc liên lạc giữa các thành viên của nhóm. • Việc phát triển các phầm mềm mất nhiều thời gian tập trung xây dựng lại các cấu trúc dữ liệu cơ bản. Khi xây dựng một chương trình mới trong lập trình có cấu trúc lập trình viên thường phải xây dựng lại các cấu trúc dữ liệu cơ bản cho phù hợp với bài toán ñiều này ñôi khi rất mất thời gian. 1.4 Lập trình hướng ñối tượng Trong lập trình hướng ñối tượng trong mỗi chương trình chúng ta có một số các ñối tượng (object) có thể tương tác với nhau, thuộc các lớp (class) khác nhau, mỗi ñối tượng tự quản lý lấy các dữ liệu của riêng chúng. Chương trình chính sẽ bao gồm một số ñối tượng là thể hiện (instance) của các lớp, các ñối tượng này tương tác với nhau thực hiện các chức năng của chương trình. Các lớp trong lập trình hướng ñối tượng có thể xem như là một sự trừu tượng ở mức cao hơn của các cấu trúc (struct hay record) hay kiểu dữ liệu do người dùng ñịnh nghĩa trong các ngôn ngữ lập trình có cấu trúc với sự tích hợp cả các toán tử dữ liệu trên các kiểu ñó. Các ưu ñiểm của lập trình hướng ñối tượng: • Lập trình hướng ñối tượng ra ñời ñã giải quyết ñược nhiều nhược ñiểm tồn tại trong lập trình có cấu trúc. Trong lập trình OOP có ít lỗi hơn việc gỡ lỗi cũng ñơn giản hơn, ñồng thời lập trình theo nhóm có thể thực hiện rất hiệu quả. Ít lỗi là một trong các ưu ñiểm chính của OOP vì theo thống kê thì việc bảo trì hệ thống phần mềm sau khi giao cho người dùng chiếm tới 70% giá thành phần mềm. • Việc thay ñổi các cài ñặt chi tiết bên dưới trong lập trình OOP không làm ảnh hương tới các phần khác của chương trình do ñó việc mở rộng qui mô của một chương trình dễ dàng hơn, ñồng thời làm giảm thời gian cần thiết ñể phát triển phần mềm. Lập trình hướng ñối tượng. Các ñối tượng tương tác với nhau bằng cách gửi các thông ñiệp. Bµi gi¶ng LËp tr×nh h−íng ®èi t−îng C ++ i¶: u Tu tuannhtn@yahoo.com 5 • Với khái niệm kế thừa các lập trình viên có thể xây dựng các chương trình từ các phần mềm sẵn có. • OOP có tính khả chuyển cao. Một chương trình viết trên một hệ thống nền (chẳng hạn Windows) có thể chạy trên nhiều hệ thống nền khác nhau (chẳng hạn Linux, Unix…). • OOP có hiệu quả cao. Thực tế cho thấy các hệ thống ñược xây dựng bằng OOP có hiệu năng cao. 2. Một số khái niệm cơ bản của lập trình hướng ñối tượng 1.1 Kiểu dữ liệu trừu tượng ADT(Astract Data Type) Một số người ñịnh nghĩa OOP là lập trình với các kiểu dữ liệu trừu tượng các mối quan hệ giữa chúng. Trong phần này chúng ta sẽ xem xét các kiểu dữ liệu trừu tượng như là một khái niệm cơ bản của OOP sử dụng một số ví dụ ñể minh họa. Định nghĩa về kiểu dữ liệu trừu tượng: Một kiểu dữ liệu trừu tượng là một mô hình toán học của các ñối tượng dữ liệu tạo thành một kiểu dữ liệu các toán tử (phép toán) thao tác trên các ñối tượng ñó. Chú ý là trong ñịnh nghĩa này các toán tử thao tác trên các ñối tượng dữ liệu gắn liền với các ñối tượng tạo thành một kiểu dữ liệu trừu tượng. Đặc tả về một kiểu dữ liệu trừu tượng không có bất kỳ một chi tiết cụ thể nào về cài ñặt bên trong của kiểu dữ liệu. Việc cài ñặt một kiểu dữ liệu trừu tượng ñòi hỏi một quá trình chuyển ñổi từ ñặc tả của nó sang một cài ñặt cụ thể trên một ngôn ngữ lập trình cụ thể. Điều này cho phép chúng ta phân biệt các ADT với các thuật ngữ kiểu dữ liệu (data type) cấu trúc dữ liệu (data structure). Thuật ngữ kiểu dữ liệu ñề cập tới một cài ñặt cụ thể (có thể là kiểu built in hoặc do người dùng ñịnh nghĩa) của một mô hình toán học ñược ñặc tả bởi một ADT. Cấu trúc dữ liệu ñề cập tới một tập các biến có cùng kiểu ñược gắn kết với nhau theo một cách thức xác ñịnh nào ñó. Ví dụ về kiểu dữ liệu trừu tượng: Số nguyên. Kiểu dữ liệu trừu tượng số nguyên: ADT Integer: Dữ liệu: một tập các chữ số một dấu tiền tố là + hoặc Chúng ta ký hiệu cả số là N. Các toán tử: constructor: khởi tạo một số nguyên sub(k): trả về hiệu N – k. add(k): trả về tổng N + k. …… End 1.2 Đối tượng (Objects) lớp (Classes) Trong một chương trình hướng ñối tượng chúng ta có các ñối tượng. Các ñối tượng này là ñại diện cho các ñối tượng thực trong thực tế. Có thể coi khái niệm ñối tượng trong OOP chính là các kiểu dữ liệu trong các ngôn ngữ lập trình có cấu trúc. Mỗi một ñối tượng có các dữ liệu riêng của nó ñược gọi là các member variable hoặc là các data member. Các toán tử thao tác trên các dữ liệu này ñược gọi là các member function. Mỗi một ñối tượng là thể hiện (instance) của một lớp. Như vậy lớp là ñại diện cho các ñối tượng có các member function giống nhau các data member cùng kiểu. Lớp Bµi gi¶ng LËp tr×nh h−íng ®èi t−îng C ++ i¶: u Tu tuannhtn@yahoo.com 6 là một sự trừu tượng hóa của khái niệm ñối tượng. Tuy nhiên lớp không phải là một ADT, nó là một cài ñặt của một ñặc tả ADT. Các ñối tượng của cùng một lớp có thể chia sẻ các dữ liệu dùng chung, dữ liệu kiểu này ñược gọi là class variable. 1.3 Kế thừa (Inheritance) Khái niệm kế thừa này sinh từ nhu cầu sử dụng lại các thành phần phần mềm ñể phát triển các phần mềm mới hoặc mở rộng chức năng của phần mềm hiện tại. Kế thừa là một cơ chế cho phép các ñối tượng của một lớp có thể truy cập tới các member variable function của một lớp ñã ñược xây dựng trước ñó mà không cần xây dựng lại các thành phần ñó. Điều này cho phép chúng ta có thể tạo ra các lớp mới là một mở rộng hoặc cá biệt hóa của một lớp sẵn có. Lớp mới (gọi là derived class) kế thừa từ lớp cũ (gọi là lớp cơ sở base class). Các ngôn ngữ lập trình hướng ñối tượng có thể hỗ trợ khái niệm ña kế thừa cho phép một lớp có thể kế thừa từ nhiều lớp cơ sở. Lớp kế thừa derived class có thể có thêm các data member mới hoặc các member function mới. Thêm vào ñó lớp kế thừa có thể tiến hành ñịnh nghĩa lại một hàm của lớp cơ sở trong trường hợp này người ta nói rằng lớp kế thừa ñã overload hàm thành viên của lớp cơ sở. 1.4 Dynamic Binding (tạm dịch là ràng buộc ñộng) Porlymorphism (ña xạ hoặc ña thể) Chúng ta lấy một ví dụ ñể minh hoạ cho hai khái niệm này. Giả sử chúng ta có một lớp cơ sở là Shape, hai lớp kế thừa từ lớp Shape là Circle Rectange. Lớp Shape là một lớp trừu tượng có một member function trừu tượng là draw(). Hai lớp Circle Rectange thực hiện overload lại hàm draw của lớp Shape với các chi tiết cài ñặt khác nhau chẳng hạn với lớp Circle hàm draw sẽ vẽ một vòng tròn còn với lớp Rectange thì sẽ vẽ một hình chữ nhật. chúng ta có một ñoạn chương trình chính hợp lệ như sau: int main(){ Shape shape_list[4]; int choose; int i; for(i=0;i<4;i++){ cout << “Ngay muon ve hinh tron(0) hay hinh chu nhat(1)”; cin >> choose; if(choose==0){ shape_list[i] = new Circle(); }else{ shape_list[i] = new Rectange(); } } for(i=0;i<4;i++){ shape_list[i]->draw(); } } Khi biên dịch chương trình này thành mã thực hiện (file .exe) trình biên dịch không thể xác ñịnh ñược trong mảng shape_list thì phần tử nào là Circle phần tử nào là Rectange do ñó không thể xác ñịnh ñược phiên bản nào của hàm draw sẽ ñược gọi Bài giảng Lập trình hớng đối tợng v C ++ iả: u Tu tuannhtn@yahoo.com 7 thc hin. Vic gi ti phiờn bn no ca hm draw ủ thc hin s ủc quyt ủnh ti thi ủim thc hin chng trỡnh, sau khi ủó biờn dch v ủiu ny ủc gi l dynamic binding hoc late binding. Ngc li nu vic xỏc ủnh phiờn bn no s ủc gi thc hin tng ng vi d liu gn vi nú ủc quyt ủnh ngay trong khi biờn dch thỡ ngi ta gi ủú l static binding. Vớ d ny cng cung cp cho chỳng ta mt minh ha v kh nng ủa th (polymorphism). Khỏi nim ủa th ủc dựng ủ ch kh nng ca mt thụng ủip cú th ủc gi ti cho cỏc ủi tng ca nhiu lp khỏc nhau ti thi ủim thc hin chng trỡnh. Chỳng ta thy rừ li gi ti hm draw s ủc gi ti cho cỏc ủi tng ca hai lp Circle v Rectange ti thi ủim chng trỡnh ủc thc hin. Ngoi cỏc khỏi nim c bn trờn OOP cũn cú thờm mt s khỏi nim khỏc chng hn nh name space v exception handling nhng khụng phi l cỏc khỏi nim bn cht. 3. Ngụn ng lp trỡnh C++ v OOP. Ging nh bt k mt ngụn ng no ca con ngi, mt ngụn ng lp trỡnh l phng tin ủ din t cỏc khỏi nim, ý tng. Vic phỏt trin cỏc chng trỡnh hay phn mm l quỏ trỡnh mụ hỡnh húa cỏc trng thỏi t nhiờn ca th gii thc v xõy dng cỏc chng trỡnh da trờn cỏc mụ hỡnh ủú. Cỏc chng trỡnh thc hin chc nng mụ t phng phỏp ci ủt ca mụ hỡnh. Cỏc th h ngụn ng lp trỡnh: Cú th phõn chia cỏc th h ngụn ng lp trỡnh thnh 4 th h: 1: vo nm 1954 1958 (Fortran I) vi ủc ủim l cỏc biu thc toỏn hc 2: vo nm 1959 1961 (Fortran II, Cobol) vi cỏc th tc 3: vo nhng nm 1962 1970 (Pascal, Simula) vi ủc trng l cỏc khi, cỏc lp 4: ủang phỏt trin cha cú dn chng thc t. Cỏc ngụn ng ny ngy cng cỏch xa ngụn ng mỏy v cỏc trỡnh biờn dch ca chỳng ngy cng phi lm vic nhiu hn. 1.1 S phỏt trin ca cỏc ngụn ng lp trỡnh hng ủi tng 1967 Simula 1970 to 1983 Smalltalk 1979 Common LISP Object System 1980 Stroustrup starts on C++ 1981 Byte Smalltalk issue 1983 Objective C 1986 C++ 1987 Actor, Eiffel 1991 C++ release 3.0 1995 Java Bµi gi¶ng LËp tr×nh h−íng ®èi t−îng C ++ i¶: u Tu tuannhtn@yahoo.com 8 1983 to 1989 Language books with OO concepts 1989 to 1992 Object-oriented design books 1992 to present Object-oriented methodology books Other Languages Java Self Python Perl Prograph Modula 3 Oberon Smalltalk Venders ParcPlace, Digitalk, Quasar Prolog++ Ada 9X Object Pascal (Delphi) Object X, X = fortran, cobal, etc. C#. Như vậy là có rất nhiều ngôn ngữ lập trình hướng ñối tượng ñã ra ñời chiếm ưu thế trong số chúng là C++ Java. Mỗi ngôn ngữ ñều có ñặc ñiểm riêng của nó thích hợp với các lĩnh vực khác nhau nhưng có lẽ C++ là ngôn ngữ cài ñặt nhiều ñặc ñiểm của OOP nhất. 1.2 Ngôn ngữ lập trình C++. C++ là một ngôn ngữ lập trình hướng ñối tượng ñược Bjarne Stroustrup (AT & T Bell Lab) (giải thưởng ACM Grace Murray Hopper năm 1994) phát triển từ ngôn ngữ C. C++ kế thừa cú pháp một số ñặc ñiểm ưu việt của C: ví dụ như xử lý con trỏ, thư viện các hàm phong phú ña dạng, tính khả chuyển cao, chương trình chạy nhanh …. Tuy nhiên về bản chất thì C++ khác hoàn toàn so với C, ñiều này là do C++ là một ngôn ngữ lập trình hướng ñối tượng. Phần B: Ngôn ngữ C++ lập trình hướng ñối tượng Chương 2: Những khái niệm mở ñầu. (6 tiết) 1. Chương trình ñầu tiên 1.1 Quá trình biên dịch một chương trình C++ Tất cả các ngôn ngữ trên máy tính ñều ñược dịch từ một dạng nào ñó mà con người có thể hiểu ñược một cách dễ dàng (các file mã nguồn ñược viết bằng một ngôn ngữ bậc cao) sang dạng có thể thực hiện ñược trên máy tính (các lệnh dưới dạng ngôn ngữ máy). Các chương trình thực hiện quá trình này chia thành hai dạng ñược gọi tên là các trình thông dịch (interpreter) các trình biên dịch (compiler). Trình thông dịch: Một trình thông dịch sẽ dịch mã nguồn thành các hành ñộng (activity), các hành ñộng này có thể bao gồm một nhóm các lệnh máy tiến hành thực hiện ngay lập tức các hành ñộng này. Ví dụ như BASIC là một ngôn ngữ ñiển hình cho các ngôn ngữ thông dịch. BASIC cổ ñiển thông dịch từng dòng lệnh thực hiện sau ñó quên ngay lập tức dòng lệnh vừa thông dịch. Điều này làm cho quá Bµi gi¶ng LËp tr×nh h−íng ®èi t−îng C ++ i¶: u Tu tuannhtn@yahoo.com 9 trình thực hiện cả một chương trình chậm vì bộ thông dịch phải tiến hành dịch lại các ñoạn mã trùng lặp. BASIC ngày nay ñã thêm vào qúa trình biên dịch ñể cải thiện tốc ñộ của chương trình. Các bộ thông dịch hiện ñại chẳng hạn như Python, tiến hành dịch toàn bộ chương trình qua một ngôn ngữ trung gian sau ñó thực hiện bằng một bộ thông dịch nhanh hơn rất nhiều. Các ngôn ngữ làm việc theo kiểu thông dịch thường có một số hạn chế nhất ñịnh khi xây dựng các dự án lớn (Có lẽ chỉ duy nhất Python là một ngoại lệ). Bộ thông dịch cần phải luôn ñược lưu trong bộ nhớ ñể thực hiện các mã chương trình, thậm chí ngay cả bộ thông dịch có tốc ñộ nhanh nhất cũng không thể cải thiện ñược hoàn toàn các hạn chế tốc ñộ.Hầu hết các bộ thông dịch ñều yêu cầu toàn bộ mã nguồn cần phải ñược thông dịch một lần duy nhất. Điều này không những dẫn ñến các hạn chế về kích thước của chương trình mà còn tạo ra các lỗi rất khó gỡ rối nếu như ngôn ngữ không cung cấp các công cụ hiệu quả ñể xác ñịnh hiệu ứng của các ñoạn mã khác nhau. Trình biên dịch: Một trình biên dịch dịch mã nguồn trực tiếp thành ngôn ngữ assembly hoặc các lệnh máy. Kết quả cuối cùng là một file duy nhất hoặc các file chứa các mã máy. Đây là một quá trình phức tạp ñòi hỏi một vài bước. Quá trình chuyển ñổi từ mã chương trình ban ñầu thành mã thực hiện là tương ñối dài ñối với một trình biên dịch. Tùy thuộc vào sự nhạy cảm của người viết trình biên dịch, các chương trình sinh ra bởi một trình biên dịch có xu hướng ñòi hỏi ít bộ nhớ hơn khi thực hiện, chúng chạy nhanh hơn rất nhiều. Mặc dù kích thước tốc ñộ thường là các lý do hàng ñầu cho việc sử dụng một trình biên dịch, trong rất nhiều trường hợp ñây không phải là các lý do quan trọng nhất. Một vài ngôn ngữ (chẳng hạn như C) ñược thiết kế ñể các phần tách biệt của một chương trình có thể ñược biên dịch ñộc lập hoàn toàn với nhau. Các phần này sau ñó thậm chí có thể kết hợp thành một chương trình thực hiện cuối cùng duy nhất bởi một công cụ có tên là trình liên kết. Quá trình này gọi là separate compilation (biên dịch ñộc lập). Biên dịch ñộc lập có rất nhiều ñiểm lợi. Một chương trình nếu dịch ngay lập tức toàn bộ sẽ vượt quá các giới hạn của trình biên dịch hay môi trường biên dịch có thể ñược biên dịch theo từng phần. Các chương trình có thể ñược xây dựng kiểm thử từng phần một. Nếu mọt phần nào ñó ñã làm việc ñúng ñắn nó có thể ñược lưu lại như là một khối ñã hoàn thành. Tập các phần ñã làm việc ñược kiểm thử có thể kết hợp lại với nhau tạo thành các thư viện ñể các lập trình viên khác có thể sử dụng. Các ñặc ñiểm này hỗ trợ cho việc tạo ra các chương trình lớn. Các ñặc ñiểm gỡ lỗi của trình biên dịch ñã cải tiến một cách ñáng kể qua thời gian. Các trình biên dịch ñầu tiên chỉ sinh ra mã máy, lập trình viên phải chèn các câu lệnh in vào ñể xem thực sự chương trình ñang làm gì. Điều này không phải lúc nào cũng hiệu quả. Các trình biên dịch hiện ñại có thể chèn các thông tin về mã nguồn vào mã thực hiện của chương trình. Thông tin này sẽ ñược sử dụng bởi các bộ gỡ lỗi cấp ñộ nguồn ñầy năng lực ñể chỉ ra chính xác ñiều gì ñang diễn ra trong một chương trình bằng cách theo dấu (tracing) quá trình thực hiện của nó qua toàn bộ mã nguồn. Một vài trình biên dịch giải quyết vấn ñề tốc ñộ biên dịch bằng cách thực hiện quá trình biên dịch trong bộ nhớ (in-memory compilation). Các trình biên dịch theo kiểu này lưu trình biên dịch trong bộ nhớ RAM. Đối với các chương trình nhỏ, quá trình này có thể xem như là một trình thông dịch. Bài giảng Lập trình hớng đối tợng v C ++ iả: u Tu tuannhtn@yahoo.com 10 Quỏ trỡnh biờn dch lp trỡnh bng C v C++ chỳng ta cn phi hiu cỏc bc v cỏc cụng c trong quỏ trỡnh biờn dch. Mt vi ngụn ng (ủc bit l C v C++) bt ủu thc hin quỏ trỡnh biờn dch bng cỏch chy mt b tin x lý ủi vi mó ngun. B tin x lý l mt chng trỡnh ủn gin thay th cỏc mu trong mó ngun bng cỏc mu khỏc m cỏc lp trỡnh viờn ủó ủnh ngha (s dng cỏc ch th tin x lý: preprocessor directives). Cỏc ch th tin x lý ủc s dng ủ tit kim vic gừ cỏc ủon chng trỡnh thng xuyờn s dng v tng kh nng d ủc cho mó ngun. Tuy nhiờn cỏc ch th tin x lý ny ủụi khi cng gõy ra nhng li rt tinh vi v khú phỏt hin. Mó sinh ra bi b tin x lý ny thng ủc ghi lờn mt file tm. Cỏc trỡnh biờn dch thng thc hin cụng vic ca nú theo hai pha. u tiờn l phõn tớch mó tin x lý. B biờn dch chia mó tin x lý thnh cỏc ủn v nh v t chc chỳng thnh mt cu trỳc gi l cõy. Vớ d nh trong biu thc: A+B cỏc phn t A, +, B s ủc lu trờn nỳt ca cõy phõn tớch. Mt b ti u húa ton cc (global optimizer) ủụi khi cng ủc s dng ủ to ra mó chng trỡnh nh hn, nhanh hn. Trong pha th hai, b sinh mó duyt qua cõy phõn tớch v sinh ra hoc l mó assemble hoc mó mỏy cho cỏc nỳt ca cõy. Nu nh b sinh mó to ra mó assembly, thỡ sau ủú chng trỡnh dch mó assembler s thc hin cụng vic tip theo. Kt qu ca hai trng hp trờn ủu l mt module object (mt file thng cú ủuụi l .o hoc .obj). Sau ủú mt b ti u hoỏ nh (peep-hole) s ủc s dng ủ loi b cỏc ủon cha cỏc cõu lnh assembly tha. Vic s dng t object ủ mụ t cỏc ủon mó mỏy l mt thc t khụng ủỳng lm. T ny ủó ủc dựng trc c khi lp trỡnh hng ủi tng ra ủi. T object ủc s dng cú ý ngha nh l t goal khi núi v vic biờn dch, trong khi ủú trong lp trỡnh hng ủi tng nú li cú ngha l a thing with boundaries. Trỡnh liờn kt kt hp mt danh sỏch cỏc module object thnh mt chng trỡnh thc hin cú th np vo b nh v thc hin bi h ủiu hnh. Khi mt hm trong mt module object to ra mt tham chiu ti mt hm hoc mt bin trong mt module object khỏc, trỡnh liờn kt s sp xp li cỏc tham chiu ny; ủiu ny ủm bo rng tt c cỏc hm v d liu external ủc s dng trong quỏ trỡnh biờn dch l ủu tn ti. Trỡnh liờn kt cng thờm vo cỏc module object ủc bit ủ thc hin cỏc hnh ủng khi ủng. Trỡnh liờn kt cú th tỡm kim trờn cỏc file ủc bit gi l cỏc th vin ủ sp xp li tt c cỏc tham chiu ti chỳng. Mi th vin cha mt tp cỏc module object trong mt file. Mt th vin ủc to ra v bo trỡ bi mt lp trỡnh viờn cú tờn l librarian. Kim tra kiu tnh Trỡnh biờn dch thc hin kim tra kiu trong pha ủu tiờn ca quỏ trỡnh biờn dch. Quỏ trỡnh kim tra ny thc hin kim th vic s dng cỏc tham s ca cỏc hm v ngn chn rt nhiu li lp trỡnh khỏc nhau. Vỡ quỏ trỡnh kim tra kiu ủc thc hin trong qỳa trỡnh biờn dch ch khụng phi trong quỏ trỡnh chng trỡnh thc hin nờn nú ủc gi l kim tra kiu tnh. Mt vi ngụn ng lp trỡnh hng ủi tng (Java chng hn) thc hin kim tra kiu ti thi ủim chng trỡnh chy (dynamic type checking). Nu kt hp c vic [...].. .Bài giảng Lập trình hớng đối tợng v C++ iả: u Tu ki m tra ki u tnh v ủ ng thỡ s hi u qu hn nhng ki m tra ki u ủ ng cng lm cho chng trỡnh th c hi n b nh h ng ủụi chỳt C++ s d ng ki m tra ki u tnh Ki m tra ki u tnh bỏo cho l p trỡnh viờn v cỏc l i v s d ng sai ki u d li u trong quỏ trỡnh biờn d ch, v do ủú t i u húa t c ủ th c hi n chng trỡnh Khi h c C++ chỳng ta s th y h u h... file header v liờn k t cỏc module object l cỏc b c c b n ủ th c hi n vi c biờn d ch ủ c l p trong C v C++ 12 tuannhtn@yahoo.com Bài giảng Lập trình hớng đối tợng v C++ iả: u Tu Trỡnh liờn k t lm th no ủ tỡm m t file th vi n Khi chỳng ta t o ra m t tham chi u ngoi t i m t hm s ho c m t bi n s trong C ho c C++, trỡnh liờn k t, khi b t g p tham chi u ny, cú th th c hi n m t trong hai vi c sau: n u nú cha... kớch th c b nh c n s d ng Cỏc bi toỏn ủ qui th ng ủ c gi i quy t theo chi n l c chia ủ tr 5 Cỏc ki u d li u c b n c a C++ Cỏc ki u d li u c b n c a C++ h u h t ủ u k th a c a C ngo i tr ki u bool v i hai h ng s true v false 22 tuannhtn@yahoo.com Bài giảng Lập trình hớng đối tợng v C++ iả: u Tu c t c a ngụn ng C chu n cho cỏc ki u d li u built in khụng ch rừ c th cỏc ki u d li u ny c n bao nhiờu bit... xỏc ủ nh l trong c p { v } g n nh t bao nú T t nhiờn t m ho t ủ ng c a cỏc bi n cú th ch ng lờn nhau 15 tuannhtn@yahoo.com Bài giảng Lập trình hớng đối tợng v C++ iả: u Tu 2.3 Khai bỏo bi n ngay trong cỳ phỏp c a cỏc cõu l nh ủi u khi n Nh chỳng ta ủó bi t trong cỏc chng trỡnh C++ vi c khai bỏo bi n l khỏ t do Cỏc bi n cú th ủ c khai bỏo b t k v trớ h p l no c a chng trỡnh mi n l chỳng ph i l xỏc ủ... volatile khụng cú nh h ng gỡ t i chng trỡnh n u chỳng ta khụng th c hi n t i u húa nú nhng s cú th cú cỏc l i r t tinh vi khi chỳng ta ti n hnh t i u húa chng trỡnh 3 Hm trong C++ 18 tuannhtn@yahoo.com Bài giảng Lập trình hớng đối tợng v C++ iả: u Tu Trong ngụn ng C c (khụng ph i l ngụn ng C chu n m chỳng ta dựng hi n nay) chỳng ta cú th th c hi n vi c g i hm v i s l ng tham s cng nh ki u tham s tựy ý m trỡnh... return ủ thoỏt kh i hm M t trong cỏc ủi m m nh c a ngụn ng C v C++ l m t th vi n hm r t phong phỳ v linh ho t s d ng chỳng, l p trỡnh viờn ch c n th c hi n include cỏc file header ch a cỏc prototype c a chỳng trong chng trỡnh, ph n cũn l i s t do trỡnh biờn d ch v trỡnh liờn k t th c hi n 19 tuannhtn@yahoo.com Bài giảng Lập trình hớng đối tợng v C++ iả: u Tu Chỳng ta cú th t o ra cỏc th vi n hm riờng cho... trỡnh HelloWorld ủ c vi t b ng C++, m t chng trỡnh m h u h t cỏc sỏch l p trỡnh ủ u l y lm vớ d m ủ u // Chng trỡnh HelloWorld // File hello.cpp // In ra mn hỡnh xõu Hello, World! #include // Khai bỏo lu ng cout ủ s d ng int main() { cout . lập trình có cấu trúc với sự tích hợp cả các toán tử và dữ liệu trên các kiểu ñó. Các ưu ñiểm của lập trình hướng ñối tượng: • Lập trình hướng ñối tượng. chất thì C++ khác hoàn toàn so với C, ñiều này là do C++ là một ngôn ngữ lập trình hướng ñối tượng. Phần B: Ngôn ngữ C++ và lập trình hướng ñối tượng

Ngày đăng: 26/02/2014, 21:20

Hình ảnh liên quan

hàm ảo của lớp. Cỏc ủối tượng của cỏc lớp với cỏc hàm ảo chứa một con trỏ tới bảng hàm ảo của lớp - Tài liệu BÀI GIẢNG MÔN Lập trình hướng đối tượng và C++ docx

h.

àm ảo của lớp. Cỏc ủối tượng của cỏc lớp với cỏc hàm ảo chứa một con trỏ tới bảng hàm ảo của lớp Xem tại trang 99 của tài liệu.

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan