Logical paradigm Lập trình hướng logic- Logical paradigm là mợt mẫu hình lập trình dựa trên logic tốn trong các mối quan hệ và các suy luận.. Parallel paradigm Lập trình so
Trang 1VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
──────── * ───────
BÁO CÁO
HỌC PHẦN: KỸ THUẬT LẬP TRÌNH
(Mã học phần: IT3040)
TÌM HIỂU CÁC MÔ THỨC LẬP TRÌNH
Sinh viên thực hiện: Trương Văn Hiển MSSV: 20194276
Lớp: 128698
Giảng viên hướng dẫn: ThS.Vũ Đức Vượng
Trang 2Hà Nội, tháng 10 năm 2021
Trang 3MỤC LỤC
MỤC LỤC 2
GIỚI THIỆU VỀ CÁC MÔ THỨC LẬP TRÌNH PHỔ BIẾN 3
1 Functional paradigm (Lập trình hướng chức năng) 3
2 Logical paradigm (Lập trình hướng logic) 3
3 Visual paradigm (Lập trình trực quan) 4
4 Parallel paradigm (Lập trình song song) 5
5 Concurrent paradigm (Lập trình tương tranh) 6
6 Distributed paradigm (Lập trình phân tán) 6
7 Service – oriented paradigm (Lập trình hướng dịch vụ) 7
TÌM HIỂU CHI TIẾT VỀ FUNCTIONAL PARADIGM 9
1 Giới thiệu tổng quan 9
2 Ví dụ về Functional paradigm 10
3 Đặc điểm 10
4 Ưu điểm 11
5 Tại sao nên sử dụng Functional Paradigm? 11
6 Nhược điểm 11
TÀI LIỆU THAM KHẢO 12
Trang 4GIỚI THIỆU VỀ CÁC MÔ THỨC LẬP TRÌNH PHỔ BIẾN
1 Functional paradigm (Lập trình hướng chức năng)
- Funtional programming là một dạng mô hình lập trình (FP – còn gọi là lập trình hàm), cũng giống như lập trình tuần tự hay lập trình hướng đối tượng (OOP) Functional programming là một phương pháp lập trình dựa trên các hàm toán học (function), tránh việc thay đổi giá trị của dữ liệu Nó có nhiều lợi ích như : các khối xử lý độc lập dễ tái sử dụng, thuận lợi cho việc thay đổi logic hoặc tìm lỗi chương trình
- Đặc điểm: Module hóa chương trình
Các giá trị đã được tạo là không thể biến đổi
Chức năng là biểu diễn của một biểu thức
Giải thuật thực hiện theo từng bước
Giá trị trả về là không thể biến đổi
Không thể thay đổi cấu trúc dữ liệu của giá trị nhưng có thể sao chép các thành phần tạo nên giá trị đó
Nguyên lý và ý tưởng: Toán học và lý thuyết về hàm
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 Tính toán bằng cách gọi các chức năng
Mở ra những khả năng mới
2 Logical paradigm (Lập trình hướng logic)
- Logical paradigm là một mẫu hình lập trình dựa trên logic toán trong các mối quan hệ và các suy luận Các chương trình được viết trong các Ngôn ngữ lập trình logic là các tập hợp câu logic, thể hiện sự thật và các luật về một vài vùng vấn đề nào đó Cùng với các thuật toán suy luận, chúng hình thành nên chương trình Các lập trình logic chính bao gồm Prolog và Datalog
- 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 Lập trình hướng logic dựa trên các tiên đề, các quy luật suy diễn và các truy vấn
- Ví dụ định nghĩa 1 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ó
Trang 5Để 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ằ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ễ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 paradigm (Lập trình trực quan)
- Visual paradigm language (VPL) là bất kì ngôn ngữ lập trình nào cho phép người dùng tạo chương trình bằng cách thao tác các yếu tố chương trình bằng
đồ họa thay vì chỉ định chúng bằng văn bản Một VPL cho phép lập trình với các biểu thức trực quan, sắp xếp không gian của các kí hiệu văn bản và đồ họa, được sử dụng làm thành phần của cú pháp hoặc kí hiệu phụ
- Ví dụ: Nhiều VPL (như lập trình dataflow, sơ đồ) được dựa trên ý tưởng về
“Hộp và mũi tên” Trong đó các hộp hoặc các đối tượng mà hình khác được coi là thực thể, được kết nối bằng mũi tên, đường hoặc vòng cung biểu thị quan hệ
- Đặc điểm:
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
Cho phép xây dựng chương trình theo hướng sự kiện (Event-Driven 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
Trang 6 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
4 Parallel paradigm (Lập trình song song)
- Tính toán song song 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
- Định luật Moore: “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
- 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 3 giai đoạn bước chính:
Phân chia chương trình thành các công việc con
Phân tích sự phụ thuộc
Định thời các công việc
- Để 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 75 Concurrent paradigm (Lập trình tương tranh)
- Lập trình tương tranh là một hình thức điện toán trong đó một số tính toán được thực hiện trong các khoảng thời gian chồng chéo, đồng thời là một phần
tử liên tục (một hoàn thành trước khi bắt đầu tiếp theo) Đây là một thuộc tính của một hệ thống, đây có thể là một chương trình riêng lẻ, một máy tính hoặc một mạng và có một điểm thực thi riêng hoặc luồng điều khiển cho mỗi tính toán (quy trình) Một hệ thống đồng thời là một hệ thống trong đó một tính toán có thể tiến lên mà không cần chờ tất cả các tính toán khác hoàn thành
- 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
- Đặ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 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 paradigm (Lập trình phân tán)
- 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:
Trang 8 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ỏ (Ví dụ: trong 2 máy tính, trong 1 mạng LAN )
Mức cao hơn là lập trình sử dụng, triển khai ứng dụng theo mô hình dịch vụ (service) - quản lí mạng theo mô hình: kết nối, tạo tham chiếu client trên server và trả về, gọi hàm và truyền dữ liệu thông qua proxy của đối tượng trả về từ server (vd: RMI trên Java hay Remoting
trên.NET ), mô hình này thường gặp trong các ứng dụng mạng cỡ trung bình và lớn, đòi hỏi tính performance cao (vd: các ứng dụng mạng đòi hỏi kết nối nhiều - liên tục và sử dụng diện rộng như các dịch vụ chat, game online ), ưu điểm chính của mô hình này là tính
performance cao, bảo mật, nhưng nhược điểm là tính đa nền
(multiplatform) và tính khả chuyển chưa cao (server và client phải cùng
1 công nghệ phát triển)
Mức cao nhất là triển khai ứng dụng theo mô hình triển khai trên web, điển hình nhất ta có thể thấy là các web application và web service, mới nhất giờ có công nghệ WCF của M$ (tổng hợp tất cả trong 1) mô hình này cho phép triển khai trên diện rộng, phục vụ lượng khách hàng lớn nhưng cũng có nhược điểm là tính performance chưa cao, bù lai, nó có khả năng mềm dẻo (flexibility) cao (server và client không cần sử dụng chung một công nghệ) Chúng ta thường thấy những ứng dụng loại này trong các ứng dụng được cung cấp từ một nhà cung cấp nào đó (Ví dụ: các số liệu chứng khoán, thời tiết …)
7 Service – oriented paradigm (Lập trình hướng dịch vụ)
- Lập trình hướng dịch vụ (SOP) là mô thức lập trình được xây dựng dựa trên lập trình hướng đối tượng (OOP), thêm vào đó những tiền đề giúp cho chúng
ta có thể mô hình hóa các bài toán bằng những khái niệm của dịch vụ
(Service), cái mà được cung cấp và sử dụng bởi các đối tượng
- Dịch vụ (Service) là một hành vi (behavior) mang tính hợp đồng đã được định nghĩa trước Các hành vi này có thể được hiện thực bởi bất kì thành phần (component) nào, nó cũng có thể được cung cấp bởi thành phần nào, dựa trên một hợp đồng duy nhất Dịch vụ này có thể sử dụng bởi một dịch vụ khác
- Mô hình thành phần (component model) quy định rằng những bài toán về lập trình có thể được xem như những hộp đen, chúng được triền khai một cách độc lập và giao tiếp nhau thông qua những hợp đồng
- Mô hình client – server truyền thống không được định nghĩa trước những hợp đồng công cộng (public contract) giữa client và server Việc hiện thực của client và server cũng không thể độc lập nhau Một client chỉ có thể kết nối hay giao tiếp với một client duy nhất Trong mô hình SOP thì có sự khác biệt, một
Trang 9client không bị bó buộc với bất kì server nào Thay vào đó, vai trò người cung cấp dịch vụ có thể thay đổi qua lại giữa client và server
- Các đặc trưng của SOP:
Tính liên kết (conjunctive): Khả năng sử dụng hoặc kết hợp các dịch vụ theo những các khác với các cách thức đã tạo ra chúng Nó hàm ý rằng những dịch vụ đó đã tạo ra những interface cái mà chúng ta có thể dễ dàng nhận ra
Khả năng triển khai (deployable): Khả năng triền khai hoặc sử dụng lại các thành phần trong bất kì môi trường nào Điều này đòi hỏi sự độc lập
về môi trường bao gồm sự độc lập về vận tải (transport), sự độc lập về nền tảng (platform) và sự độc lập về ngữ cảnh
Tính lưu động (mobile): Khả năng di chuyển mã xung quanh mạng Nó được sử dụng để di chuyển các proxy, giao diện người dùng và các dịch
vụ di động
Tính sẵn sàng (available): Là một trong những tiền đề quan trọng của lập trình hướng dịch vụ, nghĩa là những mạng lưới nguồn tài nguyên dư thừa sẽ đảm bảo sự sẵn sàng cao cho SOP Đây cũng là mục tiêu của SOP để xử lý các lỗi xảy ra trong tính toán phân bố
Sự bảo mật (security): Những khái niệm của mã di động và những mạng lưới dịch vụ có khả năng khám phá đã đưa đến những thách thức về mặt bảo mật Trong khi SOP cho phép giới hạn sử dụng các dịch vụ rộng hơn, nó không thể thành công nếu thiếu việc bảo vệ các dịch vụ trước việc sử dụng không đúng đắn
Trang 10TÌM HIỂU CHI TIẾT VỀ FUNCTIONAL PARADIGM
1 Giới thiệu tổng quan
- Trong ngành khoa học máy tính, lập trình hàm hay lập trình hướng chức
năng là một mô hình lập trình xem việc tính toán là sự đánh giá các hàm toán học và tránh sử dụng trạng thái và các dữ liệu biến đổi Lập trình hàm nhấn mạnh việc ứng dụng hàm số, trái với phong cách lập trình mệnh lệnh, nhấn mạnh vào sự thay đổi trạng thá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, OOP trở thành paradigm được sử dụng phổ biến nhất cho đến ngày hôm nay
- 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