Tải bản đầy đủ (.doc) (33 trang)

Khái quát visua basic

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (361.31 KB, 33 trang )

KHÁI QUÁT VISUA BASIC
Phần "Visual" đề cập đến phương phàp được sử dụng để tạo giao diện đồ họa người dùng
(Graphical User Interface hay viết tắc là GUI) . Có sẵn những bộ phận hình ảnh, gọi là
controls, bạn tha hồ sắp đặt vị trí và quyết định các đặc tính của chúng trên một khung màn
hình, gọi là form. Nếu bạn đã từng sử dụng chương trình vẽ chẳng hạn như Paint, bạn đã
có sẵn các kỹ năng cần thiết để tạo một GUI cho VB6.
Phần "Basic" đề cập đến ngôn ngữ BASIC (Beginners All-Purpose Symbolic Instruction
Code), một ngôn ngữ lập trình đơn giản, dễ học, được chế ra cho các khoa học gia (những
người khơng có thì giờ để học lập trình điện tốn) dùng.
Visual Basic (viết tắt VB) là một ngơn ngữ lập trình hướng sự kiện (event-driven) và mơi
trường phát triển tích hợp (IDE) kết bó được phát triển đầu tiên bởi Alan Cooper dưới tên
Dự án Ruby (Project Ruby), và sau đó được Microsoft mua và cải tiến nhiều. Visual Basic
đã được thay thế bằng Visual Basic .NET. Phiên bản cũ của Visual Basic bắt nguồn phần
lớn từ BASIC và để lập trình viên phát triển các giao diện người dùng đồ họa (GUI) theo
mô hình phát triển ứng dụng nhanh (Rapid Application Development, RAD); truy cập các
cơ sở dữ liệu dùng DAO (Data Access Objects), RDO (Remote Data Objects), hay ADO
(ActiveX Data Objects); và lập các điều khiển và đối tượng ActiveX.
Một lập trình viên có thể phát triển ứng dụng dùng các thành phần (component) có sẵn
trong Visual Basic. Các chương trình bằng Visual Basic cũng có thể sử dụng Windows
API, nhưng làm vậy thì phải sử dụng các khai báo hàm bên ngồi.
Trong lĩnh vực lập trình thương mại, Visual Basic có một trong những nhóm khách hàng
lớn nhất. Theo một số nguồn, vào năm 2003, 52% của những lập trình viên sử dụng Visual
Basic, làm nó thành ngơn ngữ lập trình phổ biến nhất vào lúc đó. Tuy nhiên, cuộc nghiên
cứu của Evans Data cho rằng 43% của các lập trình viên đó có ý định đổi qua một ngơn
ngữ khác

NGƠN NGỮ LẬP TRÌNH C
Tổng quan
C là một ngơn ngữ lập trình tương đối nhỏ gọn vận hành gần với phần cứng và nó giống
với ngơn ngữ Assembler hơn hầu hết các ngôn ngữ bậc cao. Hơn thế, C đôi khi được đánh
giá như là "có khả năng di động", cho thấy sự khác nhau quan trọng giữa nó với ngơn ngữ


bậc thấp như là Assembler, đó là việc mã C có thể được dịch và thi hành trong hầu hết các
máy tính, hơn hẳn các ngơn ngữ hiện tại trong khi đó thì Assembler chỉ có thể chạy trong
một số máy tính đặc biệt. Vì lý do này C được xem là ngôn ngữ bậc trung.
C đã được tạo ra với một mục tiêu là làm cho nó thuận tiện để viết các chương trình lớn
với số lỗi ít hơn trong mẫu hình lập trình thủ tục mà lại khơng đặt gánh nặng lên vai người
viết ra trình dịch C, là những người bề bộn với các đặc tả phức tạp của ngơn ngữ. Cuối
cùng C có thêm những chức năng sau:













Một ngôn ngữ cốt lõi đơn giản, với các chức năng quan trọng chẳng hạn như là
những hàm hay việc xử lý tập tin sẽ được cung cấp bởi các bộ thư viện các thủ tục.
Tập trung trên mẫu hình lập trình thủ tục, với các phương tiện lập trình theo kiểu
cấu trúc.
Một hệ thống kiểu đơn giản nhằm loại bỏ nhiều phép tốn khơng có ý nghĩa thực
dụng.
Dùng ngơn ngữ tiền xử lý, tức là các câu lệnh tiền xử lý C, cho các nhiệm vụ như là
định nghĩa các macro và hàm chứa nhiều tập tin mã nguồn (bằng cách dùng câu
lệnh tiền xử lý dạng #include chẳng hạn).
Mức thấp của ngôn ngữ cho phép dùng tới bộ nhớ máy tính qua việc xử dụng kiểu

dữ liệu pointer.
Số lượng từ khóa rất nhỏ gọn.
Các tham số được đưa vào các hàm bằng giá trị, không bằng địa chỉ.
Hàm các con trỏ cho phép hình thành một nền tảng ban đầu cho tính đóng và tính
đa hình.
Hổ trợ các bản ghi hay các kiểu dữ liệu kết hợp do người dùng từ khóa định nghĩa
struct cho phép các dữ liệu liên hệ nhau có thể được tập hợp lại và được điều
chỉnh như là tồn bộ.

Mặc dù C cịn thiếu nhiều chức năng hữu ích nhưng lý do quan trọng để C được chấp nhận
vì nó cho phép các trình dịch mới được tạo ra một cách nhanh chóng trên các nền tảng mới
và vì nó cho phép người lập trình dễ kiểm sốt được những gì mà chưong trình (do họ viết)
thực thi. Đây là điểm thường làm cho mã C chạy hiệu quả hơn các ngôn ngữ khác. Thường
thì chỉ có ngơn ngữ ASM chỉnh bằng tay chạy nhanh hơn (ngơn ngữ C), bởi vì ASM kiểm
sốt đưọc toàn bộ máy. Mặc dù vậy, với sự phát triển các trình dịch C, và với sự phức tạp
của các CPU hiện đại, C đã dần thu nhỏ khoảng cách khác biệt về vận tốc này.
Một lý do nữa cho việc C được xử dụng rộng rãi và hiệu quả là do các trình dịch, các thư
viện và các phần mềm thông dịch của các ngôn ngữ bậc cao khác lại thường được tạo nên
từ C.
Một số chức năng khác mà C khơng có (hay cịn thiếu) nhưng có thể tìm thấy ở các ngơn
ngữ khác bao gồm:








An tồn kiểu,

Tự động Thu dọn rác,
Các lớp hay các đối tượng cùng với các ứng xử của chúng (xem thêm OOP),
Các hàm lồng nhau,
Lập trình tiêu bản hay Lập trình phổ dụng,
Quá tải và Quá tải toán tử,
Các hỗ trợ cho đa luồng, đa nhiệm và mạng.

Tồn trữ dữ liệu
Một trong những chức năng quan trọng nhất của một ngôn ngữ lập trình là việc cung cấp
cở sở cho việc quản lý bộ nhớ và các đối tượng được chứa trong bộ nhớ. C cung ứng 3
phương cách để cấp phát bộ nhớ cho các đối tượng:


1. Sự cấp phát vùng nhớ tĩnh: khoảng trống dành cho đối tượng thì đuợc cung cấp
trong phần mã nhị phân ở thời gian dịch; những đối tượng này có một thời gian
sống lâu dài theo sự tồn tại của phần mã nhị phân chứa chúng (các đối tượng).
2. Sự cấp phát vùng nhớ tự động: Các đối tượng tạm thời có thể được chứa trong một
chồng (stack), và khoảng trống này thì được trả về một cách tự động và có thể được
dùng lại sau khi khối mã mà chúng (tức các đối tượng tạm thời) được khai báo đã
thực thi xong.
3. Sự cấp phát vùng nhớ động: Các khối của bộ nhớ với bất kì cỡ lớn mong muốn nào
đều có thể được yêu cầu (hay xin) trong thời gian thi hành bằng cách dùng các hàm
thư viện như là malloc(), realloc() và free() từ một khu vực của bộ nhớ có tên
là heap; các khối này có thể được tái dụng sau khi gọi hàm free() để hồn trả
chúng lại cho bộ nhớ.
Ba phương án này thích hợp cho các tình huống khác nhau và có những hậu quả khác
nhau. Thí dụ, kiểu cấp phát tĩnh sẽ khơng cần thời gian (để tính tốn) cho sự cấp phát, kiểu
cấp phát tự động sẽ cần một khoảng thời gian nào đó cho dự tính, và kiểu cấp phát động có
thể địi hỏi một lượng lớn thời gian dùng dể tính tốn cho việc cấp phát và hồn trả (các
vùng nhớ đã được yêu cầu trước đó). Mặt khác, khoảng trống của chồng thường giới hạn

cho vùng nhớ tĩnh hay cho khoảng trống của heap, và chỉ kiểu cấp phát vùng nhớ động là
cho phép sự cấp phát cho các đối tượng mà kích thước của nó chỉ có thể biết đuợc trong
lúc thi hành. Hầu hết các chương trình C đều dùng nhiều cả ba phương cách này.
Khi có thể thì sự cấp phát tự động hay sự cấp phát tĩnh thường được dề nghị dùng vì kho
nhớ được quản lý bởi trình dịch, giải phóng cho người lập trình những lồi lầm phiền hà khi
phải xin cấp phát và hoàn trả các vùng nhớ bằng tay. Rất tiếc nhiều cấu trúc dữ liệu có thể
trương nở trong thời gian thực thi và vì kiểu cấp phát tĩnh và kiểu tự động phải có một độ
lớn cố định ở thời gian dịch nên trong nhiều tình huống mà buộc phải dùng kiểu cấp phát
động. Các dãy thay đổi về độ lớn là một thí dụ điển hình của trường hợp này. (Xem thí dụ
từ bài malloc về các dãy được cấp phát vùng nhớ động.)

C++
(đọc là "C cộng cộng" hay "xi-plus-plus", IPA: /siː pləs pləs/) là một loại ngơn ngữ lập
trình. Đây là một dạng ngơn ngữ đa mẫu hình tự do có kiểu tĩnh và hỗ trợ lập trình thủ tục,
dữ liệu trừu trượng, lập trình hướng đối tượng, và lập trình đa hình. Từ thập niên 1990, C+
+ đã trở thành một trong những ngôn ngữ thương mại phổ biến nhất.
Bjarne Stroustrup của Bell Labs đã phát triển C++ (mà tên nguyên thủy là "C với các lớp"
trong suốt thập niên 1980 như là một bản nâng cao của ngôn ngữ C. Những bổ sung nâng
cao bắt đầu với sự thêm vào của khái niệm lớp, tiếp theo đó là các khái niệm hàm ảo, tốn
tử quá tải, đa kế thừa, tiêu bản, và xử lý ngoại lệ. Tiêu chuẩn của ngôn ngữ C++ đã được
thông qua trong năm 1998 như là ISO/IEC 14882:1998. Phiên bản hiện đang lưu hành là
phiên bản 2003, ISO/IEC 14882:2003. Phiên bản tiêu chuẩn mới hơn nữa (được biết dưới
tên gọi khơng chính thức là C++0x) đang được xây dựng.


Tổng quan về kĩ thuật
Trong tiêu chuẩn 1998 của C++ có hai phần chính: phần ngơn ngữ cốt lõi và phần Thư
viện chuẩn C++. Phần thư viện này lại bao gồm hầu hết thư viện tiêu bản chuẩn và phiên
bản có điều chỉnh chút ít của thư viện chuẩn C. Nhiều thư viện C++ hiện hữu không thuộc
về tiêu chuẩn như là thư viện Boost. Thêm vào đó, nhiều thư viện không theo tiêu chuẩn

được viết trong C một cách tổng quát đều có thể xử dụng trong các chương trình C++.

Chức năng dẫn nhập trong C++
So với C, C++ tăng cường thêm nhiều tính năng, bao gồm: khai báo như mệnh đề, chuyển
kiểu giống như hàm, new/delete, bool, các kiểu tham chiếu, const, các hàm trong dòng
(inline), các đối số mặc định, quá tải hàm, vùng tên (namespace), các lớp (bao gồm tất cả
các chức năng liên quan tới lớp như kế thừa, hàm thành viên (phương pháp), hàm ảo, lớp
trừu tượng, và cấu tử), sự quá tải toán tử, tiêu bản, tốn tử ::, xử lí ngoại lệ, và sự nhận
dạng kiểu trong thời gian thi hành.
C++ còn tiến hành nhiều phép kiểm tra kiểu hơn C trong nhiều trường hợp.
Câu lệnh chú giải bắt đầu với // nguyên là một phần của BCPL được tái sử dụng trong C+
+.
Một số thành phần của C++ sau này đã được thêm vào C, bao gồm const, inline, khai
báo biến trong vòng lặp for và chú giải kiểu C++ (sử dụng ký hiệu //). Tuy nhiên, C99
cũng bổ sung thêm một số tính năng khơng có trong C++, ví dụ như macro với số đối số
động.
Vì được phát triển từ C, trong C++, thuật ngữ đối tượng có nghĩa là vùng nhớ như được
dùng trong C, chứ không phải là một phiên bản của lớp như được hiểu trong phần lớn ngơn
ngữ lập trình hướng đối tượng khác. Ví dụ như:
int i;
Dòng trên sẽ định nghĩa một đối tượng kiểu int (số nguyên), tức là một vùng nhớ sẽ được
sử dụng để lưu giữ biến i.

Thư viện C++
Thư viện chuẩn C++ dùng lại thư viện chuẩn C với một số điều chỉnh nhỏ để giúp nó hoạt
động tốt hơn với ngôn ngữ C++. Một bộ phận lớn khác của thư viện C++ dựa trên Thư
viện tiêu bản chuẩn (hay còn gọi là STL - viết tắt từ chữ Standard Template Library). Thư
viện này có nhiều cơng cụ hữu dụng như là các thùng chứa (thí dụ như vector, danh sách
liên kết và biến lặp (tổng quát hóa từ khái niệm con trỏ) để cung cấp những thùng chứa này
sự truy cập giống như là truy cập mảng. Xa hơn nữa, bảng (đa) ánh xạ (mảng kết hợp) và

(đa) tập, tất cả được cung cấp để có thể xuất ra các giao diện tương thích. Do đó, có thể
dùng tiêu bản để viết các thuật toán tổng quát mà chúng làm việc được với bất kì thùng
chứa nào hay với bất kì dãy nào được định nghĩa bởi biến lặp. Giống như C, các tính năng


của thư viện này thì được truy cập bởi việc sử dụng lệnh dẫn hướng #include để bao gồm
một tập tin tiêu đề chuẩn. C++ cung ứng 69 tiêu đề chuẩn, trong đó có 19 tiêu đề khơng
cịn hiệu lực nữa.
Vì thư viện chuẩn được thiết kế bởi những chuyện gia hàng đầu và đã được chứng minh
trong toàn bộ lịch sử kĩ nghệ, các thành phần của thư viện này được khuyến cáo sử dụng
thay vì dùng những phần viết tay bên ngoài hay những phương tiện cấp thấp khác. Thí dụ,
dùng std:vector hay std::string thay vì dùng kiểu mảng đơn thuần sẽ không những là
cho "đời sống dễ thở hơn", mà còn là một cách hữu hiệu để viết phần mềm được an toàn và
linh hoạt hơn.
STL nguyên là một thư viện của hãng HP và sau đó là của SGI, trước khi nó được nhận
vào thành chuẩn C++. Tiêu chuản thì khơng tham chiếu nó bằng cái tên "STL", khi đa
phần nó chỉ là bộ phận tiêu chuẩn. Tuy vậy, nhiều người vẩn dùng khái niệm "STL" này để
phân biệt nó với phần cịn lại của thư viện C++ như là IOstream, quốc tế hóa (kí tự và
ngơn ngữ trình bày), chẩn đốn, thư viện C, v.v.).
Một đề án mang tên STLPort, dựa cơ sở trên SGI STL, bảo trì các thiết lập mới của STL,
IOStream và string. Các đề án khác cũng có những xây dựng đặc thù riêng của thư viện
chuẩn với các mục tiêu thiết kế khác nhau. Mỗi nơi sản xuất hay phổ biến nhà trình dịch
C++ đều bao gồm một sự thiết lập của thư viện, vì đây là phần quan trọng của tiêu chuẩn
và lại là kỳ vọng của người lập trình.

C++ Các chức năng hướng đối tượng
C++ dẫn nhập thêm một số chức năng hướng đối tượng (OO) lên C. Nó cung cấp các lớp
mà có 4 chức năng thơng dụng trong các ngơn ngữ OO : tính trừu tuợng, tính đóng, tính đa
hình, và tính kế thừa.
Lưu ý: trong phần này các từ "hàm nội tại", "phương pháp", hay "hàm" đều có cùng một

nghĩa là "phương pháp thuộc về một lớp".

Tính đóng
C++ xây dựng tính đóng bằng cách cho phép mọi thành viên của một lớp có thể được khai
báo bằng các từ khoá public, private, hay protected. (xem thêm các khái niện cơ bản
trong ngôn ngữ OO). Một thành viên private chỉ có thể được truy cập từ các phương pháp
(hàm nội tại) là thành viên của chính lớp đó hay được truy cập từ các hàm và các lớp được
đặc biệt cho phép sử dụng bằng cách dùng từ khóa friend. Một thành viên protected của
một lớp sẽ có thể truy cập được từ các thành viên (nào đó) của các lớp có tính kế thừa của
nó hay cũng có thể truy cập được từ các thành viện của chính lớp đó và của mọi thành viên
friend.
Ngun lý của OO là mọi và chỉ có các hàm là có thể truy cập được đến các giá trị nội tại
của cùng lớp thì nên có tính đóng. C++ có hỗ trợ đặc tính này (qua các hàm thành viên và
các hàm friend), nhưng C++ lại không là yêu cầu bắt buộc: người lập trình có thể khai
báo các phần hay tất cả các giá trị nội tại là công cộng (public), và cũng cho phép làm cho


tồn bộ lớp trở thành cơng cộng. Lí do là vì C++ hổ trợ khơng chỉ lập trình hướng đối
tượng mà cịn hổ trợ các mẫu hình yếu hơn như là lập trình mơ-đun.
Một thói quen tốt cần có trong thực hành là khai báo mọi dữ liệu đều là riêng tư (private),
hay ít nhất ở dạng bảo tồn, và sau đó, tạo ra một giao diện nhỏ (thơng qua các phương
pháp) cho người dùng của lớp này dấu đi các chi tiết thiết lập bên trong.

Tính đa hình
Khái niệm đa hình được dùng khá rộng rãi và là khái niệm bị lạm dụng cũng như không
được định nghĩa rõ ràng.
Nói chung tính đa hình trong lập trình hướng muốn nói đến 1 đoạn code nhưng trong 2
trường hợp khác nhau có thể xuất ra 2 kết quả khác nhau. Vì tính chất ra nhiều kết quả
khác nhau này nên nó được gọi là đa hình.
Trong trường hợp của C++, khái niệm này thường được nối kết với các tên của các hàm

thành viên. Các hàm thành viên này có cùng tên, sự khác nhau chỉ có thể được dựa vào một
hay cả hai yếu tố sau:
1. Số lượng và kiểu của các đối số (tức là nguyên mẫu của hàm) -- Tính chất này gọi
là đa hình tĩnh (static polymorphism)
2. Kiểu lớp mà thực thể thực sự thuộc vào. Tính chất này được dùng khi hàm thành
viên được định nghĩa là hàm ảo qua từ khóa virtual -- tính chất này gọi là đa
hình động (dynamic polymorphism)
Khi được gọi thì chương trình sẽ tùy theo hai yếu tố trên để xác định chính xác hàm nào
phải được thực thi trong số các hàm
++ cịn cung cấp hai tính năng độc đáo cho đa hình là:



Quá tải hàm (function overloading) - cịn gọi là hàm chồng
Hàm thành viên ảo

Hai tính năng trên cho phép chưong trình định ra nhiều sự thiết lập khác nhau của một hàm
để sử dụng ứng với các kiểu (khác nhau) của các đối tượng.
Việc quá tải hàm cho phép các chương trình khai báo nhiều hàm có chung một tên (ngay
cả việc các hàm này thuộc cùng một lớp). Các hàm này phân biệt được bởi số lượng và
kiểu của các tham số

thiết kế của C++
Trong tác phẩm The Design and Evolution of C++ ISBN 0-201-54330-3, Bjarne Stroustrup
miêu tả các quy tắc mà ông ta dùng cho việc thiết kế C++. Biết rõ các quy tắc này sẽ giúp
hiểu được tại sao C++ lại đi theo cách riêng của nó. Sau đây là một tổng kết sơ lược của
các quy tắc. Các chi tiết của chúng có thể được tìm thấy trong cuốn The Design and
Evolution of C++.












C++ được thiết kế để là một ngôn ngữ tổng quát có kiểu tĩnh mà lại hữu hiệu và
năng động như C
C++ được thiết kế nhằm hổ trợ trực tiếp và đầy đủ nhiều kiểu lập trình như là lập
trình cấu trúc, sự Trừu tượng của dữ liệu, lập trình hướng đối tượng, và lập trình
tổng quát.
C++ được thiết kế để người lập trình có cơ hội lựa chọn ngay cả khi điều này có thể
dẫn tới sự chọn lựa sai lầm của người lập trình.
C++ được thiết kế để tương thích với C càng nhiều càng tốt, do đó, có cung ứng
một sự chuyển đổi (ngơn ngữ) rất thuận tiện từ C.
C++ tránh các chức năng mà chúng thuộc về dặc điểm riêng của nền tảng hay của
mục đích chung chung.
C++ không lệ thuộc vào các phần bổ sung cho các tính năng thừa
C++ được thiết kế để hoạt động mà khơng cần phải có mơi trường lập trình hoàn
thiện.

Sự phát triển trong tương lai
C++ tiếp tục phát triển để thỏa mản các nhu cầu tương lai. Đặc biết nhóm Boost.org, làm
việc trên hầu hết các dạng và các khuyến cáo trong C++ cho Hội đồng Tiêu chuẩn C++ về
các chức năng hoạt động tốt và các chức năng cần được cải thiện. Công việc hiện tại cho
thấy bản năng đa mẫu hình của C++ sẽ ngày càng nhiều. Thí dụ: Cơng việc của Boost.org
mở rộng rất mạnh chức năng của C++ và khả năng siêu lập trình (metaprogramming) của

nó. Chuẩn C++ khơng đề cập về sự thiết lập của mã hóa tên (name decoration), xử lí ngoại
lệ và sự thiết lập các tính năng đặc biệt khác, tạo mã đối tượng mà nó được làm ra từ
những trình dịch khơng tương thích khác. Dù vậy, vẫn có những tiêu chuẩn khác từ các nhà
sản xuất dùng cho những máy hay OS riêng biệt nhằm tiêu chuẩn hóa các trình dịch trên
các nền tảng đó, thí dụ [1].
Các trình dịch cho đến gần đây (2004) vẫn lưỡng lự khi hỗ trợ toàn bộ chuẩn C++, đặc biệt
là trong những lãnh vực của tiêu bản (đây là phần ngôn ngữ đã được cơng nhận hồn tồn
từ hội đồng tiêu chuẩn. Một điểm các biệt đáng nói nữa là từ khóa export, nhằm cho phép
các định nghĩa của các tiêu bản được tách rời khỏi các khai báo của chúng. Trình dịch đầu
tiên thiết kế kiểu này là Comeau C++, đầu năm 2003 (5 năm sau khi tiêu chuẩn đã được
phát hành!); trong năm 2004, phiên bản beta trình dịch của Borland C++ Builder X cũng
hỗ trợ dùng export. Cả hai trình dịch đó dựa trên mặt ngồi của EDG C++. Cũng cần lưu
ý rằng nhiều sách cung cấp mã thí dụ cho việc thiết lập từ khóa export (Ivor Horton's
Beginning ANSI C++, pg. 827) mà lại không dịch được, nhưng lại cũng khơng có tham
khảo vấn dề này với việc (khó khăn) đã nêu trên. Những trình dịch khác như là Microsoft
Visual C++ và GCC thì hồn tồn khơng hỗ trợ nó. Herb Sutter, thư kí hội đồng tiêu chuẩn
C++, có khuyến cáo rằng export sẽ được hủy bỏ trong các phiên bản tương lai của chuẩn
C++ [2]. Nhưng quyết định tối hậu đã được đưa ra là giữ nguyên nó trong chuẩn C++.
Nhiều vấn đề về tiêu bản bao gồm các xây dựng như đặc biệt hóa tiêu bản từng phần, mà
đã được hỗ trợ một cách nghèo nàn trong nhiều năm sau khi chuẩn C++ đã ra đời.
Cú pháp ngôn ngữ C++ là tập hợp các qui tắc nhằm xác định cách thức viết và dịch trong
ngôn ngữ lập trình C++.


Vì C++ là ngơn ngữ được thiết kế để có thể hoạt động tương thích với ngơn ngữ C nên hai
ngôn ngữ này chia sẻ nhau nhiều điểm chung trong cú pháp. Đối với các cấu trúc câu lệnh
thông thường, các hàm, biến, và kiểu dữ liệu cơ bản xin xem thêm bài cú pháp C. Bài này
chỉ tập trung vào các chủ đề căn bản mà ngôn ngữ C khơng có trong đó bao gồm việc hỗ
trợ các mẫu hình lập trình tiêu bản và lập trình hướng đối tượng của C++.


Chức năng Hướng đối tượng
Lớp

Định nghĩa lớp cơ bản
Việc sử dụng lớp trong một chương trình C++ có hai phần chính là phần định nghĩa lớp và
phần khai báo và truy cập các thành viên của một đối tượng có kiểu là một lớp cho trước.


Định nghĩa thơng thường của một lớp cơ bản không kế thừa từ bất kì lớp nào khác:

Khai báo một biến đối tượng
Biến đối tượng thơng thường
Biến đối tượng có thể khai báo hay đơi khi cịn gọi là thực thể hố tùy theo cách xây dựng
lớp của người lập trình. Thường quá trình xác lập này được tiến hành thơng qua các hàm
dựng. Dĩ nhiên, người ta có thể dùng ngay cả các phương thức thường dùng như là dùng
tham chiếu (tức là dùng định nghĩa con trỏ), dùng mảng, dùng cấu trúc, hay phức tạp hơn
(mảng tham chiếu chẳng hạn) để khai báo một biến đối tượng. (Xem thêm Cú pháp ngơn
ngữ C.) Trong mọi trường hợp này thì kiểu của biến đối tượng được xem là lớp mà nó khai
báo. Thí dụ

biến đối tượng là một hằng
Trường hợp khi thành lập một đối tượng hằng thì việc điều chỉnh trạng thái nội tại của nó
là khơng hợp lệ do đó, chỉ có một cách duy nhất là gán cho nó một bộ giá trị (hay một
trạng thái) ban đầu. Trong trường hợp này thì sau khi đã thực thể hóa, biến đối tượng chỉ
có thể cho phép đọc các giá trị nào mà lớp tạo ra nó cho phép. (xem thí dụ)

Các thành viên của lớp

Thành viên dữ liệu
Ngồi các khai cáo thành viên có kiểu dữ liệu như thơng thường trong C, thì người lập

trình cịn có thể khai báo nó như một hằng, hay như một biến tĩnh, hay có cả hai đặc tính:


Thành viên dữ liệu là một hằng: Trương tự như trong C, một thành viên là dữ liệu
có thể được khai báo như là một hằng bởi từ khóa const đứng trước tên kiểu dữ
liệu. Một khi đã khai báo là hằng thì khơng thể gán giá trị mới hay thay đổi nội
dung của kiểu dữ liệu đó nữa (Lưu ý: trong C++ thì kiểu dữ liệu có thể là một lớp


đã được định nghiã). Do đó, dữ liệu là hằng sẽ được gán giá trị ban đầu ngay trong
dòng lệnh khai báo tên của nó:
const int x;
static: Một khi



Thành viên dữ liệu có kiểu
thành viên của một lớp có kiểu là
static thì nó sẽ có giá trị tĩnh cho mọi thực thể của cùng một lớp. Nghĩa là sự thay
đổi giá trị của thành viên tĩnh này trong một thực thể bất kì sẽ có hiệu quả thay đổi
của cùng thành viên đó trong các thực thể khác của cùng một một lớp. Thực tế, khi
một thành viên của một lớp được khai báo tĩnh thì phần bộ nhớ chứa giá trị của
thành viên này sẽ được chia sẽ cho mọi thực thể về sau. Nói cách khác, ứng với
mỗi thành viên tĩnh, chỉ có duy nhất một giá trị chia sẽ chung cho cả lớp.



Thành viên dữ liệu có thể có cả hai đặc tính trên tức là vừa có kiểu tĩnh vừa là hằng
số. Thường từ khóa static được viết trước sau đó là từ khóa const. Thí dụ dưới
đây minh họa các cú pháp khai báo. việc sử dụng một biến hằng có kiểu tĩnh rất

tiện lợi cho nhiều đối tượng thực thể hóa có cùng một lớp chia sẽ chung một hằng
số (thí dụ: hằng số Pi dùng chung cho các đối tượng cung tròn, đường trịn, và
elipse). Ngược lại, khi có các hằng số đặc thù cho từng thực thể của một lớp thì một
cách là dùng hằng số thông thường (chẳng hạn như cùng một lớp "chiết tính tiền lời
cho vay" nhưng thực thể ngắn hạn có "hằng số lãi kép" cao hơn nhiều so với hằng
số lãi kép dài hạn). Thí dụ dưới đây minh họa cú pháp khai báo

Hàm thành viên
Các khai báo một thành viên là hàm trong một lớp có thể dùng hai dạng chính sau:


Mơ tả trực tiếp trong định nghiã của lớp mà hàm là thành viên

[virtual] int


Mô tả sau bên ngoài sau định nghĩa của lớp mà hàm là thành viên

Hàm dựng



Không dùng đến các hàm khác
Sử dụng các hàm khác để gọi

Hàm hủy
Hàm hằng
Một hàm thành viên có thể được khai báo đẻ trở thành hàm hằng. Với khai báo này thì
thành viên đó sẽ chỉ có giá trị đọc đuợc mà khơng có hiệu lực thay đổi giá trị nội tại của
một thực thể. Để khai báo thì từ khóa const phải được đặt ngay sau khai báo hàm và đứng

trước khối mã xác lập hàm số đó nếu có.


Pascal (ngơn ngữ lập trình)
Pascal là một ngơn ngữ lập trình cho máy tính thuộc dạng mệnh lệnh, được Niklaus Wirth
phát triển vào năm 1970 là ngôn ngữ đặc biệt thích hợp cho kiểu lập trình có cấu trúc.
Pascal dựa trên ngơn ngữ lập trình Algol và được đặt tên theo nhà toán học và triết học
Blaise Pascal. Wirth đồng thời cũng xây dựng Modula-2 và Oberon, là những ngôn ngữ
tương đồng với Pascal. Oberon cũng hỗ trợ kiểu lập trình hướng đối tượng.
Ban đầu, Pascal là một ngơn ngữ được hướng để dùng trong giảng dạy về lập trình có cấu
trúc, và nhiều thế hệ sinh viên đã "vào đời" thơng qua việc học Pascal như ngơn ngữ vỡ
lịng trong các chương trình học đại cương. Nhiều biến thể của Pascal ngày nay vẫn còn
được sử dụng khá phổ biến, cả trong giảng dạy lẫn trong công nghiệp phát triển phần mềm.
Phần lớn hệ điều hành Macintosh được viết bằng Pascal. Hệ sắp chữ TeX phổ biến được
viết bằng một ngôn ngữ tên là Web là ngôn ngữ mà Donald Knuth đã vay mượn khá nhiều
yếu tố từ Pascal.

Thực tế sử dụng
Trình biên dịch Pascal đầu tiên được thiết kế tại Zurich cho dịng máy tính CDC 6000,
được viết và xây dựng tại Đại học Illinois dưới sự chỉ đạo của Donald B. Gillies cho loại
máy tính PDP-11 và ngay từ lúc này đã có thể sinh ra mã máy trực tiếp.
Để nhanh chóng phổ biến rộng rãi ngơn ngữ này, một bộ công cụ chuyển mã được viết tại
Zurich bao gồm một trình biên dịch sang "mã máy ảo" (hay dễ hiểu hơn, mã trung gian
giữa mã máy và mã nguồn), và bộ giả lập cho loại mã này. Bộ cơng cụ này sau đó trở
thành hệ thống giả (P-system). Mặc dù hệ thống này được phát triển nhằm tạo ra các trình
biên dịch sinh mã máy trên ít nhất một hệ thống, nhưng kết quả đáng kể nhất chỉ là trình
thơng dịch cho hệ thống giả UCSD. Các trình thơng dịch này được ký hiệu P1-P4, với P1
là phiên bản đầu tiên còn P4 là phiên bản cuối cùng.
IP Pascal là trình biên dịch của ngơn ngữ lập trình Pascal cho hệ điều hành Micropolis
DOS nhưng ngay sau đó đã chuyển sang CP/M để chạy trên dịng máy Z80.

Đầu thập niên 1980, UCSD Pascal đã có phiên bản dành cho các máy Apple II và Apple III
để có các phiên bản tương ứng thay thế trình thơng dịch BASIC đi kèm với các loại máy
này trong thời gian trước đó.
Trong những năm 1980, Anders Hejlsberg đã viết trình biên dịch Blue Label Pascal dành
cho dịng máy tính Nascom-2. Sau đó ơng chuyển sang làm việc cho hãng Borland và viết
lại hồn tồn trình biên dịch này để rồi trở thành Turbo Pascal cho máy tính IBM-PC.
Trình biên dịch mới này bán với giá chỉ có $49.95, rẻ hơn nhiều so với giá Hejlsberg trước
đây rao bán sản phẩm Blue Label Pascal.


Trình biên dịch giá rẻ của Borland đã gây ra ảnh hưởng lớn đến cộng đồng lập trình viên
Pascal, họ hầu như tập trung hết vào lập trình cho máy IBM-PC trong những năm cuối thập
niên 1980. Rất nhiều người cũng đã sử dụng sản phẩm này thay cho BASIC.
Super Pascal là một biến thể của Pascal, bổ sung nhãn khơng có số, trả lại biểu thức hay
mệnh đề là tên của kiểu dữ liệu.
Trong phiên bản 5.5, Borland đã bổ sung phần lập trình hướng đối tượng vào Turbo Pascal.
Tuy nhiên sau đó Borland đã quyết định cần phải có nhiều tính năng hướng đối tượng tinh
vi và phức tạp hơn, và đã bắt đầu sản phẩm Delphi, sử dụng sơ đồ thiết kế của Object
Pascal do Apple đưa ra làm cơ sở. (Sơ đồ của Apple vẫn chưa phải là chuẩn.) Borland cũng
gọi đây là Object Pascal trong phiên bản Delphi đầu tiên nhưng đổi tên thành Delphi trong
các phiên bản sau đó. Các bổ sung chính so với các phần mở rộng lập trình hướng đối
tượng trước là mơ hình đối tượng, các hàm dựng và hàm hủy ảo, các thuộc tính đều mang
tính tham chiếu. Có một vài trình biên dịch khác cũng hỗ trợ các tính năng này. Xem thêm:
Delphi (ngơn ngữ lập trình).
Turbo Pascal và các sản phẩm tương tự, bằng các khái niệm đơn vị (unit) hay mơ-đun
(module) hình thành nên các ngơn ngữ lập trình cấu trúc. Turbo Pascal lấy các khái niệm
này từ chuẩn của Extended Pascal hay từ người kế vị Modula-2. Mặc dù vậy nó vẫn khơng
cung cấp khái niệm các mơ-đun lồng nhau hay các kí hiệu rõ ràng về hàm nhập và hàm
xuất.


Chuẩn hóa
Ngơn ngữ này được chuẩn hóa vào năm 1983 trong chuẩn ISO/IEC 7185, một vài chuẩn
quốc gia cụ thể cũng được đưa ra bao gồm cả chuẩn ANSI/IEEE770X3.97-1983 của Mỹ.
Năm 1990 chuẩn Pascal mở rộng được đưa ra với tên gọi ISO/IEC 10206.
Chuẩn ISO 7185 được phát triển với mục đích là sự chọn lọc của ngôn ngữ 1974 của
Writh, được đề cập chi tiết trong cuốn "Hướng dẫn sử dụng và Báo cáo của Jensen và
Wirth", bổ sung đáng kể nhất là "Các tham số mảng phù hợp" được coi là mức 1 của tiêu
chuẩn, mức 0 là Pascal khơng có mảng phù hợp.
Trên các máy tính lớn mà Pascal xuất phát (mainframe và minicomputer), các tiêu chuẩn
này thường được tuân theo. Tuy vậy trên IBM-PC thì ngược lại. Trên các máy tính IBMPC, chuẩn của Turbo Pascal và Delphi của của Borland có lượng người dùng nhiều nhất.
Do vậy, biết liệu một phiên bản riêng biệt tương ứng với ngôn ngữ Pascal ban đầu, hay
ngôn ngữ riêng của Borland là khá quan trọng.

Các trình biên dịch phổ biến
Có vài trình biên dịch Pascal được đưa ra cho sử dụng cơng khai:


Trình biên dịch P4, cơ sở cho rất nhiều trình biên dịch Pascal-được-viết-bằngPascal sau đó, bao gồm cả UCSD p-System.




















Free Pascal được viết bằng Pascal (sao cho nó có thể biên dịch được chính nó),
được phát triển với mục tiêu là cung cấp một trình biên dịch mạnh mẽ và thuận
tiện, có khả năng biên dịch cả các ứng dụng cũ lẫn phát triển ứng dụng mới. Được
phân phối miễn phí dưới giấy phép GNU. Có khả năng trộn lẫn cả mã của Turbo
Pascal và mã Delphi, hỗ trợ nhiều nền tảng lẫn nhiều hệ điều hành.
Turbo Pascal là trình biên dịch Pascal thống trị cho PC vào thập niên 1980 và đầu
thập niên 1990. Nó phổ biến vì các mở rộng mạnh mẽ và đặc biệt là thời gian biên
dịch cực kì ngắn. Trong thời điểm hiện tại, các phiên bản cũ của Turbo Pascal (tới
5.5) có thể tải xuống miễn phí tại trang web của Borland (tuy nhiên vẫn cần phải
đăng ký).
Chrome là thế hệ Object Pascal tiếp theo cho nền tảng .NET và nền tảng Mono,
được RemObjects Software cung cấp.
GNU Pascal Compiler (GPC) là trình biên dịch Pascal của Bộ biên dịch GNU
(GCC). Trình biên dịch này được viết bằng C, thư viện chạy hầu hết viết bằng
Pascal. Được phân phối miễn phí dưới giấy phép GNU, có thể chạy trên rất nhiều
nền tảng và hệ điều hành khác nhau. Nó cịn hỗ trợ chuẩn ngơn ngữ ANSI/ISO và
tương thích với ngơn ngữ Borland/Turbo Pascal. Việc hỗ trợ cho Borland Delphi và
một vài biến thể khác vẫn còn khá hạn chế.
Delphi là sản phẩm RAD (Rapid Application Development-phát triển ứng dụng tức
thời) của Borland. Nó sử dụng Delphi, tiền thân từ Pascal, để tạo các chương trình
ứng dụng cho nền Windows. Phiên bản mới nhất cịn hỗ trợ cả việc biên dịch cho
nền Microsoft .NET.
Kylix là một nhánh sản phẩm khác kế thừa từ Pascal của Borland, tiền thân từ

Delphi, hỗ trợ hệ điều hành Linux và một thư viện đối tượng đã được bổ sung.
Trình biên dịch và mơi trường phát triển (IDE) có thể được cung cấp cho việc sử
dụng phi lợi nhuận. Trình biên dịch (không bao gồm thư viện hay IDE) được cho là
trở thành phần mềm Mã nguồn mở trong thời gian tới.
Dr. Pascal là một trình thơng dịch chạy Standard Pascal. Bổ sung đáng kể nhất là
chế độ "thực thi nhìn thấy được" cho phép hiển thị chương trình đang chạy cùng
với các biến của nó, và cả q trình kiểm tra lỗi khi thực thi (runtime error
checking). Trình thơng dịch này không tạo ra được file thực thi nhị phân riêng rẽ,
chạy trên nền MS-DOS, hoặc cửa sổ DOS trong nền Windows, và cả trên dòng
máy Macintosh cũ.
Virtual Pascal được Vitaly Miryanov sáng tạo như một trình biên dịch dành cho
OS/2 tương thích với cú pháp của Borland Pascal. Sau đó nó được fPrint phát triển
thành sản phẩm thương mại, hỗ trợ thêm Win32, và đến năm 2000 trở thành phần
mềm miễn phí. Ngày nay nó có thể biên dịch cho Win32, OS/2 và cả Linux, và gần
như hoàn tồn tương thích với Borland Pascal và Delphi.
IP Pascal ban đầu là ngôn ngữ Pascal dành cho Z80/CP/M, rồi được chuyển sang và
viết lại cho Intel 80386/PC. IP Pascal có một thư viện khả chuyển (portability
library). Ví dụ, một chương trình hiển thị văn bản viết bằng Pascal chuẩn từ thập
niên 1970 có thể được biên dịch lại để làm việc trong một cửa sổ và thậm chí có cả
việc tạo dựng đồ họa. IP Pascal hỗ trợ chuẩn ISO 7185 và nâng cấp ngơn ngữ một
cách logic. Ví dụ, Pascal chuẩn hỗ trợ các xâu ký tự được "căn lề phải" và sau đó
cịn hỗ trợ xâu ký tự động. Mảng tĩnh của Pascal chuẩn được nâng thành mảng
động nhưng vẫn hồn tồn tương thích ngược với mảng tĩnh, v.v.






Pocket Studio là một tập nhỏ các trình biên dịch Pascal và RAD hướng tới

Palm/MC68xxx với một số mở rộng hỗ trợ giao tiếp với API (Application
Programming Interface-giao tiếp lập trình ứng dụng) của hệ điều hành Palm OS.
Lazarus là môi trường phát triển tức thời trực quan đa nền tảng. Lazarus sử dụng
trình biên dịch Free Pascal.

Bạn có thể tìm thấy một danh sách lớn nữa tại Pascaland. Trang web này viết bằng tiếng
Pháp, nhưng về cơ bản chỉ là một danh sách gồm các địa chỉ mạng (URL) tới các trình biên
dịch, do vậy khơng ảnh hưởng nhiều. Bạn cũng có thể ghé thăm Pascal Central, một trang
web chính về thơng tin và hỗ trợ cho Pascal dành cho máy Mac, với rất nhiều bộ sưu tập về
các bài báo, cộng với liên kết tới rất nhiều trình biên dịch và hướng dẫn khác.

Những phê phán trước đây
Mặc dù rất phổ biến (những năm 1980 và 1990 còn phổ biến hơn cả thời điểm bài viết này
được thực hiện), các phiên bản Pascal trước đây đã bị phê phán rộng rãi vì khơng phù hợp
cho việc sử dụng trong thực tế, ngoài việc dạy học. Brian Kernighan, người truyền bá C, đã
đưa ra những phê phán lớn nhất về Pascal trong đầu những năm 1980, bằng tác phẩm Why
Pascal Is Not My Favorite Programming Language (Tại sao Pascal khơng phải là ngơn ngữ
lập trình tơi ưa thích). Mặt khác, rất nhiều nỗ lực phát triển lớn trong những năm 1980
(như chuyển sang cho Apple Lisa và Macintosh) lại phụ thuộc rất nhiều vào Pascal (tới
mức mà giao tiếp C dành cho Mac OS phải giải quyết cả các kiểu dữ liệu của Pascal).
Trong những thập niên sau đó, Pascal tiếp tục phát triển, và những vấn đề mà Kernighan đã
đưa ra khơng cịn phù hợp cho các phiên bản hiện tại nữa. Thật đáng tiếc là, như những
điều mà Kernighan dự đoán trong bài viết, hầu hết các sự mở rộng để giải quyết các vấn đề
trên làm các trình biên dịch khơng tương thích với nhau. Mặc dù vậy, trong thập niên vừa
qua các biến thể dường như đã tập trung lại thành hai loại, theo chuẩn ISO hay theo chuẩn
Borland, đều đã dần dần đi ra ngồi dự đốn của Kernighan.
Dựa trên kinh nghiệm với Pascal, Niklaus Wirth đã phát triển thêm hai ngôn ngữ lập trình
nữa, Modula-2 và Oberon. Hai ngơn ngữ này mặc dù đã có nhiều cải tiến nhưng khơng thể
theo kịp thành công thương mại của Pascal.


Đáp:

so sánh c++

1. Ngôn ngữ C++ và Java ra đời ở 2 thời kỳ khác nhau trong q trình phát triển phần
mềm máy tính, do đó chúng có nhiều tính chất khác nhau. Cần nhiều trang giấy mới có thể
thống kê đầy đủ các tính chất, ưu/khuyết điểm của từng ngôn ngữ, ở đây chúng tôi chỉ tập
trung một số tính chất, ưu/khuyết điểm chính của từng ngôn ngữ:
- Trước hết bạn cần biết 2 phương pháp lập trình được dùng phổ biến từ trước tới nay:
phương pháp có cấu trúc và phương pháp hướng đối tượng. Phương pháp lập trình cấu trúc
sẽ phân ứng dụng ra thành nhiều module dịch vụ nhỏ, mỗi module thực hiện 1 dịch vụ cụ
thể, rõ ràng nào đó của ứng dụng. Mỗi module thường chứa nhiều hàm chức năng và một
số biến dữ liệu, các hàm và biến của 1 module có thể được giấu kín (private) hay cho phép


bên ngoài truy xuất (public). Nhược điểm lớn nhất của ngơn ngữ lập trình cấu trúc (C,
Pascal...) là nó cho phép định nghĩa biến tồn cục. Thí dụ các biến được định nghĩa trong
file chương trình chính của Pascal là biến toàn cục, các biến public trong 1 module C là
biến toàn cục. Như vậy, bất kỳ lệnh nào trong phần mềm (dù nó nằm ở module nào) cũng
có thể truy xuất biến tồn cục của chương trình. Hãy xét 1 ứng dụng rất lớn, gồm rất nhiều
module dịch vụ. Nếu bất kỳ lệnh nào cũng có thể truy xuất biến tồn cục thì khi nội dung
của biến ấy bị sai sẽ rất khó xác định nguyên nhân (lệnh nào) gây lỗi, và như vậy việc bảo
trì ứng dụng sẽ rất khó khăn. Trong trường hợp này, ta nói độ tín cậy, ổn định của phần
mềm rất thấp. Do đó phương pháp lập trình hướng đối tượng ra đời nhằm khắc phục các
nhược điểm của phương pháp cấu trúc. Trong phương pháp hướng đối tượng, 1 ứng dụng
được phân ra thành 1 tập các đối tượng độc lập, khi cần chúng có thể tương tác lẫn nhau
qua duy nhất 1 phương tiện: gửi thông điệp cho nhau. Phát biểu class trong ngôn ngữ
hướng đối tượng cho phép định nghĩa chi tiết 1 đối tượng được dùng trong ứng dụng, dùng
phát biểu class nhiều lần ta sẽ định nghĩa được n đối tượng cấu thành ứng dụng. Do các đối
tượng có độ độc lập cao, không ai thấy và truy xuất được các chi tiết bên trong của nhau

nên dù ứng dụng lớn chứa rất nhiều đối tượng, chúng ta vẫn dễ dàng quản lý chúng. Tóm
lại phương pháp hướng đối tượng cho phép xây dựng ứng dụng dễ dàng hơn, cấu trúc ứng
dụng trong sáng hơn, dễ quản lý hơn, dẫn tới dễ bảo trì, nâng cấp hơn và độ tin cậy đạt
được thường cao hơn.
- C++ ra đời khoảng 1984, nhằm nới rộng khả năng của ngôn ngữ C theo cơ chế tăng dần.
Có thể nói C++ là ngơn ngữ 'n in 1' vì nó cho phép viết chương trình đồng thời bằng nhiều
ngơn ngữ khác nhau: ngơn ngữ máy, ngôn ngữ assembly, ngôn ngữ C và ngôn ngữ C++.
Thực chất C++ chính là C có tăng cường thêm một số lệnh để định nghĩa class và dùng
chúng theo mơ hình hướng đối tượng, tuy nhiên mức độ hỗ trợ mơ hình hướng đối tượng
của C++ cịn thấp, khơng trong sáng, dễ gây nhâm lẫn cho người lập trình và dẫn tới phần
mềm C++ thường khơng có độ tin cậy cao, dễ gây lỗi. Tóm lại C++ cho phép ta lập trình
theo phương pháp cấu trúc lẫn hướng đối tượng hoặc kết hợp chúng trong cùng 1 phần
mềm, tuy nhiên độ phức tạp của C++ là rất cao nên đòi hỏi người dùng phải bỏ ra rất nhiều
thời gian và sức lực để nắm vững ngôn ngữ.
- Java ra đời khoảng 1992, nó hỗ trợ thuần túy phương pháp lập trình hướng đối tượng và
hỗ trợ khá đầy đủ mơ hình hướng đối tượng, do đó nó trong sáng, dễ hiểu và đơn giản hơn
nhiều so với C++. Ứng dụng viết bằng Java thường có tính ổn định, tin cậy cao, dễ bảo trì,
nâng cấp về sau.
Về nguyên tắc, bạn có thể dùng C++ hay Java (hay bất kỳ ngơn ngữ lập trình đa dụng nào)
để viết ứng dụng giải quyết yêu cầu nào đó của bạn. Tuy nhiên tùy lĩnh vực giải quyết mà
ngơn ngữ nào sẽ thích hợp hơn. Thí dụ để lập trình các module chức năng cấp thấp (device
driver, hệ điều hành...) thì dùng ngơn ngữ C++ sẽ thích hợp hơn Java, file khả thi sẽ chạy
hiệu quả hơn. Còn viết các ứng dụng phục vụ trực tiếp người dùng đầu cuối (Web,
Email...) thì dùng Java sẽ đơn giản hơn, dễ bảo trì code của ứng dụng hơn.
Như chúng ta nói ở trên, xây dựng ứng dụng theo phương pháp lập trình hướng đối tượng
là định nghĩa n class đối tượng cấu thành ứng dụng đó, hơn nữa các đối tượng của ứng
dụng rất độc lập nhau và có thể phục vụ cho nhiều ứng dụng khác nữa. Trên tinh thần này,
khi bạn dịch 1 class mã nguồn Java, chương trình dịch sẽ tạo ra file *.class miêu tả class đó
ở ngơn ngữ trung gian (byte-code). Khi ứng dụng chạy, hàm qui định trong class ứng dụng



sẽ được kích hoạt, từng lệnh trong thân của hàm này sẽ chạy, nếu đó là lệnh gửi thơng điệp
đến đối tượng khác thì hệ thống (tức là máy ảo Java - JVM) sẽ tìm đối tượng tương ứng và
kích hoạt hàm được gọi, cứ thế mà hoạt động. Tóm lại, hệ thống không liên kết tĩnh các
class của ứng dụng thành 1 file khả thi như truyền thống.

Lập trình hương đối tượng
 Loại bỏ những thiếu sót của tiếp cận theo thủ tục
 Trong OOP
 Dữ liệu được xem như một phần tử chính yếu và được bảo vệ
 Hàm gắn kết với dữ liệu, thao tác trên dữ liệu
 Phân tách bài toán thành nhiều thực thể (đối tượng) à xây dựng dữ liệu +
hàm cho các đối tượng này.
 Tăng cường khả năng sử dụng lại
 Nhấn mạnh trên dữ liệu hơn là thủ tục
 Các chương trình được chia thành các đối tượng
 Dữ liệu được che giấu và không thể được truy xuất từ các hàm bên ngồi
 Các đối tượng có thể giao tiếp với nhau thông qua các hàm
 Dữ liệu hay các hàm mới có thể được thêm vào khi cần
 Theo tiếp cận từ dưới lên

C++ là một bước phát triển tiếp theo của C trong xu thế 'đối tượng hoá' ngơn ngữ,
nói như vậy là bởi hầu hết các trình dịch C++ đều lấy C làm nền cho tất cả các định
hướng nhằm tận dụng các ưu thế mà mô hình thiết kế hướng đối tượng mang lại.
Vốn dĩ C vẫn chưa được chuẩn hoá mặc cho rất nhiều cố gắng đã được đưa ra, các
trình dịch C++ lại càng khó tìm được tiếng nói chung. Các nhà cung cấp trình dịch
C đều muốn rằng sản phẩm của họ được các nhà phát triển công cụ ưa dùng, thế
nhưng các nhà cung cấp công cụ phát triển lại muốn các trình dịch hướng theo mơ
hình thiết kế vốn mn hình muôn vẻ mà họ đưa ra. Cứ như thế, C++ phát triển
trong sự thiếu nhất quán, hệ thống từ khoá không được hỗ trợ đầy đủ, đôi khi không

thống nhất, cách cấu trúc chương trình cũng khơng giống nhau mặc dù chúng giống
nhau về mơ hình.

Các phần chính của một chương trình c++


Có lẽ một trong những cách tốt nhất để bắt đầu học một ngơn ngữ lập trình là bằng một
chương trình. Vậy đây là chương trình đầu tiên của chúng ta :
// my first program in C++
#include <iostream.h>
int main ()
{
cout << "Hello World!";
return 0;
} Hello World!
Chương trình trên đây là chương trình đầu tiên mà hầu hết những người học nghề lập trình
viết đầu tiên và kết quả của nó là viết câu "Hello, World" lên màn hình. Đây là một trong
những chương trình đơn giản nhất có thể viết bằng C++ nhưng nó đã bao gồm những phần
cơ bản mà mọi chương trình C++ có. Hãy cùng xem xét từng dòng một :
// my first program in C++
Đây là dịng chú thích. Tất cả các dịng bắt đầu bằng hai dấu sổ (//) được coi là chút thích
mà chúng khơng có bất kì một ảnh hưởng nào đến hoạt động của chương trình. Chúng có
thể được các lập trình viên dùng để giải thích hay bình phẩm bên trong mã nguồn của
chương trình. Trong trường hợp này, dịng chú thích là một giải thích ngắn gọn những gì
mà chương trình chúng ta làm.
#include <iostream.h>
Các câu bắt đầu bằng dấu (#) được dùng cho preprocessor (ai dịch hộ tôi từ này với).
Chúng khơng phải là những dịng mã thực hiện nhưng được dùng để báo hiệu cho trình
dịch. Ở đây câu lệnh #include <iostream.h> báo cho trình dịch biết cần phải "include" thư
viện iostream. Đây là một thư viện vào ra cơ bản trong C++ và nó phải được "include" vì

nó sẽ được dùng trong chương trình. Đây là cách cổ điển để sử dụng thư viện iostream
int main ()
Dòng này tương ứng với phần bắt đầu khai báo hàm main. Hàm main là điểm mà tất cả các
chương trình C++ bắt đầu thực hiện. Nó khơng phụ thuộc vào vị trí của hàm này (ở đầu,
cuối hay ở giữa của mã nguồn) mà nội dung của nó ln được thực hiện đầu tiên khi
chương trình bắt đầu. Thêm vào đó, do ngun nhân nói trên, mọi chương trình C++ đều
phải tồn tại một hàm main.
Theo sau main là một cặp ngoặc đơn bởi vì nó là một hàm. Trong C++, tất cả các hàm mà
sau đó là một cặp ngoặc đơn () thì có nghĩa là nó có thể có hoặc khơng có tham số (khơng
bắt buộc). Nội dung của hàm main tiếp ngay sau phần khai báo chính thức được bao trong
các ngoặc nhọn ( { } ) như trong ví dụ của chúng ta
cout << "Hello World";
Dịng lệnh này làm việc quan trọng nhất của chương trình. cout là một dòng (stream)
output chuẩn trong C++ được định nghĩa trong thư viện iostream và những gì mà dịng
lệnh này làm là gửi chuỗi kí tự "Hello World" ra màn hình.
Chú ý rằng dịng này kết thúc bằng dấu chấm phẩy ( ; ). Kí tự này được dùng để kết thúc
một lệnh và bắt buộc phải có sau mỗi lệnh trong chương trình C++ của bạn (một trong
những lỗi phổ biến nhất của những lập trình viên C++ là quên mất dấu chấm phẩy).
return 0;
Lệnh return kết thúc hàm main và trả về mã đi sau nó, trong trường hợp này là 0. Đây là
một kết thúc bình thường của một chương trình khơng có một lỗi nào trong quá trình thực
hiện. Như bạn sẽ thấy trong các ví dụ tiếp theo, đây là một cách phổ biến nhất để kết thúc


một chương trình C++.
Chương trình được cấu trúc thành những dịng khác nhau để nó trở nên dễ đọc hơn nhưng
hồn tồn khơng phải bắt buộc phải làm vậy. Ví dụ, thay vì viết
int main ()
{
cout << " Hello World ";

return 0;
}
ta có thể viết
int main () { cout << " Hello World "; return 0; }
cũng cho một kết quả chính xác như nhau.
Trong C++, các dịng lệnh được phân cách bằng dấu chấm phẩy (
. Việc chia chương
trình thành các dịng chỉ nhằm để cho nó dễ đọc hơn mà thơi.
Các chú thích.
Các chú thích được các lập trình viên sử dụng để ghi chú hay mơ tả trong các phần của
chương trình. Trong C++ có hai cách để chú thích
// Chú thích theo dịng
/* Chú thích theo khối */
Chú thích theo dịng bắt đầu từ cặp dấu xổ (//) cho đến cuối dịng. Chú thích theo khối bắt
đầu bằng /* và kết thúc bằng */ và có thể bao gồm nhiều dòng. Chúng ta sẽ thêm các chú
thích cho chương trình :
/* my second program in C++
with more comments */
#include <iostream.h>
int main ()
{
cout << "Hello World! "; // says Hello World!
cout << "I'm a C++ program"; // says I'm a C++ program
return 0;
} Hello World! I'm a C++ program
Nếu bạn viết các chú thích trong chương trình mà không sử dụng các dấu //, /* hay */, trình
dịch sẽ coi chúng như là các lệnh C++ và sẽ hiển thị các lỗi.
Nguồn internet
. Một chương trình Visual Basic gồm có phần mã
lập trình và các hình ảnh

 Form_Activate: Mỗi lần một form trở nên active (current) thì nó
generate một Activate event. Ta có thể dùng event nầy để refresh
display trên form.
 Form_QueryUnload: Khi User click dấu x phía trên bên phải để
close form thì nó generate QueryUnload event. Syntax của Sub nầy
như dưới đây:

Một Form cũng có nhiều Events rất hữu dụng.


Form_Initialize: Event nầy xãy ra trước nhất và chỉ một lần thôi khi ta instantiate form
đầu tiên. Ta dùng Form_Initialize event để thực hiện những gì cần phải làm chung cho tất
cả các instances của form nầy.
Form_Load: Event nầy xãy ra mỗi lần ta instantiate một form. Nếu ta chỉ dùng một
instance duy nhất của một form trong chương trình thì Form_Load coi như tương đương
với Form_Initialize. Ta dùng Form_Load event để initialise variables, controls v.v. cho
instance nầy.
Bên trong Form_Load bạn không thể dùng Setfocus cho một control nào trên form vì form
chưa hẳn thành hình (ra đời). Muốn làm việc ấy bạn phải delay (trì hoản) một chút xíu
bằng cách dùng Control Timer để đợi cho Form_Load được hoàn tất. Thí dụ:
Form_Activate: Mỗi lần một form trở nên active (current) thì nó generate một Activate
event. Ta có thể dùng event nầy để refresh display trên form.
Form_QueryUnload: Khi User click dấu x phía trên bên phải để close form thì nó
generate QueryUnload event. Syntax của Sub nầy như dưới đây:

Controls là gì?
Controls vừa có hình, vừa có code chạy bên trong một window nho nhỏ, giống như một
form. Khi ta lập trình VB6 ta lấp ráp các controls (là những vật dụng tiền chế) trên một hay
nhiều form để có một chương trình nhanh chóng. Ta giao dịch với một control qua ba đặc
tính của control:

 Properties: tập hợp các đặc tính của control mà ta có thể ấn định lúc
design time hay run-time. Có nhiều properties về diện mạo, nếu ta
thay đổi at design time sẽ thấy kết quả hiện ra lập tức, thí dụ Font
hay màu sắc.
 Methods: những gì control thực hiện đuợc, tức là những khả năng
của nó.
 Events: những sự cố mà control sẽ thơng báo cho chúng ta biết khi
nó xãy ra với control. Khi một event xãy ra VB6 sẽ xử lý một Event
Handler (thí dụ như Sub Command1_Click()), miễn là chúng ta viết
code sẵn trong đó. Nếu khơng có code thì coi như chúng ta khơng
thèm biết đến các event loại đó. Có một số Events mà chúng ta
thường xử lý là:
o Click : xãy ra khi user click lên control. Ta thường dùng nó
cho CommandButton và Listbox.
o MouseDown, MouseUp : mỗi khi User bấm một mouse
button là có một MouseDown Event, khi User bng nó ra
thì có một MouseUp Event. Ta thường dùng MouseDown
Event để Popup context sensitive menu hay bắt đầu một diễn
biến Drag.
Thí dụ:
Private Sub Foods_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)


If Button = vbRightButton Then ' if Right button was pressed
PopupMenu mnuActions ' popup a menu
End If
End Sub
Private Sub DrinkList_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As
Single)

DrinkList.drag ' Displaying a drag icon to start the drag process
End Sub

Để ý là Click không cho chúng ta thêm chi tiết gì về sự cố, trong khi
MouseDown/MouseUp cho ta biết vị trí của cursor, button nào của Mouse
được bấm và lúc ấy User có bấm nút Shift, Ctrl hay Alt không. Mỗi Click là
đi đôi với một cặp MouseDown/MouseUp. Nếu bạn muốn xử lý vừa Click
lẫn MouseDown thì phải cẩn thận. Thí dụ bạn muốn vừa handle Click event
vừa handle Mouse Drag thì phải làm sao phân biệt hai trường hợp. Nếu
không User chỉ muốn thấy kết quả của Click mà lại thấy control bắt đầu
display một Drag icon thì sẽ bực mình.
o

KeyPress : xãy ra khi user Press một key. Ta thường dùng nó
cho TextBox để loại ra (filter out) các keystrokes ta không
chấp nhận. KeyPress cho ta ASCII value, một con số có giá
trị từ 1 đến 255, của key.
Trong thí dụ dưới đây, một Enter key sẽ được coi như một
TAB key:

Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0 ' Swallow the character to avoid side effect
SendKeys "{TAB}" ' Emulate entering a TAB
End If
End Sub
o KeyDown, KeyUp : mỗi KeyPress event

là cho ta một cặp
KeyDown/KeyUp event. KeyDown/KeyUp cho ta KeyCode

và Shift value. Để detect Function key ta cần dùng KeyDown
event.
Trong thí dụ dưới đây, ta display Function key User bấm:

Private Sub Text3_KeyDown(KeyCode As Integer, Shift As Integer)
If (KeyCode >= 112) And (KeyCode <= 123) Then
MsgBox "You pressed the Function key: F" & Trim(Str(KeyCode - 111))
End If
End Sub
o GotFocus : Control trở nên active khi nó nhận được

Focus.
Nó sẽ generate một GotFocus Event. Ta có thể dùng nó để
đổi màu background của một text box như trong thí dụ dưới
đây:

Private Sub Text2_GotFocus()
Text2.BackColor = vbYellow
End Sub


o

LostFocus : Thường thường hể một Control GotFocus thì
trước đó có một Control LostFocus. Ta có thể dùng Event
nầy để Validate entry data hay thu xếp công chuyện cho một
control vừa mất Focus.
Trong thí dụ dưới đây, nếu User khơng đánh vào một con số
ở trong Textbox Text1 thì sẽ được thông báo và Tab Cursor
sẽ trở lại Textbox Text1.


Private Sub Text1_LostFocus()
If Not IsNumeric(Text1.Text) Then
MsgBox "Please enter a number!"
Text1.SetFocus
End If
End Sub
o DragDrop : xãy ra khi

ta drop một cái gì lên control .
Parameter Source cho ta biết Control nào đã được Drag và
Drop. Nhiều khi một control có thể nhận drop từ nhiều
control khác nhau. Trong trường hợp đó ta phải test xem
hoặc Control Type, hoặc Name hoặc Tag value của Source
control là gì để tùy nghi xử lý.
Trong thí dụ dưới đây, khi User drop mouse xuống Textbox
Text2, nếu Source là một Listbox, khơng cần biết Listbox
nào, thì ta copy dòng được chọn trong Listbox ấy qua
Textbox Text2.

Private Sub Text2_DragDrop(Source As Control, X As Single, Y As Single)
If TypeOf Source Is ListBox Then
Text2.Text = Source.Text
End If
End Sub

TextBox
TextBox là control đuợc dùng nhiều nhất để display text và nhận keystroke của Userđể sửa
đổi text có sẵn hay cho vào text mới. Property chính và default của Textbox là text, tức là
thường thường Text2.text có thể được viết tắt là Text2. Ta có thể disable (khiến nó bất lực,

khơng phản ứng gì hết và khơng cho sửa đổi) một text box bằng cách set Property Enable
ra False (chữ sẽ bị mờ đi), hay Lock (không cho sửa đổi) một text box bằng cách set
Property Locked ra True (chữ không bị mờ).
Text có thể được Align (Alignment Property) để display bên trái, chính giữa hay bên phải
của hộp nó.



Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×