1. Trang chủ
  2. » Luận Văn - Báo Cáo

Bài tập Mô thức lập trình

12 827 19

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 12
Dung lượng 33,56 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Bên cạnh sự đa dạng của ngôn ngữ lập trình, cũng dần có rất nhiều mô hình lập trình được ra đời, trong đó phổ biến nhất có thể kể đến như: Lập trình hướng đối tượng object-oriented progr

Trang 1

ĐẠI HỌC BÁCH KHOA HÀ NỘI

Bộ môn: Kĩ thuật lập trình

TÌM HIỂU VỀ MỘT SỐ MÔ HÌNH LẬP TRÌNH

Giảng viên: Vũ Đức Vượng

Thực hiện:

Sinh viên: Nguyễn Bá Duy MSSV: 20121397

Lớp: CNTT 1.01

Hà Nội 19/01/2015

Trang 2

Lời nói đầu

Bất kì một ngôn ngữ lập trình nào cũng đều mang tính logic cao và tuân theo những quy chuẩn cơ bản về toán học Tuy vậy, mỗi ngôn ngữ lại có những phương thức riêng để thực hiện những quy chuẩn đó, đặc biệt là trên các lĩnh vực như hàm (function), biến (variable), phương thức (method) và đối tượng (object) Bên cạnh sự đa dạng của ngôn ngữ lập trình, cũng dần có rất nhiều mô hình lập trình được ra đời, trong đó phổ biến nhất có thể kể đến như: Lập trình hướng đối

tượng (object-oriented programming), lập trình thủ tục(procedural programming)

và lập trình cấu trúc (structured programming) Mỗi một mô hình lập trình lại có những đặc trưng riêng về cách sử dụng cũng như tính trừu tượng hóa đối với các quá trình xác định

Các nhóm khác nhau trong công nghệ phần mềm đề xướng các phương pháp

khác nhau, các ngôn ngữ lập trình khác nhau tức là các mô hình lập trình khác nhau Một số ngôn ngữ được thiết kế để hỗ trợ một mô hình đặc thù (Java hỗ trợ lập trình hướng đối tượng trong khi Haskell hỗ trợ lập trình chức năng) Một số ngôn ngữ khác lại hỗ trợ nhiều mô hình (như Python và Common Lisp)

Một số mô hình lập trình cấm các thao tác mà chính ngôn ngữ đó có Chẳng hạn, lập trình cấu trúc không cho phép sử dụng lệnh goto Quan hệ giữa các mô hình lập trình và các ngôn ngữ lập trình có thể phức tạp vì một ngôn ngữ có thể hỗ trợ nhiều mô hình lập trình Thí dụ như C++ được thiết kế để hỗ trợ các phần tử của lập trình thủ tục, lập trình hướng đối tượng và lập trình tiêu bản

Mặc dù vậy, những người thiết kế và những người lập trình sẽ quyết định làm thế nào để xây dựng một chương trình dùng các phần tử của mô hình nào đó Người ta có thể viết một chương trình hoàn toàn theo kiểu lập trình thủ tục trong C++, cũng có thể viết chương trình hoàn toàn hướng đối tượng, hay viết chương trình có các phần tử của cả hai mô hình

Ở thời kz đầu, công nghệ phần mềm hoàn toàn dựa trên những thao tác lập

trình bằng mã nhị phân hoặc mã máy, mà đại diện là các giá trị 0 và 1 Điều này khiến cho quá trình thiết kế, kiểm soát sự hoạt động cũng như sửa lỗi đối với một ứng dụng trở nên vô cùng rắc rối và không hiệu quả Chúng ta coi những phương thức lập trình ở thời điểm này thuộc mô hình lập trình bậc thấp (low-level

programming paradigm) Về sau, cùng với sự phát triển của công nghệ, những hạn chế của giai đoạn đầu tiên dần được xóa bỏ với sự ra đời của các ngôn ngữ lập trình thế hệ thứ 3 là COBOL, Fortran và BASIC, đồng thời, một mô hình lập trình mới cũng xuất hiện và vẫn tiếp tục được sử dụng hiệu quả và phổ biến cho đến ngày nay, đó là mô hình lập trình thủ tục (procedural paradigm) Dần dần, chúng

ta chứng kiến sự phát triển mạnh mẽ về số lượng của các mô hình lập trình, mà

cơ bản có thể kể đến các mô hình sau:

1. Lập trình cấu trúc - Structured programming

Trang 3

2. Lập trình chức năng - Functional programming

3. Lập trình logic - Logical paradigm

4. Lập trình trực quan - Visual programming

5. Lập trình song song - Parallel programming

6. Lập trình phân tán - Distributed programming

7. Lập trình tương tranh - Concurrent programming

8. Lập trình định hướng đối tượng - Component-oriented programming

9. Lập trình cực độ - Extreme programming

Trang 4

SƠ LƯỢC VỀ MỘT SỐ MÔ HÌNH LẬP TRÌNH PHỔ BIẾN

1 Functional programming.

Đặc điểm:

• Nguyên l{ và { tưởng: Toán học và lý thuyết về hàm

• Các giá trị đã được tạo là không thể biến đổi

• Trừu tượng hóa một biểu thức thành một hàm và ngược lại, một hàm có thể được tính toán như một biểu thức

• Hàm là lớp giá trị đầu tiên

• Hàm là những giá trị hoàn chỉnh, tương tự như số, danh sách

• Thích hợp với những tính toán theo yêu cầu

• Mở ra những khả năng mới

Functional Programming là thể loại lâu đời nhất trong ba paradigm lập trình chính Ngôn ngữ FP đầu tiên là IFP, được phát minh vào năm 1955, một năm trước khi có Fortran Sau đó, LISP ra đời năm 1958, một năm trước khi có COBOL Cả Fortran

và COBOL đều là những ngôn ngữ imperative (hay còn gọi là procedural) Chúng đặc biệt thành công khi được ứng dụng vào tính toán khoa học và nghiệp vụ, và trở thành paradigm thống trị trong suốt 30 năm đầu của kỉ nguyên thông tin Vào những năm 1970, Object-Oriented paradigm bắt đầu phát triển Cùng với sự trưởng thành của các ngôn ngữ lập trình hướng đối tượng, OO trở thành paradigm được sử dụng phổ biến nhất cho đến hiện nay

Trang 5

2 Logical paradigm

Khi mô tả bài toán dưới dạng logic vị từ, ta có thể yêu cầu hệ thống tìm kiếm các lời giải liên quan đến các khai báo đó Bài toán cần giải được xem là “mục tiêu”

mà hệthốngphảichứng minhtrêncơsở cáctrithứcđãđược khaibáo

Như thế, toàn bộ các kí hiệu của ngôn ngữ lập trình suy về một công thức đặc biệt:

- Phát sinhtừmộtyêu cầu

- Nhằm chứng minh một mục tiêu Để trả lời cho câu hỏi đó hệ thống xem nó như là một “đích” và cố chứng minh “đích” đó bằng cách tạo những suy diễntrêncơ sởcác trithức đãkhaibáo

Một ngôn ngữ logic có thể được dùng trong giai đoạn đặc tả yêu cầu của quy trình xây dựng một sản phẩm phần mềm Hơn thế nữa, logic vị từ cho phép biểu diễnhầu hết cáckháiniệmvà cácđịnhlí trong cácbộmônkhoahọc

Trang 6

3 Visual programing

Trong xu hướng phát triển mạnh mẽ hiện nay của tin học, số người sử dụng máy tính tăng lên rất nhanh và máy tính được sử dụng trong hầu hết các lĩnh vực của đời sống nên đòi hỏi các ngôn ngữ lập trình cũng phải đơn giản dễ sử dụng và mang tính đại chúng cao Chính vì vậy phương pháp lập trình trực quan ra đời

Đặc điểm của các ngôn ngữ lập trình trực quan là dễ sử dụng, triển khai các ứng dụng một cách nhanh chóng

4 Parallel programming.

Tính toán song (Parallel Computing) là việc chia một công việc ra thành các công việc nhỏ và cho các công việc này thực hiện đồng thời với nhau bởi các hệ thống có nhiều bộ vi xử lý (multiprocessor) hay bộ vi xử lý đa nhân (multicore) nhằm giảm thời gian thực hiện công việc đó xuống Việc lập trình để tách ra các công việc nhỏ và sắp xếp để xử lý song song thì được gọi là lập trình song song

Lập trình song song là một công việc rất phức tạp so với lập trình tuần tự thông thường, người phát triển phải thực hiện một quá trình “song song hóa”, biến đổi các chương trình tuần tự thành chương trình song song có khả năng tận dụng tối đa sức mạnh của hệ thống

Quá trình song song hóa gồm ba giai đoạn chính:

Phân chia chương trình thành các công việc con (Sub-task decomposition)

Phân tích sự phụ thuộc (Dependence anlysic) Định thời các công việc (Task scheduling)

Nói một cách dễ hiểu thì lập trình song song là lập trình để chạy được đa luồng với các dòng CPU đa nhân hiện nay (core i3, core i5, core i7,…)

Trang 7

5 Concurrent programming

Lập trình tương tranh là một trong những kỹ thuật quan trọng và cũng là một thách thức Một mặt, nó đem lại khả năng sử dụng hiệu quả cho những hệ thống song song và phân tán Mặt khác, những rủi ro trong việc tương tác giữa các tiên trình thực hiện đồng thời có thể gây ra những lỗi phần mềm không dễ dàng để tìm ra

Lập trình tương tranh, một số dòng lệnh có thể được thực hiện đồng thời Mỗi dòng lệnh là một chương trình tuần tự, ngoại trừ một thực tế là các dòng lệnh

có thể giao tiếp và gây trở ngại lẫn nhau Mỗi một dòng lệnh là một luồng, các chương trình tuần tự còn gọi là chương trình đơn luồng, còn chương trình viết theo phương pháp tương tranh là chương trình đa luồng

Đặc điểm:

Người dùng có thể tương tác với các ứng dụng khi tiến trình đang thực thi Những tiến trình chạy thời gian dài làm trì hoãn các tiến trình ngắn

Các chương trình phức tạp được thực hiện tốt hơn trên các bọ xử lý đa luồng

Những tiến trình đòi hỏi điều khiện tiên quyết có thể tạm dừng và đợi đến khi đáp ứng được để tiếp tục xử lý

6 Distributed programming.

Lập trình phân tán là một dạng của lập trình song song (tính toán song song) Lập trình song song tạo ra mối liên hệ giữa máy tính và các đơn vị tính toán, khiến chúng hoạt động đồng thời đối với một vấn đề cụ thể (dự báo thời tiết chẳng hạn) Các đơn vị tính toán có thể đặt rất gần nhau hoặc tách rời nhau Khi các đơn vị tính toán được đặt tách rời, ta gọi đó là lập trình phân tán Với mô hình lập trình này, các đơn vị tính toán thường rất khác nhau, cũng như sự khác nhau giữa các hệ điều hành và thiết lập mạng máy tính trở nên tương đối phức tạp và khó khăn

Lập trình mạng phân tán, thường có 2 khái niệm chính: peer to peer và client – server peer to peer là lập trình ngang hàng giữa 2 máy tính… còn lập trình client – server là lập trình cho phép n máy client kết nối tới m máy server – đây cũng là mô hình chúng ta sẽ gặp nhiều trong thực tế…

Trang 8

7 Extreme programming.

Extreme Programing là nổi tiến nhất của phương Agile (Agile Method) Nó được hình thành bởi một tập các thực nghiệm (practice) đơn giản nhưng phụ thuộc lẫn

nhau.Những pactice này làm việc với nhau để hình thành một dạng tổng quát hơn các thành phần của nó

Khách hàng là thành viên của nhóm phát triển (Cutomer team member)

Chúng ta mong muốn khách hàng và nhóm phát triển làm việc chung với nhau để

họ hiểu các vấn đề của nhau và cùng giải quyết các vấn đề đó

Vậy ai là khách hàng? Khách hàng của một nhóm XP là một nhóm người định nghĩa và xác định độ ưu tiên của chức năng hệ thống (hay sản phẩm) Đôi khi khách hàng là nhóm nhà phân tích nghiệp vụ hoặc chuyên gia marketing làm việc cùng một công ty phần mềm với nhóm phát triển Đôi khi khách hàng là một đâị diện của người dung Đôi khi khách hàng cũng chính là người trả tiền Nhưng trong một dự án XP, bất kể khách hàng là ai thì họ cũng là một thành viên của nhóm để phát triển

Tình huống tốt nhất là khách hàng làm việc với nhóm phát triển trong cùng một phòng Hoặc chí ít là làm việc ở nơi nào đó cách độ 100 feet so với phòng làm việc của nhóm phát triển Khoảng cách càng xa thì càng khó thỏa mãn điều kiện

“Customer team member” Nếu khách hàng làm việc trong một tòa nhà khác hoặc

ở một quốc gia khác thì càng khó mà yêu cầu họ tham gia cùng với nhóm

Chúng ta sẽ làm gì nếu khách hàng không thể ở gần nhóm phát triển? Lời khuyên của tôi là hãy tìm ai đó sẵn long làm việc chung và có thể đứng ở vai trò của một khách hàng thực thụ

Chu kỳ ngắn (Short C cles)

Một dự án XP sẽ giao sản phẩm dở dang (hay dự án đang thực hiện, cùng dịch từ chữ working project) mỗi 2 tuần Mỗi bước lặp 2 tuần Mỗi bước lặp 2 tuần này sản xuất ra một phần mềm dở dang đáp ứng một số yêu cầu nào đó của khách hàng Tại thời điểm cuối của bước lập, hệ thống được demo cho khách hàng xem

và nhận phản hồi của họ

Kế hoạch bước lặp:

Mỗi bước lặp thường kéo dài 2 tuần Nó đại diện cho một lần giao hàng thử,

có thể sẽ được hoặc không được them vào sản phẩm chính thức Nó là một tập các user story được chọn bởi khách dựa trên chi phí do nhóm phát triển đưa ra

Trang 9

Nhóm phát triển đưa ra chi phí cho một bước lặp bằng cách đo chi phí của các bước lặp họ đã làm trước đó Khách hàng chọn tùy ý số lượng story cho bước lặp sao cho tổng chi phí ước lượng vượt quá ngân sách

Mỗi khi một bước lập được khởi động, khách hàng đồng ý không thay đổi định nghĩa của story và độ ưu tiên Trong suốt thời gian này, nhà phát triển tự do cắt các story thành các nhiệm vụ (task) cà tự do cài đặt các task này tùy theo thuận lợi về mặt kỹ thuật và kinh doanh

Kế hoạch phát triển:

Nhóm XP thường tạo ra kế hoạch phát hành tương ứng với mỗi 6 bước lặp Một bản phát hàn thường là thành quả của 3 tháng làm việc Nó đại diện cho 1 lần giao hàng chính và thường sẽ được đưa vào sản phẩm Một bản phát hành cũng bao gồm một tập các story được phân độ ưu tiên bởi khách hàng dựa trên ngân sách mà nhóm phát triển đưa ra

Nhóm phát triển xây dựng ngân sách cho 1 bản phát hành bằng cách đo chi phí tiêu tốn của những phiên bản phát hành trước Khách hàng có thể chọn số lượng bất kì các story cho 1 bản phát hành sao cho tổng các chi phí ước lượng không vượt quá ngân sách Khách hàng cũng xác định trình tự các story được cài đặt trong 1 bản phát hành Nếu muốn, nhóm phát triển cũng có thể đưa ra vài bước lập đầu tiên và xác định xem story nào sẽ được cài đặt trong bước lặp nào

Các bản phát hành không cố định, khách hàng có thể thay đổi nội dung bất

kì lúc nào Họ có thể hủy hoặc viết một story mới hoặc thay đổi độ ưu tiên của các story

Các chương trình kiểm tra sự thỏa mãn yêu cầu của sản phẩm (Acceptance Test)

Chi tiết về user story được thu nhập trong dạng thức của các acceptance test được đặc tả bởi khách hàng Các acceptance test của 1 story được viết ngay trước hoặc cùng lúc với việc cài đặt story đó Chúng được viết theo một ngôn ngữ kịch bản bất kì nào cho phép chúng chạy tự động và có thể lặp lại

Ngôn ngữ của acceptance test được phát triển và tiến hóa cùng với hệ thống Khách hàng có thể thuê nhóm phát triển tạo một hệ thống thực thi kịch bản đơn giản hoặc có thể họ có bộ phận kểm soát chất lượng (A) riêng để phát triển nó Nhiều khách hàng nhờ A phát triển công cụ cho việc kiểm tra độ thỏa mãn của sản phẩm và trực viết các acceptance test

Mỗi khi một acceptace test thành công, nó được thêm vào nhóm của những acceptance test đã thành công trước đó, và không bao giờ được phép thất bại

Trang 10

Nhóm acceptance test tăng trưởng lên và sẽ được chạy nhiều lần trong ngày, hoặc chạy mỗi khi build hệ thống Nếu như các acceptance test thất bại thì build này được báo cáo là hỏng Như vậy mỗi khi yêu cầu được gọi là cài đặt xong thì nó sẽ không bao giờ bị vỡ Hệ thống chuyển từ trạng thái cũ sang trạng thái mới mà không bao giờ được phép không làm việc ( nghĩa là phải thỏa mãn các yêu cầu cũ lẫn mới) lâu hơn vài giờ

Lập trình theo cặp (Pải Programming)

Mã nguồng sản phẩm được viết bởi các cặp lập trình viên làm việc với nhau trên cùng một máy tính Một thành viên của 1 cặp sẽ giữ bàn phím và đánh code Thành viên còn lại sẽ quan sát code được đánh và tìm kiếm lỗi và cải tiến mã Cả 2 tương tác với nhau một cách lien tục và cả 2 cùng bận rộn với công việc viết phần mềm

Vai trò được thay đổi thường xuyên Người giữ bàn phím sẽ mệt mỏi và dẫn đến dễ sai lầm Người còn lại sẽ nhận lại bàn phím và điều khiển nó Bàn phím được hoán đổi nhiều lần giữa 2 người trong 1 giờ Mã nguồn kết quả được thiết kế

và được viết bởi cả 2 người Công sức của cả 2 là như nhau

Mối quan hệ theo cặp sẽ được thay đổi ít nhất 1 lần trong ngày để mỗi lập trình viên được làm việc ít nhất với 2 người trong ngày Xuyên suốt 1 bước lặp của

XP, mỗi thành viên của nhóm phát triển phải làm việc với mọi thành viên khác trong nhóm Và họ chỉ làm những công việc của trong nội dung của bước lặp đó

mà thôi

Điều này tăng cường sự trải rộng kiến thức cho toàn nhóm Trong khi kỹ thuật đặc trưng vẫn còn nguyên vẹn và các công việc yêu cầu kỹ thuật đặc trưng vẫn thường được giao cho các chuyên gia thì các chuyên gia này làm việc với hầu hết các thành viên còn lại trong nhóm Điều này sẽ trải rộng kiến thức cho toàn nhóm để các thành viên khác có thể thay thế cho chuyên gia trong các trường hợp khẩn cấp

Nguyên cứu của Laurie Williams và Nosek đã chỉ ra rằng việc theo cặp không những không giảm hiệu năng của đội ngũ lập trình mà nó còn gia giảm đáng

kể tỉ lệ sai sót

Sở hữu tập thể (Collective Ownership)

Một cặp có quyền check out và chỉnh sửa, cải tiến một module bất kì Không một lập trình viên nào chịu trách nhiệm cá nhân với một module bất kì hoặc một kĩ thuật bất kì Mọi người cùng làm việc với GUI Mọi người cùng làm việc với

Ngày đăng: 04/11/2015, 16:07

TỪ KHÓA LIÊN QUAN

w