Đăng ký Đăng nhập
Trang chủ Xây dựng phần mềm hỗ trợ môn học kỹ thuật lập trình c...

Tài liệu Xây dựng phần mềm hỗ trợ môn học kỹ thuật lập trình c

.PDF
88
614
86

Mô tả:

MỤC LỤC H U TE C H LỜI NÓI ĐẦU CHƯƠNG 1 : TỔNG QUAN ........................................................................ 1 1.1 GIỚI THIỆU ................................................................................ 2 1.2 THỰC TẾ NHỮNG PHẦN MỀN ĐANG SỬ DỤNG .............. 2 1.3 MỤC TIÊU CỦA PHẦN MỀM ................................................. 2 CHƯƠNG 2 : CƠ SỞ LÝ THUYẾT ............................................................ 4 2.1 NGÔN NGỮ LẬP TRÌNH C ...................................................... 5 2.1.1 Lịch sử ngôn ngữ C ............................................................. 5 2.1.2.Tìm hiểu tổng quan về ngôn ngữ C ..................................... 5 2.1.2.1 Các kiểu dữ liệu ................................................... 4 2.1.2.2 Toán tử .................................................................. 5 2.1.2.3 Con trỏ (Pointer) ................................................... 5 2.1.2.4 Hàm (Function) ..................................................... 5 2.2 CÔNG NGHỆ & CÔNG CỤ ĐƯỢC SỬ DỤNG ...................... 6 2.2.1 Bộ visual studio.net ............................................................. 6 2.2.2 Tổng quan về C# ................................................................. 9 2.2.2.1 Các thành phần mở rộng C# ................................. 9 2.2.2.2 Các kiểu dữ liệu trong C# ..................................... 10 2.2.2.3 Biểu thức toán tử ................................................... 11 2.2.2.4 Phát biểu điều kiện và vòng lặp ............................ 12 2.2.2.5 Lớp và thừa kế ...................................................... 13 2.2.2.6 Đa hình .................................................................. 17 2.2.2.7 Giao diện ............................................................... 19 2.2.3 SƠ LƯỢC VỀ UML .......................................................... 21 2.2.3.1 Giới thiệu .............................................................. 21 2.2.3.2 Nguồn gốc của UML ............................................ 22 2.2.3.3 Biểu đồ usecase ..................................................... 22 2.2.3.4 Biểu đồ lớp ............................................................ 23 2.2.3.5 Biểu đồ cộng tác.................................................... 27 2.2.3.6 Biểu đồ họat động ................................................. 28 2.2.4 Mô hình 3 lớp (Data Access Layer) ................................... 30 2.2.5 Microsoft Visual C++ Toolkit 2003 .................................. 31 2.2.6 Các công cụ được sử dụng ................................................. 32 CHƯƠNG 3 : PHÂN TÍCH VÀ THIẾT KẾ .............................................. 35 3.2 NHỮNG CHỨC NĂNG CHÍNH ................................................ 35 3.3 PHÂN TÍCH UML ....................................................................... 36 3.3.1. Mô hình usecase ................................................................. 36 3.3.2. Mô hình họat động ............................................................. 39 3.3.2.1 Chọn cách học ....................................................... 39 3.3.2.2 Chọn làm bài tập ................................................... 40 3.3.2.3 Chọn làm bài tập ................................................... 41 3.3.2.4 Đăng ký thành viên ............................................... 42 3.3.2.5 Đăng nhập ............................................................. 43 3.3.2.6 Tạo thành viên ....................................................... 44 CHƯƠNG 4 : THỰC HIỆN VÀ KẾT QUẢ ............................................... 46 4.1 LỚP TRỪU TƯỢNG (ABSTRACT)............................................. 46 4.1.1 Business Layer .................................................................... 46 4.1.2 Data Layer ........................................................................... 49 4.2 Mô hình lớp .................................................................................... 49 4.2.1 Business Layer .................................................................... 50 4.2.2 Data Layer ........................................................................... 57 H U TE C H 4.3 Mô hình cộng tác ............................................................................ 61 4.3.1 Lấy danh sách bài hoc ......................................................... 61 4.3.2 Lấy danh sách chương......................................................... 62 4.3.3 Lấy bài tập ........................................................................... 63 4.3.4 Lấy bài hoc .......................................................................... 63 4.3.5 Lấy một chương .................................................................. 64 4.3.6 Thêm người dùng ............................................................... 65 4.3.7 Kiểm tra người dùng ........................................................... 66 4.3.8 Thêm thư viện ..................................................................... 67 4.3.9 Cập nhật thư viện ................................................................ 68 4.3.10 Lấy dữ liệu ........................................................................ 68 4.4 DESIGN PATTERN..................................................................... 69 4.4.1 Singleton pattern ................................................................. 69 4.4.2 Adapter pattern .................................................................... 69 4.4.3 Factory Method pattern ....................................................... 71 4.4.4 Proxy pattern ....................................................................... 72 4.5 THIẾT KẾ CƠ SỞ DỮ LIỆU, GIAO DIỆN PHẦN MỀM ..... 73 4.5.1 Thiết kế cơ sở dữ liệu .......................................................... 73 4.5.1.1 Mô hình thực thể ERD .......................................... 73 4.5.1.2 Mô hình quan hệ trong SQL Server ...................... 79 4.5.2 Giao diện phần mền ............................................................ 79 4.5.2.1 Giao diện chính ..................................................... 80 4.5.2.2 Khi chạy debug ..................................................... 81 4.5.2.3 Bài tập ................................................................... 82 CHƯƠNG 5 : KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ........................... 84 5.1 NHỮNG ĐIỀU ĐÃ LÀM ĐƯỢC ....................................... 84 5.2 NHỮNG ĐIỂU CHƯA LÀM ĐƯỢC ................................. 85 5.3 HƯỚNG PHÁT TRIỂN....................................................... 85 TÀI LIỆU THAM KHẢO............................................................................. 86 Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 1 CHƯƠNG 1 TỔNG QUAN 1.1 GIỚI THIỆU H Xây dựng phần mềm hỗ trợ học môn kỹ thuật lập trình C, nhằm giúp đỡ một phần nhỏ cho các bạn mới làm quen với lập trình có thể tiếp cận ngôn ngữ C một cách C dể dàng, hứng thú. Chương trình bao gồm việc hiển thị nôi dụng bài học, làm bài tập, tạo thư viện riêng và debug những ví dụ mẫu, biên dịch và chạy bài tập do người viết. TE 1.2. THỰC TẾ NHỮNG PHẦN MỂM ĐANG SỬ DỤNG Việc sử dụng tin học tạo ra những phần mềm hổ trợ học tập đã được phát triển rất nhiều nhất là từ khi máy vi tính đã trở nên một thiết bị cần thiết trong mỗi gia đình. U Từ những phần mềm cho thiếu nhi đến những phần mềm dạy học cao cấp. Những H phần mềm về học tập cũng rất phong phú học anh văn, toán, lý, hóa, … Hiện nay nhu cầu học lập trình rất lớn. Có rất nhiều bạn muốn tìm hiểu nhưng không biết bắt đầu từ đâu và sử dụng ngôn ngữ nào cho thích hợp. Trên thị trường hiện nay cũng có rất nhiều phần mềm hỗ trợ học ngôn ngữ lập trình. Nhưng hầu hết là những ngôn ngữ bậc cao (ví dụ Visual Basic, Visual Studio .NET, …) trong khi đó ại l rất ít phần mềm hỗ trợ học các ngôn ngữ lập trình C/C++ hay Pascal. Hầu hết các phần mềm dạng dạy những ngôn ngữ lập trình C/C++ đều không được đầu tư nhiều. SV thực hiện: Nguyễn Hoàng Vũ Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 2 1.3 MỤC TIÊU CỦA PHẦN MỀM 1.3.1 Giúp đỡ người bắt đầu học lập trình Một khóa học sẽ bao gồm nhiều chương. Mỗi chương sẽ có bài lý thuyết và những bài tập nhỏ nhằm giúp người dùng quen với lập trình. Kết thúc mỗi chương sẽ có bài kiểm tra kiến thức dưới dạng trắc nghiệm. Ngoài ra người dùng cũng có thể chọn: Làm một bài kiểm tra tổng hợp về một phần nào đó. H Chọn một bài học hoặc một chương nào đó trong chương trình. C 1.3.4 Thiết kế sao cho dể dàng thay đổi/nâng cấp/bảo trì Thiết kế và cài đặt bắt buộc phải theo mô hình lớp. TE Hướng phát triển: Đưa lên website U Cho phép người dùng tự soạn thảo một chương trình học (VD: Học toán, …). H 1.3.5 Giải pháp xây dựng phần mềm Sử dụng môi trường Visual Studio .NET 2003, ngôn ngữ lập trình C# một trong những ngôn ngữ lập trình cấp cao mạnh hiện nay. Tận dụng khả năng lập trình hướng đối tượng và công cụ ADO của Microsoft. Phần mềm sử dụng hệ quản trị cơ sở dữ liệu SQL Server 2000. Sử dụng ngôn ngữ UML thiết kế chương trình. Phần mềm được thiết kế theo mô hình 3 lớp. Ứng dụng Design Pattern vào thiết kế mô hình lớp. SV thực hiện: Nguyễn Hoàng Vũ Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 3 Để hỗ trợ việc chạy phần bài tập của người dùng, chương trình có sử dụng thêm công cụ Microsoft Visual C++ Toolkit 2003 của Microsoft. Sử dụng những control mã nguồn mở trên mạng internet. Trong thiết kế giao diện phần mềm hạn chế sử dụng form, chuyển sang tạo và sử dụng user control. Xây dựng CSDL (Dùng hệ quản trị CSDL). Xây dựng mô hình lớp. H Hiển thị dữ liệu (Toàn bộ sử dụng class-object) Xây dựng module cho phép làm kiểm tra. H U TE C Thân thiện và dể sử dụng đối với người dùng. SV thực hiện: Nguyễn Hoàng Vũ Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 4 CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 2.1 NGÔN NGỮ LẬP TRÌNH C 2.1.1 Lịch sử ngôn ngử C Ngôn ngữ C được phát triển từ hai ngôn ngữ trước đó là BCPL và B. BCPL H được phát triển bởi Martin Richards năm 1967 và là ngôn ngữ dành để viết các phần C mềm hệ điều hành và các trình biên dịch. Ken Thomspon phát triển ngôn ngữ B, có nhiều điểm bắt chước BCPL. Và B được dùng để viết phiên bản đầu tiên của hệ điều TE hành UNIX tại Bell Laboratories năm 1970. Ngôn ngữ C được Dennis Ritchie ở Bell Laboratories được phát triển từ B vào năm 1972. C được phổ b iến ban đầu do việc là ngôn ngữ phát triển cho hệ điều hành U UNIX. Ngày nay hầu như tất cả hệ điều hành chủ chốt đều được viết bằng C hay C++. H 2.1.2 Tìm hiểu tổng quan về ngôn ngữ C 2.1.2.1 Các kiểu dữ liệu Chương trình C, cũng giống như những ngôn ngữ kh ác, chúng ta cung cấp dữ liệu (số, chữ, …) và mô tả cách thực hiện công việc. Và chúng ta trong đợi kết quả từ những dữ liệu trên. Do đó, điều cần thiết trong chương trình C là phải phân loại tất cả các dữ liệu bằng cách chia chúng theo kiểu dữ liệu (data type). C có 4 kiểu dữ liệu căn bản là : ký tự (character), dấu chấm động (floating point number), tinh xác đôi (double precision). Trong C dùng 7 ừt khóa để phân biệt kiểu dữ liệu khác nhau : int, long, short, unsigned, char, float và double. SV thực hiện: Nguyễn Hoàng Vũ Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 5 2.1.2.2. Toán tử Ngoài những toán tử số học thường, C còn hỗ trợ thêm những tóan tử mới như : Toán tử tăng/giảm : ++/-Toán tử phức hợp : +=, -=, *=, /=, %= 2.1.2.3. Con trỏ (Pointer) Con trỏ là một đặc trưng rất mạnh, tinh vi của ngôn ngữ C. Nhưng việc sử dụng con trỏ khá phức tạp. một biến nào đó. Khai báo TE Kieu_du_lieu * ten_con_tro; C H Con trỏ củng là một biến, nhưng nó không chứa giá trị mà nó chứa địa chỉ của Ví dụ: int *p; U Các thao tác chính trên con trỏ: &, *; H & lấy địa chỉ của con trỏ * lấy nội dung của vùng nhớ mà con trỏ đang trỏ tới. 2.1.2.4 Hàm (Function) Một chương trình C gồm một hoặc nhiều đơn thể chương trình được gọi dưới tên là hàm (function). Trong C, hàm cho phép chia những chương trình lớn thành những chương trình nhỏ và một lợi thế là một hàm được áp dụng thành công ở chương trình này thì củng SV thực hiện: Nguyễn Hoàng Vũ Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 6 có thể sử dụng tốt với cùng mục đích ở chương trình khác. Chương trình viết theo C thường là một phối hợp sử dụng hai lọai hàm: Hàm do người sử dụng viết. Hàm trong thư viện chuẩn của C (ví dụ như printf (), scanf ()). 2.2 CÔNG NGHỆ & CÔNG CỤ ĐƯỢC SỬ DỤNG 2.2.1 Bộ VISUAL STUDIO.NET .NET là gì? H .NET không chỉ là một cái tên gọi mà nó còn đại diện cho tòan bộ các công nghệ và các khái niệm cấu thành một nền tảng để người lập trình xây dựng các dứng C dụng trên nó. Visual Basic .NET có một số phiên bản thực sự là 7.0 nhưng số này ít TE được sử dụng. Có thể hiểu .NET là một lớp tồn tại bên dưới các ứng dụng và cung cấp một tập các chức năng và các dịch vụ cơ bản. Lớp này chứa một tập các ứng dụng và các hệ điều hành gọi là các .NET server; một tập các đối tượng cơ sở gọi là .NET Framework, U và một tập các dịch vụ hỗ trợ cho tất cả các ngôn ngữ .NET là Common Language H Runtime (CLR). Các phần này được tách biệt như trong hình: SV thực hiện: Nguyễn Hoàng Vũ Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 7 User Application ⋅NET Framework .NET Servers Windows, BizTalk, Exchange, SQL, App Center … H .NET Devices TE .NET server C Hardware Componets Mục đích lớn của .NET là thuận tiện trong việc xây dựng các hệ thống phân tán, hệ thống phân tán có nghĩa là công việc được thực hiện ở nhiều vị trí khác nhau. U Phần lớn các hệ thống kiểu này thực hiện công việc của chúng ở phần hậu (back end), ở cấp độ server Microsoft cung cấp một tập các sản phẩm phần mềm mà chúng được H biết như là .NET Enterprise Servers. Chúng được thiết kế để hỗ trợ các tính năng xử lý phần hậu cần thiết của một hệ thống phân tán.Các sản phẩm này bao gồm: Hệ điều hành server, Microsoft Windows (Server, Advanced Server, và Datacenter Server) Các phầm mềm như là Microsoft App Center và Microsoft Cluster Server Một hệ thống lưu trữ thư điện tử, thông tin tự do, …, Microsoft Exchange Server SV thực hiện: Nguyễn Hoàng Vũ Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 8 Một động cơ chuyển đổi dạng dữ liệu (data-transformation engine) dựa trên XML gọi là Microsoft BizTalk Server … .NET Framework Khi chuyển qua Visual Basic .NET, nhiều thứ đã được thay đổi một cách triệt để; một trong chúng là sự phát triển của một nền tảng mới cho tất cả các công cụ phát triển của .NET. Nền tảng cơ sở này, gọi là .NET Framework, cung cấp hai thứ chính: môi trường thực thi cơ sở (base runtime environment) và một tập các lớp nền tảng H (foundation class). Base Environmet cung ấcp một lớp nằm giữa các chương trình và phần còn lại của hệ thống, thực hiện các dịch vụ cho các ứng dụng của người lập trình C và đơn giản hóa việc xử lý đến chức năng của các lớp thấp hơn. Các lớp nền tảng cung TE cấp một tập lớn các chức năng xây dựng sẵn, như xử lý tập tin, thao tác với XML, … .NET Framework cũng cung cấp một tập các hàm API của riêng nó để giúp cho người lập trình tận dụng được hết các khả năng của nó. U .NET Service .NET có các khái niệm mà vượt xa hơn các chi tiết của lập trình để mô tả cách H các hệ thống được xây dựng và cách chúng có thể tương tác. Một trong các khái niệm trên là ý tưởng Web Services, chức năng được phân theo một quy luật nhất quán thông qua Internet. Các dịch vụ này cho phép một công ty hay tổ chức cung cấp chức năng mà chức năng này được thực hiện hoàn toàn bên trong môi trường của họ. Một ví dụ của các dịch vụ này là dịch vụ thanh tóan hóa đơn, một công ty có các sever và các ứng dụng trong chính công ty của họ mà có thể thực hiện và quản lý được việc thanh toán hóa đơn. Công ty này cung ấp c dịch vụ đó cho các công ty khác thông qua dịch vụ Web. Dịch vụ này khác với việc cung cấp một trang Web thông thường; đây là một giao tiếp mà các ứng dụng hay các trang Web khác có thể sử dụng chức năng được cung cấp. SV thực hiện: Nguyễn Hoàng Vũ Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 9 .NET Device Ngày nay có ấrt nhiều hệ thống có thể truy xuất Internet, như là máy tính cá nhân, các ầu đ cuối TV -Based Internet, thin-client, hay PDA (Personal Digital Assistants), … Tất cả các thiết bị này có thể là công cụ được phân vào lớp .NET Devices - một sự kết hợp phần cứng và các tính năng phần mềm được thiết kế để làm việc với các dịch vụ và các ứng dụng xây dựng trên .NET. Các thiết bị .NET bao gồm các máy tính chạy trên Windows và các thiết bị chạy Windows CE (Framework tương thích cho loại thiết bị này có sẵn, cho phép hỗ trợ các tính năng .NET). H 2.2.2.Tổng quan về C# Ngôn ngữ C# được thiết kế bởi Anders Hfsberg của Microsoft. C# là một ngôn C ngữ lập trình hướng đối tượng hiện đại có thể tương tác với các phần tử của các ngôn ngữ khác như C, C++, Pascal, Java, và ngay cả Basic. C# là một sản phẩm của bộ sản TE phẩm Visual Studio.NET. Ngoài ra, bộ Visual Studio.NET còn có các sản phẩm khác như Visual Basic.NET… Về phương diện lập trình, ngôn ngữ C# có phong cách lập trình giống những U ngôn ngữ lập trình hướng đối tượng khác như Visual C++, Java. H Sau đây là những cải tiến hoặc mở rộng của ngôn ngữ lập trình C# so với C/C++. 2.2.2.1. Các thành phần mở rộng C# Tập tin viết bằng ngôn ngữ C# cũng như các tập tin khác nhưng chúng có tên mở rộng là .cs, và tên mở rộng của project là .csproj. Ngoài ra, để biên dịch và sử dụng được chương trình viết bằng ngôn ngữ C# cần phải có môi trường gọi là FrameWork Software Development Kit (SDK),ũng c như chương trình viết bằng ngôn ngữ Java cũng cần phải có môi trường là Java Development Kit (JDK). SV thực hiện: Nguyễn Hoàng Vũ Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 10 Từ khóa using dùng tham chiếu đến những thư viện có sẵn trong .NET Framework (tương tự như trong C là include, hoặc trong Java là import). System là tên của một không gian tên (Namespace), có đến 90 không gian tên sử dụng bắt đầu bằng tên System trong .NET Framework, các không gian tên quan trọng như System.Drawing, System.Windows.Forms,…. 2.2.2.2.Các kiểu dữ liệu C# Kiểu Mô tả Lớp cơ sở của tất cả các đối tượng trong C# string Dãy các ký tự ở dạng Unicode sbyte Nguyên có dấu 8-bit short Nguyên có dấu 16-bit Int Nguyên có dấu 32-bit TE C H object nguyên có dấu 62-bit Long Nguyên không dấu 16-bit H Ushort Nguyên không dấu 8-bit U Byte Uint Nguyên không dấu 32-bit Ulong Nguyên không dấu 64-bit Float Số chấm động có độ chính xác đơn Double Số chấm động có độ chính xác đôi Bool Kiểu logic – true hay false Char Ký tự Unicode decimal Số thập phân có 28 chữ số nguyên SV thực hiện: Nguyễn Hoàng Vũ Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 11 2.2.2.3. Biểu thức toán tử Loại toán tử Toán tử Primary (), [], f(), x++, y++, new, typeof, sizeof, checked, unchecked +, -, !, ~, ++x, --x Multipliacte *, % Additive =, - Shift (dịch chuyển bit) <<, >> <>, <=, >= C Relational Logical OR & | ^ Lcondition AND && H U Logical XOR = =, != TE Equallity Logical AND H Unary(toán tử một ngôi) Condition OR || Condition ?: Assigment (phép gán) =, +=, -=, *=, ?=, %=, <<=, >>=, |=, &=, ^= Trong ngôn ngữ C, toán tử && và || là hai toán tử luận lý, nhưng trong ngôn ngữ C# thì hai toán tử này chỉ được định nghĩa cho kiểu dữ liệu luận lý và cả trong phép toán so sánh điều kiện. C# cũng sử dụng hai toán tử && và || giống như trong trường hợp của ngôn ngữ C, và những toán tử này được gọi là toán tử điều kiện, biểu thức thứ hai chỉ xét khi cần thiết. SV thực hiện: Nguyễn Hoàng Vũ Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 12 2.2.2.4 . Phát biểu điều kiện và vòng lặp Câu lệnh lặp foreach Vòng lặp foreach cho phép tạo vòng lặp thông qua một tập hợp hay một mảng. Đây là một câu lệnh lặp mới không có trong ngôn ngữ C/C++. Câu lệnh foreach có cú pháp chung như sau: foreach ( in < tên tập hợp>) H Do lặp dựa trên một mảng hay tập hợp nên toàn bộ vòng lặp sẽ duyệt qua tất cả các thành phần của tập hợp theo thứ tự được sắp. Khi duyệt đến phần tử cuối cùng trong C tập hợp thì chương trình sẽ thoát ra khỏi vòng lặp foreach. TE Namespace Như chúng ta đã biết .NET cung cấp một thư viện các lớp đồ sộ và thư viện này có tên là FCL (Framework Class Library). Trong đó Console ch ỉ là một lớp nhỏ trong hàng ngàn ớ l p trong thư viện. Mỗi lớp có một tên riêng, vì vậy FCL có hàng U ngàn tên như ArrayList, Dictionary, FileSelector,… H Điều này làm nảy sinh vấn đề, người lập trình không thể nào nhớ hết được tên của các lớp trong .NET Framework. Tệ hơn nữa là sau này có thể ta tạo lại một lớp trùng với lớp đã có chẳng hạn. Ví dụ trong quá trình phát triển một ứng dụng ta cần xây dựng một lớp từ điển và lấy tên là Dictionary, và điều này dẫn đến sự tranh chấp khi biên dịch vì C# chỉ cho phép một tên duy nhất. Chắc chắn rằng khi đó chúng ta phải đổi tên của lớp từ điển mà ta vừa tạo thành một cái tên khác chẳng hạn như myDictionary. Khi đó sẽ làm cho việc phát triển các ứng dụng trở nên phức tạp, cồng kềnh. Đến một sự phát triển nhất định nào đó thì chính là cơn ác mộng cho nhà phát triển. SV thực hiện: Nguyễn Hoàng Vũ Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 13 Giải pháp để giải quyết vấn đề này là việc tạo ra một namespace, namsespace sẽ hạn chế phạm vi của một tên, làm cho tên này chỉ có ý nghĩa trong vùng đã định nghĩa. Tương tự như vậy ta cứ tạo các namespace để phân thành các vùng cho các lớp trùng tên không tranh chấp với nhau. 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 H không dẫn đến sự tranh chấp với nhau. Mảng C Ngôn ngữ C# cung cấp cú pháp chuẩn cho việc khai báo những đối tượng TE Array. Tuy nhiên, cái thật sự được tạo ra là đối tượng của kiểu System.Array. Mảng trong ngôn ngữ C# kết hợp cú pháp khai báo mảng the o kiểu ngôn ngữ C và kết hợp với định nghĩa lớp do đó thể hiện của mảng có thể truy cập những phương thức và System.Array U thuộc tính của System.Array. Một số các thuộc tính và phương thức của lớp H 2.2.2.5 Lớp và thừa kế Thừa kế là khái niệm then chốt của thiết kế trong các ngôn ngữ hướng đối tượng , thừa kế cho phép những chức năng và thuộc tính dùng chung ở lớp cơ sở và những lớp chỉ định có thể kế thừa những chức năng của lớp cơ sở. C# chỉ hỗ trợ thừa kế đơn. C++ cho phép đa thừa kế và nếu được sử dụng đúng cách đây thật sự là điểm rất mạnh. Tuy nhiên, phải thừa nhận là đa thừa kế rất khó quản lý và khó áp dụng. Đây là một trong những lý do C# chỉ phát triển đa thừa kế. SV thực hiện: Nguyễn Hoàng Vũ Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 14 Thu Cho Meo Lớp cơ sở Dog sẽ chứa thuộc tính và phương thức chung cho tất cả các giống chó. Mỗi lớp dẫn xuất có thể cài đặt cá biệt hóa thêm nếu thấy cần thiết. Điều rất quan { TE public void Keu(); C public class Thu H trọng nên chú ý rằng C# chỉ kế thừa dạng public. } H { U public class Meo: Thu } public class Cho : Thu { } 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. SV thực hiện: Nguyễn Hoàng Vũ Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 15 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 đó. Điều khiển truy xuất Khả năng hiện hữu của một lớp và các thành viên của nó có thể được hạn chế thông qua việc sử dụng các bổ sung truy cập: public, private, protected, internal, và protected internal. H Từ khoá public cho phép một thành viên có thể được truy cập bởi một phương thức thành viên của những lớp khác. Trong khi đó private chỉ cho phép các phương C thức thành viên trong lớp đó truy xuất. Từ khóa protected thì mở rộng thêm khả năng của private cho phép truy xuất từ các lớp dẫn xuất của lớp đó. Internal mở rộng khả TE năng cho phép ấtb cứ phương thức c ủa lớp nào trong cùng một khối kết hợp (assembly) có thể truy xuất được. Một khối kết hợp được hiểu như là một khối chia xẻ và dùng lại trong CLR. Thông thường, khối này là tập hợp các tập tin vật lý được U lưu trữ trong một thư mục bao gồm các tập tin tài nguyên, chương trình thực thi theo H ngôn ngữ IL,... Từ khóa internal protected đi cùng với nhau cho phép các thành viên của cùng một khối assembly hoặc các lớp dẫn xuất của nó có thể truy cập. Chúng ta có thể xem sự thiết kế này giống như là internal hay protected. Các lớp cũng như những thành viên của lớp có thể được thiết kế với bất cứ mức độ truy xuất nào. Một lớp thường có mức độ truy xuất mở rộng hơn cách thành viên của lớp, còn các thành viên thì mức độ truy xuất thường có nhiều hạn chế. Do đó, ta có thể định nghĩa một lớp MyClass như sau: SV thực hiện: Nguyễn Hoàng Vũ Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 16 public class MyClass { protected int myValue; } Như trên biến thành viên myValue được khai báo truy xuất protected mặc dù bản thân lớp được khai báo là public. Một lớp public là một lớp sẵn sàng cho bất cứ lớp nào khác muốn tương tác với nó. Đôi khi một lớp được tạo ra chỉ để trợ giúp cho khóa internal hơn là khóa public. C Truyền tham số H những lớp khác trong một khối assemply, khi đó những lớp này nên được khai báo Như đã thảo luận trong chương trước, tha m số có kiểu dữ liệu là giá trị thì sẽ TE được truyền giá trị vào cho phương thức. Điều này có nghĩa rằng khi một đối tượng có kiểu là giá trị được truyền vào cho một phương thức, thì có một bản sao chép đối tượng đó được tạo ra bên trong phương thức. Một khi phương thức được thực hiện U xong thì đối tượng sao chép này sẽ được hủy. Tuy nhiên, đây chỉ là trường hợp bình thường, ngôn ngữ C# còn cung cấp khả năng cho phép ta truyền các đối tượng có kiểu H giá trị dưới hình thức là tham chiếu. Ngôn ngữ C# đưa ra một bổ sung tham số là ref cho phép truyền các đối tượng giá trị vào trong phương thức theo kiểu tham chiếu. Và tham số bổ sung out trong trường hợp muốn truyền dưới dạng tham chiếu mà không cần phải khởi tạo giá trị ban đầu cho tham số truyền. Ngoài ra ngôn ngữ C# còn hỗ trợ bổ sung params cho phép phương thức chấp nhận nhiều số lượng các tham số. Truyền tham chiếu Những phương thức chỉ có thể trả về duy nhất một giá trị, mặc dù giá trị này có thể là một tập hợp các giá trị. Nếu chúng ta muốn phương thức trả về nhiều hơn một giá trị thì cách thực hiện là tạo các tham số dưới hình thức tham chiếu. Khi đó SV thực hiện: Nguyễn Hoàng Vũ Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 17 trong phương thức ta sẽ xử lý và gán các giá trị mới cho các tham số tham chiếu này, kết quả là sau khi phương thức thực hiện xong ta dùng các tham số truyền vào như là các kết quả trả về. 2.2.2.6. Đa hình Trong thuật ngữ lập trình hướng đối tượng, khả năng ghi đè phương thức của lớp cơ sở và cung cấp một phát triển khác ở trong lớp dẫn xuất là một hình thức cơ bản của khái niệm đa hình. Xem ví dụ trước, trong đó Cho và Meo được dẫn xuất từ lớp cơ sở chung Thu. H Lớp cơ sở Thu cung cấp phương thức Keu được các lớp dẫn xuất thừa kế. Tuy nhiên, nếu bạn đã từng nghe thì giống Cho sủa sẽ khác với giống Meo, C chúng sủa không giống nhau. Vì vậy, lớp cơ sở Thu phải cho phép các lớp dẫn xuất TE cung cấp phát triển phương thức Keu của riêng chúng. C# cung cấp từ khóa virtual để chỉ rõ là phương thức có thể bị các lớp dẫn xuất ghi đè. Một lớp dẫn xuất có thể ghi đè phương thức virtual bằng cách sử dụng từ khóa U override. H class Thu { public virtual void Keu(); } class Meo : Thu { public override void Keu(); } SV thực hiện: Nguyễn Hoàng Vũ Luận văn tốt nghiệp GVHD:ThS. Trương Thị Minh Châu 18 Từ khóa override Trong ngôn ngữ C#, người lập trình có thể quyết định phủ quyết một phương thức ảo bằng cách khai báo tường minh từ khóa override. Điều này giúp cho ta đưa ra một phiên bản mới của chương trình và sự thay đổi của lớp cơ sở sẽ không làm ảnh hưởng đến chương trình viết trong các lớp dẫn xuất. Việc yêu cầu sử dụng từ khóa override sẽ giúp ta ngăn ngừa vấn đề này. Lớp trừu tượng Để yêu cầu các lớp con (lớp dẫn xuất) phải thực thi một phương thức của lớp H cơ sở, chúng ta phải thiết kế một phương thức một cách trừu tượng. Những lớp trừu tượng được thiết lập như là cơ sở cho những lớp dẫn xuất, C nhưng việc tạo các thể hiện hay các đối tượng cho các lớp trừu tượng được xem là TE không hợp lệ. Một khi chúng ta khai báo một phương thức là trừu tượng, thì chúng ta phải ngăn cấm bất cứ việc tạo thể hiện cho lớp này. Phương thức trừu tượng được thiết lập bằng cách thêm từ khóa abstract vào U đầu của phần định nghĩa phương thức, cú pháp thực hiện như sau: abstract public void DrawWindow( ); H Đối với lớp trừ tượng, cú pháp abstract public class Window { } Lớp cô lập (sealed class) Ngược với các lớp trừu tượng là các lớp cô lập. Một lớp trừu tượng được thiết kế cho các lớp dẫn xuất và cung cấp các khuôn mẫu cho các lớp con theo sau. Trong khi một lớp cô lập thì không cho phép các lớp dẫn xuất từ nó. Để khai báo một lớp cô SV thực hiện: Nguyễn Hoàng Vũ
- Xem thêm -

Tài liệu liên quan