Nghiên cứu về một số mô hình phát triển phần mềm của các công ty lớn ở việt nam và một số bài toán ứng dụng
Trang 1ĐẠI HỌC THÁI NGUYÊNTRƯỜNG ĐẠI HỌC KHOA HỌC
Trang 2TRƯỜNG ĐẠI HỌC KHOA HỌC
KHOA TOÁN TIN
TÊN ĐỀ TÀI
ĐỀ TÀI SINH VIÊN NGHIÊN CỨU KHOA HỌC
Người hướng dẫn khoa học:
Trang 3CHƯƠNG 1: CƠ SỞ LÝ THUYẾT CÁC MÔ HÌNH LẬP TRÌNH
I Ngôn ngữ lập trình
1 Giới thiệu ngôn ngữ c#.
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 đề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 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
Ngôn ngữ C# khá đơn giản, chỉ khoảng 80 từ khóa và hơn mười mấykiể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 hơn nữa nó được xây dựng trên nền tảng của 2 ngôn ngữ mạnh nhất là C++ và Java
Phần cốt lõi 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 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ừ
Trang 4khó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, đa hình-
ba thuộc tính cơ bản nhất của bất cứ ngôn ngữ lập trình hướng đối tượng nào
Trong ngôn ngữ C# mọi thứ liên quan đến khai báo lớp đề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 tài liệu 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 cha
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ó cũng 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 con trỏ 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
Trang 5thiế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 tinkhác để sử dụng nó
2 Ưu điểm, nhược điểm của ngôn ngữ C#.
2.1 Ưu điểm
Ngôn ngữ C# được dẫn xuất từ ngôn ngữ C++ và C nhưng nó được xây dựng từ nền tảng phát triển hơn Microsoft bắt đầu với công việc trong
C và C++ và thêm vào đó những đặc tính mới để làm cho ngôn ngữ này dễ
sử dụng hơn Nhiều trong số đặc tính này khá giống với những đặc tính có trong ngôn ngữ Java Không dừng lại ở đó Microsoft còn đưa ra một số mục đích cũng như ưu điểm để xây dựng ngôn ngữ này như sau:
C# là ngôn ngữ đơn giản
C# loại bỏ một vài sự phức tạp của những ngôn ngữ như Java, C++ bao gồm việc loại bỏ những macro, template, đa kế thừa và lớp cơ sở ảo Chúng là những nguyên nhân gây ra sự nhầm lẫn hay dẫn đến những vấn
đề cho những người phát triển C++
C# được xây dựng dựa trên nền tảng C và C++ C# khá giống C, C++ hay thậm chí là Java về diện mạo, cú pháp, biểu thức, toán tử
Một số chức năng khác của C# được lấy trực tiếp từ ngôn ngữ C và C++ nhưng nó đã được cải tiến để làm cho ngôn ngữ đơn giản hơn Một trong những sự cải tiến đó là loại bỏ các dư thừa hay thêm vào những cú pháp thay đổi
Trang 6VD: Trong C++ có 3 toán tử làm việc với các thành viên là ::, , và
→ Để biết khi nào dùng ba toán tử này cũng phức tạp và dễ nhầm lẫn Trong C#, chúng được thay thế với một toán tử duy nhất gọi là (dot)
C# là ngôn ngữ hiện đại
C# có được những đặc tính của ngôn ngữ hiện đại như:
C# là ngôn ngữ hướng đối tượng
C# hỗ trợ tất cả những đặc tính của ngôn ngữ hướng đối tượng là:
- Sự đóng gói(encapsulation)
- Sự kế thừa(inheritance)
- Đa hình(polymorphism)
C# là ngôn ngữ hướng module
Mã nguồn của C# được viết trong Class(lớp) Những Class này chứacác Method(phương thức) thành viên của nó
Class(lớp) và các Method(phương thức) thành viên của nó có thể sử dụng lại trong những ứng dụng hay 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# là ngôn ngữ ít từ khóa
Trang 7C# 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 này được sử dụng để mô tả thông tin Nhưng không vì thế mà ngôn ngữ C# trở nên kém mạnh mẽ Chúng ta có thể 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 C# được sử dụng cho nhiều dự án khác nhau như: Ứng dụng xử lý văn bản, ứng dụng đồ họa hay tạo ra những trình biên dịch cho các ngôn ngữ khác
C# là một ngôn ngữ phổ biến
C chạy trên nền Net, nền này cung cấp rất nhiều đối tượng mạnh, phong phú và đa dạng để giải quyết nhiều vấn đề phổ biến trong lập trình
Do đó sử dụng ngôn ngư lập trình C# tốn ít thời gian, chi phí, ứng dụng kết
quả chạy đáng tin cậy, một phần do tính chất hướng đối tượng của C#,
phần khác do ứng dụng dung chủ yếu các đối tượng đã được viết sẵn bởi Microsoft
2.2 Nhược điểm
KẾT LUẬN: Ta lựa chọn ngôn ngữ C# bởi vì những ưu điểm của nó
II Cơ sở dữ liệu
1) Giới thiệu cơ sở dữ liệu SQL server
SQL là viết của Structured Query Language( Ngôn ngữ truy vấn cấu
trúc)
SQL là một chuẩn của ANSI (American National Standards Institute
– Viện tiêu chuẩn quốc gia Hoa Kì) về truy xuất các hệ thống CSDL
Các câu lệnh SQL được sử dụng để truy xuất và cập nhập dữ liệutrong cơ sở dữ liệu
Trang 8 SQL là ngôn ngữ thao tác dữ liệu(DML- Data Manipulation
Language): SQL có thể thực thi các truy vấn trên cơ sở dữ liệu, lấy dữ liệu,chèn dữ liệu, xóa dữ liệu, sửa đổi dữ liệu hiện có trong cơ sở dữ liệu
SQL là ngôn ngữ định nghĩa dữ liệu(DDL- Data Definition
Language)
Phần DDl của SQL cho phép tạo ra hoặc xóa các bảng Chúng ta cũng có thể định nghĩa các khóa (key), chỉ mục(index), chỉ định các liên kết giữa các bảng và thiết lập các quan hệ ràng buộc giữa các bảng trong cơ sở dữ liệu
2) Ưu điểm, nhược điểm của ngôn ngữ SQL
2.1) Ưu điểm
Khả năng bảo mật lớn
Chứa được một lượng lớn dữ liệu , thích hợp cho nhiều người sử dụng cùng lúc
Truy xuất dữ liệu nhanh
Đảm bảo tính toàn vẹn dữ liệu
2.2) Nhược điểm
Yêu cầu tài nguyên lớn nếu không sẽ chạy rất chậm
Chỉ chạy trên hệ điều hành Window
Dữ liệu nếu bị hổng sẽ rất dễ bị khai thác
3) So sánh ngôn ngữ SQL Server với các ngôn ngữ lập trình khác
3.1) MySQL và SQL Server
SQL Server và MySQL đều có những đặc thù riêng của chúng Vì vậy chúng ta sẽ so sánh theo tính năng, hiệu suất, bảo mật và khả năng phuc hồi, tính toàn vẹn dữ liệu …
Tính năng:
Trang 9MySQL hơn SQL Server ở tính năng cung cấp nhiều loại storage engine Tuy nhiên, tính về mặt tích hợp chặt chẽ cho toàn bộ hệ thống và công cụ phát triển phần mềm thì SQL Server tích hợp tốt hơn MySQL đặc biệt là ở mảng.NET SQL Server còn hỗ trợ XML trực tiếp trong cơ sở dữ liệu trong khi đó thì MySQL chưa làm được việc này Các chức năng cần thiết như View, StoreProcedure, Trigger thì cả hai tương đương nhau.
Bảo mật:
SQL Server có độ bảo mật rất cao Hơn hẳn MySQL về tính bảo mật
ở mức độ cột Trong khi đó MySQL chỉ có thể thiết lập mức truy cập đến hàng trong bảng Hệ thống xác thực người dùng của SQL Server cũng qua mặt MySQL
Bảo đảm tính toàn vẹn của dữ liệu
Sau khi thi HK, bạn được giao nhiệm vụ cập nhật điểm cho SV Điểm số là 1 số thực nằm trong khoảng từ 0 - 10; và có thể có điểm lẻ như 6.5, nhưng không có điểm lẻ kiểu như 8.2 Dĩ nhiên là bạn hoàn toàn có thểviết chương trình để kiểm tra tính đúng đắn của điểm trước khi cập nhật vào CSDL Nhưng lỡ như đến 1 lúc nào đó, trường đổi cách chấm điểm, cho phép điểm có thể lẻ đến 0.25, hoặc thay đổi thang điểm từ 0 - 100 và không có điểm lẻ Lúc đó bạn phải sửa lại chương trình của bạn ở nhiều chỗ, và nếu chẳng may bạn quên sửa 1 chỗ nào đó thì hậu quả sẽ không
Trang 10biết trước được.
Các DBMS cao cấp cho phép bạn tránh được điều này bằng cách thiết lập các ràng buộc cho dữ liệu Ví dụ bạn có thể thiết lập ràng buộc rằng ở tableDiemSo thì field Diem phải là 1 số nguyên từ 0 - 100 (nếu là thang điểm 100) Sau đó, nếu dữ liệu cập nhật vào không đúng với ràng buộc, DBMS
sẽ từ chối cập nhật và hiển thị ra thông báo lỗi cho bạn biết
MySQL cho tới version hiện thời vẫn chưa có tính năng này
có thể SELECT MSV từ 2 bảng và hiển thị các record có SinhVien.MSV =DangKy.MSV Hoặc bạn cũng có thể làm gọn hơn chỉ với 1 câu lệnh SELECT DISTINCT msv FROM DangKy
Nhưng giả sử yêu cầu đặt ra là bạn hiển thị danh sách các SV KHÔNG có
Trang 11đăng ký môn học nào Với MySQL bạn không thể chỉ với 1 câu lệnh SQL
là đạt được kết quả mà bạn phải dùng nhiều câu lệnh SQL đơn liên tiếp nhau, và có thể phải tạo ra các bảng tạm thời để lưu trữ các kết quả trung gian Trong khi đó, trên thực tế, với SQL Server, bạn chỉ cần 1 câu lệnh SQL đơn giản như sau:
SELECT msv FROM SinhVien
WHERE NOT EXISTS (
SELECT msv FROM DangKY
WHERE DangKy.msv = SinhVien.msv
MySQL sử dụng cho các wed nhỏ Còn SQL Server thường sử dụng cho các doanh nghiệp vừa, trung bình
3.2) Access và SQL Server
Mức độ bảo mật:
Access thì độ bảo mật không cao Còn SQL Server mức độ bảo mật vượt hơn hẳn
Khả năng truy xuất dữ liệu:
MS SQL sever, chuyên quản trị dữ liệu nên hệ thống chứa dữ liệu đồ
sộ hơn tối đa khoảng 10GB còn access chỉ chứa được tối đa 2GB Vậy nên
Trang 12khả năng truy xuất dữ liệu của SQL Server tốt và nhanh hơn Access Thêmvào đó khả năng Dataware house, phân tích dữ liệu SQL server làm tốt hơnnhiều.
Phạm vi sử dụng:
Cả hai cơ sở dữ liệu Access và SQL Server đều chỉ chạy trên hệ điềuhành Window của Microsoft
KẾT LUẬN:
Từ các kết quả so sánh trên ta nhận thấy rằng ngôn ngữ lập trình cơ
sở dữ liệu SQL Server là ngôn ngữ rất ưu thế và đây là ngôn ngữ được lựa chọn trong đề tài vì những đặc điểm sau:
Đây là ngôn ngữ mạnh, chỉ đứng thứ 2 sau Oracel
Là ngôn ngữ phổ biến
Câu lệnh đơn giản
Khả năng chứa dữ liệu lớn
Mức độ bảo mật cao
Đơn giản, dễ sử dụng
Hiệu suất sử dụng lớn, truy xuất dữ liệu nhanh
Thích hợp sử dụng trong bài toán vừa và lớn
III Sự khác nhau giữa các mô hình lập trình
1) Mô hình một lớp
Mô hình một lớp thông thường là mô hình mà chương trình chạy từ đầutới cuối Không có sự phân tách mã nguồn Tất cả các công việc được viết trong một lớp
1.1) Ưu điểm
Chương trình đơn giản, dễ hiểu
Tư duy giải thuật rõ ràng
Trang 131.2) Nhược điểm
Không hỗ trợ việc tái sử dụng
Không phù hợp với các bài toán lớn
Tốn thời gian và chi phí bảo trì
2) Mô hình 3 lớp
Đặc điểm:
Mô hình ba lớp giúp phân việc cần làm ra ba nhóm riêng biệt là
Presentation Layer, DataAccess Layer và Bussiness Logic Layer Các lớp này giao tiếp với nhau qua các dịch vụ mà các lớp cung cấp và làm việc độc lập với nhau Việc triển khai trên một máy hay nhiều máy không làm mất đi ý nghĩa của lớp
Mô hình ba lớp phù hợp với những bài toán trung bình và lớn
Trang 14thực thi của ứng dụng, làm ứng dụng trở nên “chậm” hơn một cách thông thường
Việc phát triển ứng dụng phức tạp hơn
3) Mô hình đa tầng
Kiến trúc đa tầng trong phần mềm là kiến trúc mà trong đó phần mềm được chia thành rất nhiều phần khác nhau, độc lập với nhau và có liên quanđến nhau Để phân chia các chức năng thành các tầng, chúng ta phải dựa vào nhiệm vụ và giới hạn của mỗi phần để chia thành các phần sao cho thậtchính xác
Kiến trúc đa tầng dùng cho những người phân tích và thiết kế chương trình Mục đích của nó là giảm thiểu sự phức tạp trong việc thiết kế một chương trình "không module" và liên quan phức tạp đến nhau trở thành những thành phần riêng biệt, tách rời nhau nhưng vẫn giữ được mối liên quan trong toàn bộ hệ thống
Mô hình đa tầng phù hợp với những bài toán lớn
Trang 15nó còn vì những lí do sau:
Là mô hình lập trình phổ biến và được sử dụng rộng rãi
Phù hợp với những bài toán vừa và lớn
Chương 2: Mô hình ba lớp
I Lý thuyết
1) Giới thiệu về mô hình ba lớp
Trong phát triển ứng dụng, để dễ quản lý các thành phần của hệ thống, cũng như không bị ảnh hưởng bởi các thay đổi, người ta hay nhóm các thành phần có cùng chức năng lại với nhau và phân chia trách nhiệm cho từng nhóm để công việc không bị chồng chéo và ảnh hưởng lẫn nhau
Ví dụ trong một công ty bạn có từng phòng ban, mỗi phòng ban sẽ chịu trách nhiệm một công việc cụ thể nào đó, phòng này không được can thiệp vào công việc nội bộ của phòng kia như Phòng tài chính thì chỉ phát lương,độc lập với nhau trong công việc Trong phát triển phần mềm, người ta cũng áp dụng cách phân chia chức năng này Bạn sẽ nghe nói đến thuật ngữ kiến trúc đa tầng/nhiều lớp, mỗi lớp sẽ thực hiện một chức năng nào
Trang 16đó, trong đó mô hình 3 lớp là phổ biến nhất 3 lớp này là Presentation
Layer, Business Logic Layer, và Data Access Layer Tuy làm những nhiệm
vụ khác nhau nhưng lại có liên quan mật thiết với nhau Các lớp này sẽ giao tiếp với nhau thông qua các dịch vụ(services) mà mỗi lớp cung cấp đểtạo nên ứng dụng, lớp này cũng không cần biết bên trong lớp kia làm gì màchỉ cần biết lớp kia cung cấp dịch vụ gì cho mình và sử dụng nó mà thôi
Ta có mô hình mô tả mô hình ba lớp như sau:
Trang 17 Presentation Layer: Lớp này làm nhiệm vụ giao tiếp với người dùngcuối để thu thập dữ liệu, chia sẻ giao diện người dùng, mã ẩn và được thiết kế để hiển thị kết quả/dữ liệu cho người dùng thông qua các thànhphần trong giao diện người sử dụng.
Lớp này sẽ sử dụng dịch vụ do lớp Bussiness Logic cung cấp trong lớp này có 2 thành phần chính đó là User Interface Components và UserInterface Process Components
Trang 18User Interface Components là những phần tử chịu trách nhiệm thu thập và hiển thị thong tin cho ngưởi dung cuối User Interface Process Components là những thành phần chịu trách nhiệm quản lý các quy trình chuyển đổi giữa các User Interface Components.
Business Logic Layer: Lớp này thực hiện các nghiệp vụ chính của
hệ thống, làm việc như cầu nối giữa lớp Data Layer và Presentation Layer Tất cả các dữ liệu đều phải đi qua lớp này trước khi được đưa đến lớp Presentation Layer
Trong lớp này có các thành phần chính là Business Components,
Business Entities và Service Interface.
Service Interface là giao diện lập trình mà lớp này cung cấp cho lớp Presentation sử dụng Lớp Presentation chỉ cần biết các dịch vụ thông
qua giao diện này mà không cần phải quan tâm đến bên trong lớp này được hiện thực như thế nào
Business Entities là những thực thể mô tả những đối tượng thông
tin mà hệ thống xử lý Các business entities này cũng được dùng để trao đổi thông tin giữa lớp Presentation và lớp Data Access.
Business Components là những thành phần chính thực hiện các dịch
vụ mà Service Interface cung cấp, chịu trách nhiệm kiểm tra các ràng buộc logic(constraints), các qui tắc nghiệp vụ(business rules), sử dụng các dịch vụ bên ngoài khác để thực hiện các yêu cầu của ứng dụng
Data Access Layer: Về cơ bản, Data Layer là máy chủ lưu trữ tất cả các dữ liệu của ứng dụng Data Layer bao gồm các cơ sở dữ liệu bảng, các tập tin XML và các phương tiện khác lưu trữ Data Aplication Lớp này thực hiện các nghiệp vụ lien quan đến lưu trữ và truy vấn dữ liệu của ứng dụng