Những thay đổi trong VB.NET

Một phần của tài liệu Tài liệu hướng dẫn giảng dạy chương trình kỹ thuật viên ngành lập trình potx (Trang 52)

VI.1. Thay đổi trong th tc và hàm

– Tham số là tham trị

Tham số truyền cho hàm hoặc thủ tục mặc định là tham trị ByVal chứ khơng phải ByRef như trong VB6. Trong VB6, tham số ParamArray vốn được truyền theo kiểu tham chiếu ByRef và khơng thể thay đổi thành ByVal nhưng trong VB.NET là tham trị ByVal và khơng thể thay đổi thành ByRef.

– Tham số tùy chọn

Tham số tùy chọn Optional phải khai báo giá trị mặc nhiên, khi khơng truyền tham số.

Ví dụ:

Sub TEST(ByVal a As Integer,Optional ByVal c As Boolean = False) ' Các câu lệnh

End Sub

– Cách hàm trả về giá trị

Giá trị của hàm cĩ thể trả về qua dịng lệnh Return.

Function TESTFUNCTION(ByVal a As Short, ByVal c As Short) As Integer ' Các câu lệnh

Return <giá trị trả về> End Function

– Cho phép nhiều hàm, thủ tục trùng tênị

Cĩ thể cĩ nhiều hàm và thủ tục trùng tên nhau (Overloaded) miễn là số tham số hoặc kiểu dữ liệu tham số khác nhau.

Ví dụ:

Function BinhPhuong(ByVal so As Integer) As Integer Return Convert.ToInt32(so^2)

End Function

Function BinhPhuong(ByVal so As Double) As Double Return so^2

End Function

Trong VB6, nếu tham số truyền vào là thuộc tính của một đối tượng cho thủ tục kiểu ByRef, những thay đổi trên tham số đĩ trong thủ tục khơng phản ánh trên thuộc tính. Ngược lại, trong VB.NET, các thay đổi như vậy đều thể hiện trên thuộc tính của đối tượng.

VI.2. Khai báo Option Strict

Khai báo Option Strict On|Off là một lệnh mới khơng cho phép các chuyển đổi kiểu làm mất dữ liệu. Nhưng chúng ta cĩ thể thực hiện các chuyển đổi mở rộng như chuyển biến kiểu Integer sang kiểu Long. Khai báo này (khi bật On) sẽ khơng cho phép tự động chuyển đổi kiểu chuỗi sang kiểu số hay ngược lại.

Ví dụ:

Option Strict On

--- Dim x As String, y As Integer ' x = y sẽ gây lỗi cú pháp ' nhưng phải dùng

' hoặc

x = y.ToString

VI.3. Kiu chui cĩ độ dài c định

Kiểu chuỗi cĩ độ dài cốđịnh trong VB6 khơng cịn được hỗ trợ trong VB.NET

VI.4. Ch th #Region … #End Region

Chỉ thị #Region … #End Region được dùng đểđánh dấu một khối lệnh cĩ thể thu gọn, giản ra trên cửa sổ viết lệnh. (adsbygoogle = window.adsbygoogle || []).push({});

Cú pháp:

#Region <chuỗi định danh> ' khối lệnh

#End Region

<chuỗi định danh>: bắt buộc, cĩ giá trị kiểu String, là tiêu đề của khối lệnh

Ví dụ:

#Region "Các khai báo"

' Đưa vào các dịng lệnh khai báo. #End Region

Khi thu lại:

+ Các khai báo

VI.5. Imports khơng gian tên (Namespace)

Mục đích của lệnh Imports là đểđưa khơng gian tên vào trong Module cho việc khai báo và tạo các lớp trong khơng gian tên ngắn gọn hơn.

Cú pháp:

Imports [<bí danh> = ]<khơng gian tên> [.<thành phần>]

<bí danh>: tùy chọn, kiểu String, là tên tắt của <Namespace> được sử dụng trong tham chiếu trên Module, Class. Nếu lệnh Imports khơng cĩ phần bí danh, các thành phần định nghĩa trong khơng gian tên cĩ thể được truy cập mà khơng cần chỉ rõ. Nếu cĩ bí danh, bí danh phải được sử dụng trong phần truy cập.

<khơng gian tên>: bắt buộc, khơng gian tên sử dụng trong Module, Class

<thành phần>: tùy chọn, tên của một thành phần đã được khai báo trong khơng gian tên. Nĩ cĩ thể là

định danh, structure, class…

Chú ý

– Mỗi lệnh Imports chỉđược sử dụng với một khơng gian tên.

– Mỗi Module cĩ thể cĩ nhiều dịng Imports

– Các lệnh Imports phải được đặt trước tất cả các khai báo, kể cả lệnh khai báo Module hoặc Class.

– Khơng được phép định nghĩa một thành phần ở cấp Module cùng tên với bí danh đã đặt Ví dụ: Imports Str = Microsoft.VisualBasic.String Class lopVidu Sub Chao() MessageBox.Show(Str.Left("Chào bạn", 5)) End Sub End Class VII. X lý li VII.1. Phân loi li

Trong VB.NET, chúng ta cĩ thể gặp các loại lỗi sau:

VII.1.1. Syntax error

Lỗi cú pháp, cịn gọi là lỗi trong lúc thiết kế. Những lỗi này dễ chỉnh sửa vì VB.NET sẽ kiểm tra cú pháp khi ta đang nhập từ bàn phím nên sẽ báo lỗi tức thời khi ta gõ sai hoặc dùng một từ khơng thích hợp.

VII.1.2. Run-time error

Lỗi thực thi xảy ra khi chương trình đang thực thi. Đây là những lỗi khĩ xác định hơn lỗi cú pháp. Lỗi thực thi cĩ thể từ các lý do khác nhau như:

– Mở một tập tin khơng tồn tại

– Truy xuất một thư mục nhưng khơng cĩ quyền trên đĩ

– Truy xuất dữ liệu một bảng khơng tồn tại trong CSDL (adsbygoogle = window.adsbygoogle || []).push({});

– Chia cho số 0

– Nhập chuỗi cho nơi cần nhập số hoặc ngược lại, v.v…

VII.1.3. Logic error

Lỗi luận lý cũng xảy ra khi chương trình đang thực thi và được thể hiện dưới những hình thức hay những kết quả khơng mong đợi. Loại lỗi này thường do sai lầm trong thuật giải.

VII.2. X lý li

Một lỗi xảy ra khi chương trình đang chạy gọi là một Exception. Trong CLR, Exception là một đối tượng từ lớp System.Exception. Chúng ta cần lưu ý một lỗi xảy ra trong lúc thực thi khơng làm treo chương trình, nhưng nếu khơng được xử lý sẽ làm treo chương trình. CLR chỉ ra tình trạng lỗi qua lệnh Throw. Lệnh này sẽđưa ra một đối tượng kiểu System.Exception chứa thơng tin về lỗi đang xảy ra.

Trước đây, chúng ta thường sử dụng cú pháp On Error Goto <nhãn lỗi> để xử lý lỗi. Đây là một loại xử

lý khơng cấu trúc vì kể từ dịng lệnh On Error Goto <nhãn lỗi> đến cuối thủ tục hay hàm, nếu dịng lệnh nào gây lỗi chương trình đều nhường quyền xử lý cho đoạn lệnh của <nhãn lỗi>. Với VB.NET, chúng ta phát hiện và xử lý lỗi một cách chặt chẽ với cú pháp

Cú pháp: Try ' các lệnh cĩ khả năng gây lỗi Catch ' các lệnh xử lý khi lỗi xảy ra [Finally] ' các lệnh thực hiện sau cùng End Try

Cấu trúc này cho phép chúng ta thử (Try) thực hiện một khối lệnh xem cĩ gây lỗi khơng; nếu cĩ sẽ bẫy và xử lý (Catch) lỗi.

Cấu trúc này chia làm các khối sau:

– Khối Try:

Chứa các câu lệnh cĩ khả năng gây lỗi

– Khối Catch:

Các dịng lệnh để bẫy và xử lý lỗi phát sinh trên khối Try. Khối này gồm một loạt các lệnh bắt đầu với từ khĩa Catch, biến kiểu Exception ứng với một kiểu Exception muốn bẫy và các lệnh xử lý. Dĩ

nhiên, chúng ta cĩ thể dùng một lệnh Catch cho các System.Exception, nhưng như thế sẽ khơng cung cấp thơng tin đầy đủ cho người dùng về lỗi đang xảy ra cũng như hướng dẫn cách xử lý cụ

thể cho mỗi tình huống. Ngồi những lỗi đã xử lý, cĩ thể xảy ra những lỗi ngồi dự kiến, để xử lý các lỗi này, chúng ta nên đưa thêm một lệnh Catch để bẫy tất cả các trường hợp cịn lại và xuất thơng tin về lỗi xảy ra.

– Khối Finally:

Khối tùy chọn, sau khi chạy qua các khối Try và Catch nếu khơng cĩ chỉđịnh nào khác, khối Finally sẽđược thực hiện bất kể cĩ xảy ra lỗi hay khơng.

Cuối cùng, cấu trúc bẫy và xử lý lỗi chấm dứt với từ khĩa End Try. Cú pháp chung cho một cấu trúc xử lý lỗi như sau

Try

' khối lệnh cĩ thể gây lỗi

Catch <biến1> As <Kiểu Exception> [When <biểu thức>] ' khối lệnh bẫy và xử lý lỗi

Catch <biến2> As <Kiểu Exception> [When <biểu thức>] ' khối lệnh bẫy và xử lý lỗi

Finally

' khối lệnh kết thúc End Try

Ví dụ:

Dim d as Double, i as Integer Try

i = CInt(InputBox(“Xin nhập một số nguyên”)) d = 42 \ i

Catch ex As DivideByZeroException (adsbygoogle = window.adsbygoogle || []).push({});

Messagebox.Show(“Khơng thể chia cho số khơng”) Catch ex As InvalidCastException

Messagebox.Show(“Xin nhập số nguyên !”) End Try

Câu lệnh Catch cĩ thể cĩ nhiều cách sử dụng:

VII.2.1. Bẫy khơng cĩ điều kiện

Dim d as Double, i as Integer Try i = CInt(InputBox(“Xin nhập một số nguyên”)) d = 42 \ i Catch Messagebox.Show(“Khơng thể chia") End Try

VII.2.2. Bẫy với kiểu lỗi chung Exception

Dim d As Double, i As Integer Try i = InputBox("Xin nhập một số nguyên") d = 42 \ i Catch ex As Exception MessageBox.Show("Khơng thể chia") End Try VII.2.3. Bẫy với những kiểu Exception đặc biệt Các kiểu Exception đặc biệt thường gặp Bảng liệt kê các Exception Tên Mơ tả

ArgumentException Tham số truyền khơng hợp lệ

DivideByZeroException Chương trình thực hiện phép chia một số cho số khơng

OverFlowException Kết quả của một phép tốn hoặc của một phép chuyển đổi kiểu lớn hơn khả năng lưu giữ của biến

FieldAccessException Chương trình truy xuất một field Private hoặc Protected của lớp InvalidCastException Chương trình đang cố thực hiện một chuyển đổi khơng hợp lệ

InvalidOperationException Chương trình đang cố gọi một thủ tục khơng hợp lệ

MemberAccessException Truy xuất một thành phần của một lớp bị thất bại

MethodAccessException Chương trình đang cố gọi thủ tục Private hoặc Protected của lớp NullReferenceException Chương trình đang cố truy xuất một đối tượng khơng tồn tại TypeUnloadException Chương trình truy xuất một lớp chưa được tải lên vùng nhớ

VII.2.4. Bẫy với điều kiện When

Dim d As Double, i As Integer Try

i = InputBox("Xin nhập một số nguyên") d = 42 \ i

Catch ex As Exception When i = 0

MessageBox.Show("Khơng thể chia cho số khơng") End Try

Bài 3

LP TRÌNH HƯỚNG ĐỐI TƯỢNG

TRONG VISUAL BASIC .NET

Tĩm tắt

Lý thuyết 6 tiết - Thực hành 10 tiết

Mục tiêu Các mục chính Bài tập

Giới thiệu về Lập trình hướng đối tượng và cách xây dựng lớp đối tượng trong Visual Basic .Net

1. Lập trình hướng đối tượng 2. Lập trình hướng đối tượng trong

VB.NET

2.1, 2.2, 2.3, 2.4, 2.5

I. Lp trình hướng đối tượng (adsbygoogle = window.adsbygoogle || []).push({});

Tư tưởng chính của lập trình hướng đối tượng là xây dựng một chương trình dựa trên sự phối hợp hoạt

động của các đối tượng. Một đối tượng bao gồm hai thành phần chính là thơng tin lưu trữ và các thao tác xử lý. Trong thế giới thực, đối tượng là thực thể tồn tại như con người, xe, máy tính, v.v…Trong ngơn ngữ lập trình, đối tượng cĩ thể là màn hình, điều khiển v.v…

Lập trình hướng đối tượng là kiểu lập trình nhằm vào sự tương tác giữa các đối tượng. Mỗi đối tượng cĩ những thuộc tính (thơng tin lưu trữ), những phương thức xác định các chức năng của đối tượng. Bên cạnh đĩ, đối tượng cũng cĩ khả năng phát sinh các sự kiện khi thay đổi thơng tin, thực hiện một chức năng hay khi đối tượng khác tác động vào. Tất cả những thuộc tính, phương thức và sự kiện tạo nên cấu trúc của đối tượng. Cĩ bốn ý niệm trong Lập trình hướng đối tượng:

– Abstraction: Tính trừu tượng

– Encapsulation: Tính bao bọc

– Inheritance: Tính kế thừa

– Polymorphism: Tính đa hình

Mỗi ý niệm đều cĩ vai trị quan trọng trong lập trình hướng đối tượng.

I.1. Tính tru tượng

Chúng ta thường lẫn lộn giữa lớp (Class) và đối tượng (Object). Cần phân biệt lớp là một ý niệm trừu tượng, cịn đối tượng là một thể hiện của lớp.

Ví dụ:

Class ConNgười là một ý niệm trừu tượng, nhưng NguyễnVănA là một đối tượng cụ thể. Từ những đối tượng giống nhau, chúng ta cĩ thể trừu tượng hĩa thành một lớp đối tượng.

Tính trừu tượng cho phép chúng ta loại bỏ tính chất phức tạp của đối tượng bằng cách chỉđưa ra các thuộc tính và phương thức cần thiết của đối tượng trong lập trình.

I.2. Tính bao bc

Mỗi Class được xây dựng để thực hiện một nhĩm chức năng đặc trưng của riêng Class, trong trường hợp một đối tượng thuộc Class cần thực hiện một chức năng khơng nằm trong khả năng vì chức năng

đĩ thuộc về một đối tượng thuộc Class khác, nĩ sẽ yêu cầu đối tượng đĩ đảm nhận thực hiện cơng việc. Một điểm quan trọng trong cách giao tiếp giữa các đối tượng là một đối tượng sẽ khơng được truy xuất trực tiếp vào thành phần dữ liệu của đối tượng khác cũng như khơng đưa thành phần dữ liệu của mình cho đối tượng khác một cách trực tiếp. Tất cả mọi thao tác truy xuất vào thành phần dữ liệu từ đối tượng này qua đối tượng khác phải được thực hiện bởi các phương thức (method) của chính đối tượng chứa dữ liệu. Đây cũng chính là một tính chất quan trọng trong lập trình hướng đối tượng gọi là tính bao bọc (encapsulation) dữ liệu.

Tính bao bọc cho phép dấu thơng tin của đối tượng bằng cách kết hợp thơng tin vớiø các phương thức liên quan đến thơng tin trong đối tượng.

Ví dụ:

những gì cần thiết cho Tài xế khi tương tác với Xe hơi. Xe hơi cĩ thể cĩ một đối tượng Động cơ nhưng Tài xế khơng cần phải quan tâm. Tất cả những gì cần quan tâm là những chức năng để cĩ thể vận hành xe. Do đĩ, khi thay một Động cơ khác, Tài xế vẫn sử dụng các chức năng cũđể vận hành Xe hơi bao lâu các phương thức phơ diễn bên ngồi (Interface) khơng bị thay đổi.

I.3. Tính kế tha

Tính kế thừa là khả năng cho phép ta xây dựng một lớp mới dựa trên các định nghĩa của một lớp đã cĩ. Lớp đã cĩ gọi là lớp Cha, lớp mới phát sinh gọi là lớp Con và đương nhiên kế thừa tất cả các thành phần của lớp Cha, cĩ thể mở rộng cơng năng các thành phần kế thừa cũng như bổ sung thêm các thành phần mới

Chúng ta phân biệt hai loại quan hệ:

I.3.1. Là-một

Biểu thị tính kế thừa. Trong quan hệ "là-một", một đối tượng của lớp Con được xem như là một đối tượng của lớp Cha.

Ví dụ:

Từ lớp Xe ta tạo nên lớp Xe hơi mở rộng, lớp này mặc nhiên kế thừa tất cả các thành phần của lớp xe. Ta cĩ thể nĩi: một xe hơi là một chiếc xe.

I.3.2. Cĩ-một

Quan hệ này mang ý nghĩa gồm cĩ. Trong quan hệ "cĩ-một", một đối tượng cĩ thể cĩ một hoặc nhiều thành phần tham chiếu đến các đối tượng khác.

Ví dụ:

Khi lập mơ hình loại xe hơi, bạn muốn diễn tả ý tưởng chiếc xe "cĩ-một" tay lái. Chúng ta khơng thể (adsbygoogle = window.adsbygoogle || []).push({});

phát sinh lớp Xe hơi từ một Tay lái hay ngược lại (một Xe hơi "là-một" Tay lái !!!). Thay vì vậy, chúng ta phải cĩ hai lớp độc lập làm việc với nhau trong đĩ, lớp phía ngồi (lớp Xe hơi) sẽ tạo và phơ diễn cơng năng của lớp phía trong (lớp Tay lái).

I.4. Tính đa hình

Tính đa hình là khả năng một ngơn ngữ xử lý các đối tượng hữu quan theo cùng một cách. Tính đa hình thể hiện dưới nhiều hình thức:

I.4.1. Kết nối trễ - Late Binding

Đây là khả năng cho phép người lập trình gọi trước một phương thức của đối tượng, tuy chưa xác định

được đối tượng. Đến khi thực hiện, chương trình mới xác định được đối tượng và gọi phương thức tương ứng của đối tượng đĩ. Kết nối trễ giúp chương trình được uyển chuyển chỉ yêu cầu đối tượng cung cấp đúng phương thức cần thiết là đủ.

Ví dụ:

Xe

Chúng ta cĩ lớp Xe với phương thức Chạy và các lớp Xe đạp, Xe hơi, Xe đẩy cùng phát sinh từ lớp Xe. Chúng ta chưa biết sẽ sử dụng xe gì để di chuyển vì tùy thuộc tình hình cĩ sẵn xe nào nên gọi trước phương thức Chạy. Khi chương trình thực thi, tùy theo đối tượng của lớp nào được đưa ra mà phương thức Chạy của đối tượng đĩ được gọi.

I.4.2. Nạp chồng - Overloading

Khả năng cho phép một lớp cĩ nhiều thuộc tính, phương thức cùng tên nhưng với các tham số khác nhau về loại cũng như về số lượng. Khi được gọi, dựa vào tham số truyền vào, thuộc tính hay phương thức tương ứng sẽđược thực hiện.

I.4.3. Ghi chồng - Overriding

Hình thức này áp dụng cho lớp Con đối với lớp Cha. Lớp Con được phép cĩ một phương thức cùng tên, cùng số tham số cĩ kiểu dữ liệu như phương thức của lớp Cha hoặc những lớp trước đĩ nữa (lớp phát sinh ra lớp Cha …) với cài đặt khác đi. Lúc thực thi, nếu lớp Con khơng cĩ phương thức riêng, phương thức của lớp Cha sẽđược gọi, ngược lại nếu cĩ, phương thức của lớp Con được gọi.

II. Lp trình hướng đối tượng trong VB.NET

II.1. To mt Class

Chúng ta tạo một Class mới trong VB.NET bằng cách dùng thực đơn Project | Add Class. Hộp thoại Add New Item sẽ hiện ra, chọn Class trên khung bên phải và nhập tên vào ơ Name bên dưới

Một phần của tài liệu Tài liệu hướng dẫn giảng dạy chương trình kỹ thuật viên ngành lập trình potx (Trang 52)