Data Structures and Algorithms, Summaries of Economics

Stack and Queue and Graph and Sort

Typology: Summaries

2023/2024

Uploaded on 12/16/2024

djinh-manh-djuc
djinh-manh-djuc 🇭🇰

1 document

1 / 461

Toggle sidebar

This page cannot be seen from the preview

Don't miss anything!

bg1
hiện, chúng xu hướng chạy nhanh nhanh hơn nữa, cũng như những nguồn
được biên dịch rồi thì được dùng lại.
Do tất cả các ngôn ngữ .NET Framework cùng tạo ra sản phẩm MSIL giống nhau, nên
kết quả một đối tượng được tạo ra từ ngôn ngữ này thể được truy cập hay được dẫn
xuất từ một đối tượng của ngôn ngữ khác trong .NET. dụ, người phát triển thể tạo
một lớp cơ sở trong VB.NET và sau đó dẫn xuất nó trong C# một cách dễ dàng.
Ngôn ngữ C#
Ngôn ngữ C# khá đơn giản, chỉ khoảng 80 từ khóa hơn mười mấy kiểu dữ liệu được
xây dựng sẵn. Tuy nhiên, ngôn ngữ C# ý nghĩa cao khi thực thi những khái niệm
lập trình hiện đại. C# bao gồm tất cả những hỗ trợ cho cấu trúc, thành phần component,
lập trình hướng đối tượng. Những tính chất đó hiện diện trong một ngôn ngữ lập trình
hiện đại. ngôn ngữ C# hội đủ những điều kiện như vậy, hơn nữa được xây dựng
trên nền tảng của hai ngôn ngữ mạnh nhất là C++ và Java.
Ngôn ngữ C# được phát triển bởi đội ngũ kỹ của Microsoft, trong đó người dẫn đầu
Anders Hejlsberg Scott Wiltamuth. Cả hai người này điều những người nổi tiếng,
trong đó Anders Hejlsberg được biết đến tác giả của Turbo Pascal, một ngôn ngữ lập
trình PC phổ biến. ông đứng đầu nhóm thiết kế Borland Delphi, một trong những
thành công đầu tiên của việc xây dựng môi trường phát triển tích hợp (IDE) cho lập trình
client/server.
Phần cốt lõi hay còn gọi trái tim của bất cứ ngôn ngữ lập trình hướng đối tượng sự
hỗ trợ của cho việc định nghĩa làm việc với những lớp. Những lớp thì định nghĩa
những kiểu dữ liệu mới, cho phép người phát triển mở rộng ngôn ngữ để tạo hình
tốt hơn để giải quyết vấn đề. Ngôn ngữ C# chứa những từ khóa cho việc khai báo những
kiểu lớp đối tượng mới những phương thức hay thuộc tính của lớp, cho việc thực
thi đóng gói, kế thừa, đa hình, ba thuộc tính bản của bất cứ ngôn ngữ lập trình
hướng đối tượng.
Trong ngôn ngữ C# mọi thứ liên quan đến khai báo lớp điều được tìm thấy trong phần
khai báo của nó. Định nghĩa một lớp trong ngôn ngữ C# không đòi hỏi phải chia ra tập
tin header tập tin nguồn giống như trong ngôn ngữ C++. Hơn thế nữa, ngôn ngữ C#
hỗ trợ kiểu XML, cho phép chèn các tag XML để phát sinh tự động các document cho
lớp.
C# cũng hỗ trợ giao diện interface, được xem như một cam kết với một lớp cho
những dịch vụ giao diện quy định. Trong ngôn ngữ C#, một lớp chỉ thể kế thừa từ
duy nhất một lớp cha, tức không cho đa kế thừa như trong ngôn ngữ C++, tuy nhiên
một lớp thể thực thi nhiều giao diện. Khi một lớp thực thi một giao diện thì sẽ hứa
là nó sẽ cung cấp chức năng thực thi giao diện.
11/471
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Partial preview of the text

Download Data Structures and Algorithms and more Summaries Economics in PDF only on Docsity!

hiện, chúng có xu hướng là chạy nhanh và nhanh hơn nữa, cũng như là những mã nguồn được biên dịch rồi thì được dùng lại.

Do tất cả các ngôn ngữ .NET Framework cùng tạo ra sản phẩm MSIL giống nhau, nên kết quả là một đối tượng được tạo ra từ ngôn ngữ này có thể được truy cập hay được dẫn xuất từ một đối tượng của ngôn ngữ khác trong .NET. Ví dụ, người phát triển có thể tạo một lớp cơ sở trong VB.NET và sau đó dẫn xuất nó trong C# một cách dễ dàng.

Ngôn ngữ C#

Ngôn ngữ C# khá đơn giản, chỉ khoảng 80 từ khóa và hơn mười mấy kiểu dữ liệu được xây dựng sẵn. Tuy nhiên, ngôn ngữ C# có ý nghĩa cao khi nó thực thi những khái niệm lập trình hiện đại. C# bao gồm tất cả những hỗ trợ cho cấu trúc, thành phần component, lập trình hướng đối tượng. Những tính chất đó hiện diện trong một ngôn ngữ lập trình hiện đại. Và ngôn ngữ C# hội đủ những điều kiện như vậy, hơn nữa nó được xây dựng trên nền tảng của hai ngôn ngữ mạnh nhất là C++ và Java.

Ngôn ngữ C# được phát triển bởi đội ngũ kỹ sư của Microsoft, trong đó người dẫn đầu là Anders Hejlsberg và Scott Wiltamuth. Cả hai người này điều là những người nổi tiếng, trong đó Anders Hejlsberg được biết đến là tác giả của Turbo Pascal, một ngôn ngữ lập trình PC phổ biến. Và ông đứng đầu nhóm thiết kế Borland Delphi, một trong những thành công đầu tiên của việc xây dựng môi trường phát triển tích hợp (IDE) cho lập trình client/server.

Phần cốt lõi hay còn gọi là trái tim của bất cứ ngôn ngữ lập trình hướng đối tượng là sự hỗ trợ của nó cho việc định nghĩa và làm việc với những lớp. Những lớp thì định nghĩa những kiểu dữ liệu mới, cho phép người phát triển mở rộng ngôn ngữ để tạo mô hình tốt hơn để giải quyết vấn đề. Ngôn ngữ C# chứa những từ khóa cho việc khai báo những kiểu lớp đối tượng mới và những phương thức hay thuộc tính của lớp, và cho việc thực thi đóng gói, kế thừa, và đa hình, ba thuộc tính cơ bản của bất cứ ngôn ngữ lập trình hướng đối tượng.

Trong ngôn ngữ C# mọi thứ liên quan đến khai báo lớp điều được tìm thấy trong phần khai báo của nó. Định nghĩa một lớp trong ngôn ngữ C# không đòi hỏi phải chia ra tập tin header và tập tin nguồn giống như trong ngôn ngữ C++. Hơn thế nữa, ngôn ngữ C# hỗ trợ kiểu XML, cho phép chèn các tag XML để phát sinh tự động các document cho lớp.

C# cũng hỗ trợ giao diện interface, nó được xem như một cam kết với một lớp cho những dịch vụ mà giao diện quy định. Trong ngôn ngữ C#, một lớp chỉ có thể kế thừa từ duy nhất một lớp cha, tức là không cho đa kế thừa như trong ngôn ngữ C++, tuy nhiên một lớp có thể thực thi nhiều giao diện. Khi một lớp thực thi một giao diện thì nó sẽ hứa là nó sẽ cung cấp chức năng thực thi giao diện.

Trong ngôn ngữ C#, những cấu trúc cũng được hỗ trợ, nhưng khái niệm về ngữ nghĩa của nó thay đổi khác với C++. Trong C#, một cấu trúc được giới hạn, là kiểu dữ liệu nhỏ gọn, và khi tạo thể hiện thì nó yêu cầu ít hơn về hệ điều hành và bộ nhớ so với một lớp. Một cấu trúc thì không thể kế thừa từ một lớp hay được kế thừa nhưng một cấu trúc có thể thực thi một giao diện.

Ngôn ngữ C# cung cấp những đặc tính hướng thành phần (component-oriented), như là những thuộc tính, những sự kiện. Lập trình hướng thành phần được hỗ trợ bởi CLR cho phép lưu trữ metadata với mã nguồn cho một lớp. Metadata mô tả cho một lớp, bao gồm những phương thức và những thuộc tính của nó, cũng như những sự bảo mật cần thiết và những thuộc tính khác. Mã nguồn chứa đựng những logic cần thiết để thực hiện những chức năng của nó.. Do vậy, một lớp được biên dịch như là một khối self-contained, nên môi trường hosting biết được cách đọc metadata của một lớp và mã nguồn cần thiết mà không cần những thông tin khác để sử dụng nó.

Một lưu ý cuối cùng về ngôn ngữ C# là ngôn ngữ này cũng hỗ trợ việc truy cập bộ nhớ trực tiếp sử dụng kiểu con trỏ của C++ và từ khóa cho dấu ngoặc [] trong toán tử. Các mã nguồn này là không an toàn (unsafe). Và bộ giải phóng bộ nhớ tự động của CLR sẽ không thực hiện việc giải phóng những đối tượng được tham chiếu bằng sử dụng con trỏ cho đến khi chúng được giải phóng.

Nếu chúng ta đã sử dụng Java và tin rằng nó đơn giản, thì chúng ta cũng sẽ tìm thấy rằng C# cũng đơn giản. Hầu hết mọi người đều không tin rằng Java là ngôn ngữ đơn giản. Tuy nhiên, C# thì dễ hơn là Java và C++.

C# là ngôn ngữ hiện đại

Điều gì làm cho một ngôn ngữ hiện đại? Những đặc tính như là xử lý ngoại lệ, thu gom bộ nhớ tự động, những kiểu dữ liệu mở rộng, và bảo mật mã nguồn là những đặc tính được mong đợi trong một ngôn ngữ hiện đại. C# chứa tất cả những đặc tính trên. Nếu là người mới học lập trình có thể chúng ta sẽ cảm thấy những đặc tính trên phức tạp và khó hiểu. Tuy nhiên, cũng đừng lo lắng chúng ta sẽ dần dần được tìm hiểu những đặc tính qua các chương trong cuốn sách này.

Con trỏ được tích hợp vào ngôn ngữ C++. Chúng cũng là nguyên nhân gây ra những rắc rối của ngôn ngữ này. C# loại bỏ những phức tạp và rắc rối phát sinh bởi con trỏ. Trong C#, bộ thu gom bộ nhớ tự động và kiểu dữ liệu an toàn được tích hợp vào ngôn ngữ,sẽ loại bỏ những vấn đề rắc rối của C++.

C# là ngôn ngữ hướng đối tượng

Những đặc điểm chính của ngôn ngữ hướng đối tượng (Object-oriented language) là sự đóng gói (encapsulation), sự kế thừa (inheritance), và đa hình (polymorphism). C# hỗ trợ tất cả những đặc tính trên. Phần hướng đối tượng của C# sẽ được trình bày chi tiết trong một chương riêng ở phần sau.

C# là ngôn ngữ mạnh mẽ và cũng mềm dẻo

Như đã đề cập trước, với ngôn ngữ C# chúng ta chỉ bị giới hạn ở chính bởi bản thân hay là trí tưởng tượng của chúng ta. Ngôn ngữ này không đặt những ràng buộc lên những việc có thể làm. C# được sử dụng cho nhiều các dự án khác nhau như là tạo ra ứng dụng xử lý văn bản, ứng dụng đồ họa, bản tính, hay thậm chí những trình biên dịch cho các ngôn ngữ khác.

C# là ngôn ngữ ít từ khóa

C# là ngôn ngữ sử dụng giới hạn những từ khóa. Phần lớn các từ khóa được sử dụng để mô tả thông tin. Chúng ta có thể nghĩ rằng một ngôn ngữ có nhiều từ khóa thì sẽ mạnh hơn. Điều này không phải sự thật, ít nhất là trong trường hợp ngôn ngữ C#, chúng ta có thể tìm thấy rằng ngôn ngữ này có thể được sử dụng để làm bất cứ nhiệm vụ nào. Bảng sau liệt kê các từ khóa của ngôn ngữ C#.

Từ khóa của ngôn ngữ C# abstract default foreach object sizeof unsafe as delegate goto operator stackalloc ushort base do if out static using

bool double implicit override string virtual break else in params struct volatile byte enum int private switch void case event interface protected this while catch explicit internal public throw char extern is readonly true checked false lock ref try

class finally long return typeof const fixed namespace sbyte uint continue float new sealed ulong decimal for null short unchecked

C# là ngôn ngữ hướng module

Mã nguồn C# có thể được viết trong những phần được gọi là những lớp, những lớp này chứa các phương thức thành viên của nó. Những lớp và những phương thức có thể được sử dụng lại trong ứng dụng hay các chương trình khác. Bằng cách truyền các mẫu thông tin đến những lớp hay phương thức chúng ta có thể tạo ra những mã nguồn dùng lại có hiệu quả.

C# sẽ là một ngôn ngữ phổ biến

C# là một trong những ngôn ngữ lập trình mới nhất. Vào thời điểm cuốn sách này được viết, nó không được biết như là một ngôn ngữ phổ biến. Nhưng ngôn ngữ này có một số lý do để trở thành một ngôn ngữ phổ biến. Một trong những lý do chính là Microsoft và sự cam kết của .NET

Microsoft muốn ngôn ngữ C# trở nên phổ biến. Mặc dù một công ty không thể làm một sản phẩm trở nên phổ biến, nhưng nó có thể hỗ trợ. Cách đây không lâu, Microsoft đã gặp sự thất bại về hệ điều hành Microsoft Bob. Mặc dù Microsoft muốn Bob trở nên phổ biến nhưng thất bại. C# thay thế tốt hơn để đem đến thành công sơ với Bob. Thật sự

Một ngôn ngữ khác rất mạnh và phổ biến là Java, giống như C++ và C# được phát triển dựa trên C. Nếu chúng ta quyết định sẽ học Java sau này, chúng ta sẽ tìm được nhiều cái mà học từ C# có thể được áp dụng.

Điểm giống nhau C# và Java là cả hai cùng biên dịch ra mã trung gian: C# biên dịch ra MSIL còn Java biên dịch ra bytecode. Sau đó chúng được thực hiện bằng cách thông dịch hoặc biên dịch just-in-time trong từng máy ảo tương ứng. Tuy nhiên, trong ngôn ngữ C# nhiều hỗ trợ được đưa ra để biên dịch mã ngôn ngữ trung gian sang mã máy. C# chứa nhiều kiểu dữ liệu cơ bản hơn Java và cũng cho phép nhiều sự mở rộng với kiểu dữ liệu giá trị.

Ngôn ngữ C# hỗ trợ kiểu liệt kệ (enumerator), kiểu này được giới hạn đến một tập hằng được định nghĩa trước, và kiểu dữ liệu cấu trúc đây là kiểu dữ liệu giá trị do người dùng định nghĩa. Chúng ta sẽ được tìm hiểu kỹ hơn về kiểu dữ liệu tham chiếu và kiểu dữ liệu giá trị sẽ được trình bày trong phần sau

Tương tự như Java, C# cũng từ bỏ tính đa kế thừa trong một lớp, tuy nhiên mô hình kế thừa đơn này được mở rộng bởi tính đa kế thừa nhiều giao diện.

Các bước chuẩn bị cho chương trình

Thông thường, trong việc phát triển phần mềm, người phát triển phải tuân thủ theo quy trình phát triển phần mềm một cách nghiêm ngặt và quy trình này đã được chuẩn hóa. Tuy nhiên trong phạm vi của chúng ta là tìm hiểu một ngôn ngữ mới và viết những chương trình nhỏ thì không đòi hỏi khắt khe việc thực hiện theo quy trình. Nhưng để giải quyết được những vấn đề thì chúng ta cũng cần phải thực hiện đúng theo các bước sau. Đầu tiên là phải xác định vấn đề cần giải quyết. Nếu không biết rõ vấn đề thì ta không thể tìm được phương pháp giải quyết. Sau khi xác định được vấn đề, thì chúng ta có thể nghĩ ra các kế hoạch để thực hiện. Sau khi có một kế hoạch, thì có thể thực thi kế hoạch này. Sau khi kế hoạch được thực thi, chúng ta phải kiểm tra lại kết quả để xem vấn đề được giải quyết xong chưa. Logic này thường được áp dụng trong nhiều lĩnh vực khác nhau, trong đó có lập trình.

Khi tạo một chương trình trong C# hay bất cứ ngôn ngữ nào, chúng ta nên theo những bước tuần tự sau:

  • Xác định mục tiêu của chương trình.
  • Xác định những phương pháp giải quyết vấn đề.
  • Tạo một chương trình để giải quyết vấn đề.
  • Thực thi chương trình để xem kết quả.

Ví dụ mục tiêu để viết chương trình xử lý văn bản đơn giản, mục tiêu chính là xây dựng chương trình cho phép soạn thảo và lưu trữ những chuỗi ký tự hay văn bản. Nếu không có mục tiêu thì không thể viết được chương trình hiệu quả.

Bước thứ hai là quyết định đến phương pháp để viết chương trình. Bước này xác định những thông tin nào cần thiết được sử dụng trong chương trình, các hình thức nào được sử dụng. Từ những thông tin này chúng ta rút ra được phương pháp để giải quyết vấn đề.

Bước thứ ba là bước cài đặt, ở bước này có thể dùng các ngôn ngữ khác nhau để cài đặt,tuy nhiên, ngôn ngữ phù hợp để giải quyết vấn đề một cách tốt nhất sẽ được chọn. Trong phạm vi của sách này chúng ta mặc định là dùng C#, đơn giản là chúng ta đang tìm hiểu nó!

Và bước cuối cùng là phần thực thi chương trình để xem kết quả.

Chương trình C# đơn giản

Để bắt đầu cho việc tìm hiểu ngôn ngữ C# và tạo tiền đề cho các chương sau, chương đầu tiên trình bày một chương trình C# đơn giản nhất.

Chương trình C# đầu tiên.



class ChaoMung

{

static void Main( )

{

// Xuat ra man hinh

System.Console.WriteLine("Chao Mung");

}

}

Khai báo lớp trong C# không có dấu ; sau ngoặc } cuối cùng của lớp. Và khác với lớp trong C/C++ là chia thành 2 phần header và phần định nghĩa. Trong C# , định nghĩa một lớp được gói gọn trong dấu { } sau tên lớp và trong cùng một tập tin.

Phương thức

Hai thành phần chính cấu thành một lớp là thuộc tính hay tính chất và phương thức hay còn gọi là hành động ứng xử của đối tượng. Trong C# hành vi được định nghĩa như một phương thức thành viên của lớp.

Phương thức chính là các hàm được định nghĩa trong lớp. Do đó, ta còn có thể gọi các phương thức thành viên là các hàm thành viên trong một lớp. Các phương thức này chỉ ra rằng các hành động mà lớp có thể làm được cùng với cách thức làm hành động đó. Thông thường, tên của phương thức thường được đặt theo tên hành động, ví dụ như DrawLine() hay GetString().

Tuy nhiên trong ví dụ trên vừa trình bày, chúng ta có hàm thành viên là Main() hàm này là hàm đặc biệt, không mô tả hành động nào của lớp hết, nó được xác định là hàm đầu vào của lớp (entry point) và được CRL gọi đầu tiên khi thực thi.

Trong C#, hàm Main() được viết ký tự hoa đầu, và có thể trả về giá trị void hay int

Khi chương trình thực thi, CLR gọi hàm Main() đầu tiên, hàm Main() là đầu vào của chương trình, và mỗi chương trình phải có một hàm Main(). Đôi khi chương trình có nhiều hàm Main() nhưng lúc này ta phải xác định các chỉ dẫn biên dịch để CLR biết đâu là hàm Main() đầu vào duy nhất trong chương trình.

Việc khai báo phương thức được xem như là một sự giao ước giữa người tạo ra lớp và người sử dụng lớp này. Người xây dựng các lớp cũng có thể là người dùng lớp đó, nhưng không hoàn toàn như vậy. Vì có thể các lớp này được xây dựng thành các thư viện chuẩn và cung cấp cho các nhóm phát triển khác…Do vậy việc tuân thủ theo các qui tắc lá rất cần thiết.

Để khai báo một phương thức, phải xác định kiểu giá trị trả về, tên của phương thức, và cuối cùng là các tham số cần thiết cho phương thức thực hiện.

Chú thích

Một chương trình được viết tốt thì cần phải có chú thích các đoạn mã được viết. Các đoạn chú thích này sẽ không được biên dịch và cũng không tham gia vào chương trình. Mục đích chính là làm cho đoạn mã nguồn rõ ràng và dễ hiểu.

Trong ví dụ 1 có một dòng chú thích :

// Xuat ra man hinh.

Một chuỗi chú thích trên một dòng thì bắt đầu bằng ký tự “//”. Khi trình biên dịch gặp hai ký tự này thì sẽ bỏ qua dòng đó.

Ngoài ra C# còn cho phép kiểu chú thích cho một hay nhiều dòng, và ta phải khai báo “/” ở phần đầu chú thích và kết thúc chú thích là ký tự “/”.

Minh họa dùng chú thích trên nhiều dòng


class ChaoMung

{

static void Main()

{

/* Xuat ra man hinh chuoi ‘chao mung’

Su dung ham WriteLine cua lop System.Console

*/

System.Console.WriteLine(“Chao Mung”);

}

}


Kết quả:

Chao Mung


Ngoài hai kiểu chú thích trên giống trong C/C++ thì C# còn hỗ trợ thêm kiểu thứ ba cũng là kiểu cuối cùng, kiểu này chứa các định dạng XML nhằm xuất ra tập tin XML khi biên dịch để tạo sưu liệu cho mã nguồn .Chúng ta sẽ bàn kiểu này ở các chương trình ở các phần tiếp.

Tương tự như vậy, .NET Framework có xây dựng một lớp Dictionary bên trong namespace System.Collections, và tương ứng ta có thể tạo một lớp Dictionary khác nằm trong namespace ProgramCSharp.DataStructures, điều này hoàn toàn không dẫn đến sự tranh chấp với nhau.

Trong ví dụ minh họa 1.2 đối tượng Console bị hạn chế bởi namespace bằng việc sử dụng mã lệnh:

System.Console.WriteLine();

Toán tử ‘.’

Trong vídụ 2.2 trên dấu ‘.’ được sử dụng để truy cập đến phương thức hay dữ liệu trong một lớp (trong trường hợp này phương thức là WriteLine()), và ngăn cách giữa tên lớp đến một namespace xác nhận (namspace System và lớp là Console). Việc thực hiện này theo hướng từ trên xuống, trong đó mức đầu tiên namespace là System, tiếp theo là lớp Console,và cuối cùng là truy cập đến các phương thức hay thuộc tính của lớp.

Trong nhiều trường hợp namespace có thể được chia thành các namespace con gọi là subnamespace. Ví dụ trong namespace System có chứa một số các subnamesapce như Configuration, Collections, Data, và còn rất nhiều nữa, hơn nữa trong namespace Collection còn chia thành nhiều namesapce con nữa.

Namespace giúp chúng ta tổ chức và ngăn cách những kiểu. Khi chúng ta viết một chương trình C# phức tạp, chúng ta có thể phải tạo một kiến trúc namespace riêng cho mình,và không giới hạn chiều sâu của cây phân cấp namespace. Mục đích của namespace là giúp chúng ta chia để quản lý những kiến trúc đối tượng phức tạp.

Từ khóa using

Để làm cho chương trình gọn hơn, và không cần phải viết từng namespace cho từng đối tượng, C# cung cấp từ khóa là using, sau từ khóa này là một namespace hay subnamespace với mô tả đầy đủ trong cấu trúc phân cấp của nó. Ta có thể dùng dòng lệnh :

using System;

ở đầu chương trình và khi đó trong chương trình nếu chúng ta có dùng đối tượng Console thì không cần phải viết đầy đủ : System.Console. mà chỉ cần viết Console. thôi.

Dùng khóa using

using System;

class ChaoMung

{

static void Main()

{

//Xuat ra man hinh chuoi thong bao

Console.WriteLine("Chao Mung");

}

}



Kết quả:

Chao Mung



Phải đặt câu using System trước định nghĩa lớp ChaoMung.

Mặc dù chúng ta chỉ định rằng chúng ta sử dụng namespace System, và không giống như các ngôn ngữ khác, không thể chỉ định rằng chúng ta sử dụng đối tượng System.Console.

Không hợp lệ trong C#.



using System.Console;

đặt tên biến, hằng, hàm, và nhiều định danh khác nữa. Qui ước trong giáo trình này dùng cú pháp lạc đà (camel notation) cho tên biến và cú pháp Pascal cho hàm, hằng, và thuộc tính.

Biến myDictionary theo cách đặt tên cú pháp lạc đà.

Hàm DrawLine, thuộc tính ColorBackground theo cách đặt tên cú pháp Pascal.

Từ khóa static

Hàm Main() trong ví dụ minh họa trên có nhiều hơn một cách thiết kế. Trong minh họa này hàm Main() được khai báo với kiểu trả về là void, tức là hàm này không trả về bất cứ giá trị nào cả. Đôi khi cần kiểm tra chương trình có thực hiện đúng hay không, người lập trình có thể khai báo hàm Main() trả về một giá trị nào đó để xác định kết quả thực hiện của chương trình.

Trong khai báo của ví dụ trên có dùng từ khóa static :

static void Main()

{

.......

}

Từ khóa này chỉ ra rằng hàm Main() có thể được gọi mà không cần phải tạo đối tượng ChaoMung. Những vấn đề liên quan đến khai báo lớp, phương thức, hay thuộc tính sẽ được trình bày chi tiết trong các chương tiếp theo.

Phát triển chương trình minh họa

Có tối thiểu là hai cách để soạn thảo, biên dịch và thực thi chương trình trong cuốn sách này:

Sử dụng môi trường phát triển tích hợp (IDE) Visual Studio .NET

Sử dụng chương trình soạn thảo văn bản bất kỳ như Notepad rồi dùng biên dịch dòng lệnh.

Mặc dù chúng ta có thể phát triển phần mềm bên ngoài Visual Studio .NET, IDE cung cấp nhiều các tiện ích hỗ trợ cho người phát triển như: hỗ trợ phần soạn thảo mã nguồn như canh lề, màu sắc, tích hợp các tập tin trợ giúp, các đặc tính intellisense,...Nhưng

điều quan trọng nhất là IDE phải có công cụ debug mạnh và một số công cụ trợ giúp phát triển ứng dụng khác.

Trong cuốn sách này giả sử rằng người đọc đang sử dụng Visual Studio .NET. Phần trình này sẽ tập trung vào ngôn ngữ và platform hơn là công cụ phát triển. Chúng ta có thể sao chép tất cả những mã nguồn ví dụ vào trong một chương trình soạn thảo văn bản như Notepad hay Emacs, lưu chúng dưới dạng tập tin văn bản, và biên dịch chúng bằng trình biên dịch dòng lệnh C#, chương trình này được phân phối cùng .NET Framework SDK. Trong những chương cuối về xây dựng các ứng dụng trên Windows và Web, chúng ta sẽ sử dụng công cụ Visual Studio .NET để tạo ra các Windows Form và Web Form, tuy nhiên chúng ta cũng có thể viết bằng tay trong Notepad nếu chúng ta quyết định sử dụng cách làm bằng tay thay vì dùng công cụ thiết kế.

Sử dụng Notepad soạn thảo

Đầu tiên chúng ta sẽ mở chương trình Notepad rồi soạn thảo chương trình minh họa trên, lưu ý là ta có thể sử dụng bất cứ trình soạn thảo văn bản nào chứ không nhất thiết là Notepad. Sau khi soạn thảo xong thì lưu tập tin xuống đĩa và tập tin này có phần mở rộng là *.cs , trong ví dụ này là chaomung.cs. Bước tiếp theo là biên dịch tập tin nguồn vừa tạo ra. Để biên dịch ta dùng trình biên dịch dòng lệnh C# (csc.exe) chương trình này được chép vào máy trong quá trình cài .NET Framework. Để biết csc.exe nằm chính xác vị trí nào trong đĩa ta có thể dùng chức năng tìm kiếm của Windows.

Để thực hiện biên dịch chúng ta mở một cửa sổ dòng lệnh rồi đánh vào lệnh theo mẫu sau:

csc.exe [/out: <file thực thi>] <file nguồn>

csc.exe /out:d:\chaomung.exe d:\chaomung.cs

Thường thì khi biên dịch ta chỉ cần hai phần là tên của trình biên dịch và tên tập tin nguồn mà thôi. Trong mẫu trên có dùng một trong nhiều tùy chọn khi biên dịch là /out, theo sau là tên của chương trình thực thi hay chính là kết quả biên dịch tập tin nguồn.

Các tham số tùy chọn có rất nhiều nếu muốn tìm hiểu chúng ta có thể dùng lệnh:

csc.exe /?

Lệnh này xuất ra màn hình toàn bộ các tùy chọn biên dịch và các hướng dẫn sử dụng.

Hai hình sau minh họa quá trình nhập mã nguồn chương trình C# bằng một trình soạn thảo văn bản đơn giản như Notepad trong Windows. Và sau đó biên dịch tập tin mã

Visual Studio .NET tạo ra một namespace dựa trên tên của project mà ta vừa cung cấp (ChaoMung), và thêm vào chỉ dẫn sử dụng namespace System bằng lệnh using, bởi hầu như mọi chương trình mà chúng ta viết đều cần sử dụng các kiểu dữ liệu chứa trong namespace System.

Tạo ứng dụng C# console trong Visual Studio .NET

Phần soạn thảo mã nguồn cho project

Visual Studio .NET tạo một lớp tên là Class1, lớp này chúng ta có thể tùy ý đổi tên của chúng. Khi đổi tên của lớp, tốt nhất là đổi tên luôn tập tin chứa lớp đó(Class1.cs). Giả sử trong ví dụ trên chúng ta đổi tên của lớp thành ChaoMung, và đổi tên tập tin Class1.cs (đổi tên tập tin trong cửa sổ Solution Explorer).

Cuối cùng, Visual Studio .NET tạo một khung sườn chương trình, và kết thúc với chú thích TODO là vị trí bắt đầu của chúng ta. Để tạo chương trình chào mừng trong minh họa trên, ta bỏ tham số string[] args của hàm Main() và xóa tất cả các chú thích bên trong của hàm. Sau đó nhập vào dòng lệnh sau bên trong thân của hàm Main()

// Xuat ra man hinh

System.Console.WriteLine("Chao Mung");

Sau tất cả công việc đó, tiếp theo là phần biên dịch chương trình từ Visual Studio .NET. Thông thường để thực hiện một công việc nào đó ta có thể chọn kích hoạt chức năng trong menu, hay các button trên thanh toolbar, và cách nhanh nhất là sử dụng các phím nóng hay các phím kết hợp để gọi nhanh một chức năng.

Trong ví dụ, để biên dịch chương trình nhấn Ctrl-Shift-B hoặc chọn chức năng:

Build Build Solution. Một cách khác nữa là dùng nút lệnh trên thanh toolbar :

Để chạy chương trình vừa được tạo ra mà không sử dụng chế độ debug chúng ta có

thể nhấn Ctrl-F5 hay chọn Debug Start Without Debugging hoặc nút lệnh trên thanh toolbar của Visual Studio. NET

Tốt hơn hết là chúng ta nên bỏ ra nhiều thời gian để tìm hiểu hay khám phá môi trường phát triển Visual Studio .NET. Đây cũng là cách thức tốt mà những người phát triển ứng dụng và chúng ta nên thực hiện. Việc tìm hiểu Visual Studio .NET và thông thạo nó sẽ giúp cho chúng ta rất nhiều trong quá trình xây dựng và phát triển ứng dụng sau này.

Câu hỏi và trả lời

Một chương trình C# có thể chạy trên bất cứ máy nào?

Không phải tất cả. Một chương trình C# chỉ chạy trên máy có Common Language Runtime (CLR) được cài đặt. Nếu chúng ta copy một chương trình exe của C# qua một máy không có CLR thì chúng ta sẽ nhận được một lỗi. Trong những phiên bản của Windows không có CLR chúng ta sẽ được bảo rằng thiếu tập tin DLL.