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

Một số mô thức lập trình

20 496 3

Đ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 20
Dung lượng 44,95 KB

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

Nội dung

Một số mô thức lập trình, 9 mô thức lập trình, mô hình lập trình, một số mô hình lập trình, vũ đức vượng, kỹ thuật lập trình Một số mô thức lập trình, 9 mô thức lập trình, mô hình lập trình, một số mô hình lập trình, vũ đức vượng, kỹ thuật lập trình

Trang 1

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: Đỗ Bá Mạnh

SHSV:20111830

Lớp CNTT-TT 1.1

Hà Nội, 1/2013

Trang 2

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 kỳ đầ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ệ,

Trang 3

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:

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

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

 Lập trình logic - Logical paradigm

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

 Lập trình song song - Parallel programming

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

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

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

 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 đầ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 ngày hôm nay

Từ những năm 1950, mặc dù vẫn phát triển mạnh mẽ và liên tục với các đại diện như SML, OCaml, APL và Clean, thì FP vẫn chỉ được sử dụng cho mục đích học thuật và nghiên cứu là chủ yếu Imperative đạt được thành công bước đầu nhờ vào những chỉ thị đơn giản OO thành công nhờ vào khả năng mô hình hóa các bài toán phức tạp Còn FP có khả năng gì, tại sao dù ra đời sớm nhưng lại không mang lại thành công như mong đợi?

Trang 5

FP xem chương trình là một tập hợp các hàm nhận vào đối số và trả về giá trị Không giống như Imperative, FP không tạo ra hiệu ứng phụ và sử dụng đệ qui thay cho vòng lặp Hàm trong FP rất giống với hàm

trong toán học vì nó không làm thay đổi trạng thái của chương trình

• Một đại lượng khi được gán giá trị thì không bao giờ thay đổi giá trị đó

• Hàm không sửa đổi giá trị của đối số được truyền vào, và giá trị do hàm trả

về hoàn toàn là một giá trị mới

Về mặt kĩ thuật cài đặt bên dưới, khi giá trị được gán vào một vùng nhớ thì được đánh dấu là đã sử dụng và không ghi đè lên nữa Để tạo ra kết quả trả về, các hàm sao chép giá trị rồi chỉnh sửa trên các bản sao đó, không làm ảnh hưởng đến giá trị ban đầu, rồi trả về bản sao đã được chỉnh sửa Các đại lượng không còn được hàm nào tham chiếu đến sẽ tự động bị hủy để giải phóng bộ nhớ (đây là ý tưởng của bộ thu gom rác trong Java và.NET)

Cơ sở toán học cho FP rất tường minh, cung cấp giải pháp logic và ngắn gọn cho các vấn đề tính toán Tuy nhiên, do nó không linh hoạt thay đổi trạng thái và chuyên sử dụng đệ qui khiến người ta ưa chuộng các paradigm khác hơn để xử lý các thao tác tính toán thông dụng

2 Logical paradigm

Trang 6

Trong lập trình logic, ta có thể sử dụng các vị từ để định nghĩa các khái niệm của tất cả các môn khoa học khác

Ví dụ định nghĩa một số nguyên tố:

Số nguyên tố N là một số nguyên lớn hơn 1, chỉ chia hết cho 1 và chính nó

Để xét xem số N có phải là số nguyên tố hay không, người ta thường sử dụng dấu hiệu nhận biết: Số nguyên tố là một số nguyên dương, không chia hết cho mọi số nguyên tố nhỏ hơn nó và 2 là số nguyên tố nhỏ nhất

Dấu hiệu này có thể mô tả bằng các vị từ như sau:

- 2 là một số nguyên tố

- N là một số nguyên tố nếu N>0, M là số nguyên tố nào đó, M<N và N không chia hết cho M

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ống phải chứng minh trên cơ sở các tri thức đã được khai bá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 sinh từ một yêu cầu

như là một “đích” và cố chứng minh “đích” đó bằng cách tạo những suy diễn trên cơ sở các tri thức đã khai bá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ễn hầu hết các khái niệm và các định lý trong các bộ môn khoa học

3 Visual programming

Trang 7

Như chúng ta đã biết, mỗi loại máy tính (sử dụng loại CPU – Central Processing Unit xác định) chỉ có thể hiểu và thực hiện trực tiếp được các lệnh cũng như chương trình theo một loại ngôn ngữ dành riêng được gọi là ngôn ngữ máy Tuy nhiên, nếu triển khai các ứng dụng trong thực tế mà phải viết chương trình trực tiếp bằng ngôn ngữ máy thì sẽ rất phức tạp, đòi hỏi thời gian và công sức rất lớn, nhiều khi không thể thực hiện được Vì vậy, người ta tìm cách xây dựng một ngôn ngữ lập trình riêng gần với các ngôn ngữ tự nhiên, thuận lợi cho việc triển khai các ứng dụng Khi thực hiện các chương trình bằng ngôn ngữ này phải qua một bước dịch chương trình đó sang ngôn ngữ máy để nó có thể thực hiện Từ trước đến nay có rất nhiều ngôn ngữ lập trình được ra đời và phục vụ đắc lực cho việc triển khai các ứng dụng trên máy tính

Trong giai đoạn đầu, các ngôn ngữ lập trình tuy dễ sử dụng hơn ngôn ngữmáy nhưng rất khó với các lập trình viên vì chưa đủ mạnh để dễ dàng triển khai các thuật toán Chương trình chưa có tính cấu trúc chặt chẽ về mặt dữ liệu cũng như tổ chức chương trình Vì vậy, việc triển khai các ứng dụng trong thực tế bằng các ngôn ngữ lập trình này là rất khó khăn

Giai đoạn 2 là thời kỳ của các ngôn ngữ lập trình có cấu trúc Các ngôn ngữ lập trình này có đặc điểm là có tính cấu trúc chặt chẽ về mặt dữ liệu và

tổ chức chương trình Một loạt các ngôn ngữ lập trình có cấu trúc ra đời và dược sử dụng rộng rãi như : PASCAL, C, BASIC

Giai đoạn 3 là thời kỳ của lập trình hướng đối tượng và phương pháp lập trình có bước biến đổi mạnh Trong các ngôn ngữ lập trình có cấu trúc thì một ứng dụng bao gồm hai thành phần riêng là dữ liệu và chương trình Tuy chúng có quan hệ chặt chẽ nhưng là hai đối tượng riêng biệt Trong phương pháp lập trình hướng đối tượng thì mỗi một đối tượng lập trình sẽ bao hàm

cả dữ liệu và phương thức hành động trên dữ liệu đó Vì vậy, việc lập trình

sẽ đơn giản và mang tính kế thừa cao, tiết kiệm được thời gian lập trình Tuy nhiên, với các phương pháp lập trình trên đều đòi hỏi lập trình viên phải nhớ rất nhiều câu lệnh với mỗi lệnh có một cú pháp và tác dụng riêng, khi viết chương trình phải tự lắp nối các lệnh để có một chương

trình giải quyết từng bài toán riêng biệt

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

Trang 8

Đặ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

Đặc điểm:

Programming, nghĩa là một chương trình ứng dụng được viết theo kiểu này đáp ứng dựa theo tình huống xảy ra lúc thực hiện chương trình Tình huống này bao gồm người sử dụng ấn một phím tương ứng, chọn lựa một nút lệnh hoặc gọi một lệnh từ một ứng dụng khác chạy song song cùng lúc

• Người lập trình trực tiếp tạo ra các khung giao diện (interface), ứng dụng thông qua các thao tác trên màn hình dựa vào các đối tượng (ojbect) như hộp hội thoại hoặc nút điều khiển (control button), những đối tượng này mang các thuộc tính (properties) riêng biệt như: màu sắc, Font chữ mà ta chỉ cần chọn lựa trên một danh sách cho sẵn

• Khi dùng các ngôn ngữ lập trình trực quan ta rất ít khi phải tự viết các lệnh, tổ chức chương trình một cách rắc rối mà chỉ cần khai báo việc gì cần làm khi một tình huống xuất hiện

• Máy tính sẽ dựa vào phần thiết kế và khai báo của lập trình viên để tự động tạo lập chương trình

Trang 9

4 Parallel programming.

Tính toán song 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

“Số lượng transistor trong bộ vi xử lý sẽ tăng lên gấp đôi sau mỗi 24 tháng.”

Gordon Moore - sáng lập viên của tập đoàn Intel

Cùng với định luật Moore, các máy tính hiện nay đã được trang bị các bộ vi xử lý

đa nhân mạnh mẽ

Tuy nhiên, để tận dụng được sức mạnh đó đòi hỏi các lập trình viên phải tận dụng được hết các nhân trong bộ vi xử lý Vì vậy, thay vì lập trình tuần tự như trước đây chỉ sử dụng một nhân của bộ vi xử lý thì người lập trình viên ngày nay phải dùng

kỹ thuật lập trình song song để tận dụng hiệu suất của bộ vi xử lý đa nhân

Việc lập trình song song không phải lúc nào cũng mang lại hiệu suất cao cho chương trình Đối với các công việc chỉ tốn ít hiệu suất thì việc dùng lập trình song song sẽ không mang lại kết quả như mong đợi do khoảng thời gian để khởi tạo và quản lý các tiến trình song song gây nên

Trong quá trình lập trình song song, lập trình viên khó tránh khỏi việc các tiến trình cùng sử dụng chung một dữ liệu điều này sẽ gây ra xung đột dữ liệu hoặc làm dữ liệu bị sai lệch do đó lập trình viên cần phải chú ý và áp dụng các kỹ thuật lập trình để giải quyết vấn đề này

Bộ vi xử lý có nhiều nhân sẽ tăng tốc chương trình song song tuy nhiên không có nghĩa là nó sẽ tăng lên 100% trên một nhân (core) được thêm vào Thậm chí

chương trình song song không hề tăng hiệu suất lên trong một số trường hợp Vì vậy lập trình viên phải biết quyết định khi nào sử dụng lập trình song song bằng cách sử dụng các công cụ đo lường để xác định được tốc độ thực thi của chương trình

Trang 10

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 bước 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 analysic)

• Định thời các công việc (Task scheduling)

Nói một cánh 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,…)

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

Trong 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 ( thread ), 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:

Trang 11

• 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 kiệ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 Những yếu tố đó khiến cho việc lập trình các tính toán của 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ế …

Có thể chia lập trình mạng thành 3 cấp độ, căn cứ theo mức độ thân thiện với developer và khả năng triển khai:

Mức thấp nhất là lập trình sử dụng socket - có thể truyền từng byte, từng stream lên trên mạng, ứng dụng này thường gặp trong các ứng dụng mạng cỡ nhỏ (vd: trong 2 máy tính, trong 1 mạng LAN )

Ngày đăng: 23/01/2015, 00:10

TỪ KHÓA LIÊN QUAN

w