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
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆ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: MSSV: Lớp: Trương Văn Hiển 20194276 128698 Giảng viên hướng dẫn: ThS.Vũ Đức Vượng IT3040 – Kỹ thuật lập trình 20211 Hà Nội, tháng 10 năm 2021 IT3040 – Kỹ thuật lập trình 20211 MỤC LỤC MỤC LỤC GIỚI THIỆU VỀ CÁC MÔ THỨC LẬP TRÌNH PHỔ BIẾN Functional paradigm (Lập trình hướng chức năng) Logical paradigm (Lập trình hướng logic) 3 Visual paradigm (Lập trình trực quan) .4 Parallel paradigm (Lập trình song song) 5 Concurrent paradigm (Lập trình tương tranh) 6 Distributed paradigm (Lập trình phân tán) Service – oriented paradigm (Lập trình hướng dịch vụ) TÌM HIỂU CHI TIẾT VỀ FUNCTIONAL PARADIGM Giới thiệu tổng quan Ví dụ về Functional paradigm 10 Đặc điểm 10 Ưu điểm 11 Tại nên sử dụng Functional Paradigm? 11 Nhược điểm .11 TÀI LIỆU THAM KHẢO 12 IT3040 – Kỹ thuật lập trình 20211 GIỚI THIỆU VỀ CÁC MÔ THỨC LẬP TRÌNH PHỔ BIẾN 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 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 hàm toán học (function), tránh việc thay đổi giá trị liệu Nó có nhiều lợi ích : khới xử lý độc lập dễ tái sử dụng, thuận lợi cho việc thay đổi logic 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 là biểu diễn một biểu thức Giải thuật thực theo từng bước Giá trị trả là không thể biến đổi Không thể thay đổi cấu trúc liệu giá trị có thể chép thành phần tạo nên giá trị Ngun lý và ý tưởng: Tốn học và lý thút 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 tốn mợt biểu thức Hàm là lớp giá trị đầu tiên Hàm là giá trị hoàn chỉnh, tương tự số, danh sách Thích hợp với tính tốn theo u cầu Tính tốn bằng cách gọi chức Mở khả mới Logical paradigm (Lập trình hướng logic) - Logical paradigm là một mẫu hình lập trình dựa logic tốn mới quan hệ và suy luận Các chương trình được viết Ngôn ngữ lập trình logic là tập hợp câu logic, thể sự thật và luật mợt vài vùng vấn đề nào Cùng với 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 bao gồm Prolog và Datalog - Trong lập trình logic, ta có thể sử dụng vị từ để định nghĩa khái niệm tất cả môn khoa học khác Lập trình hướng logic dựa tiên đề, quy luật suy diễn và truy vấn - Ví dụ định nghĩa số nguyên tố: Số nguyên tố N là một số nguyên lớn 1, chia hết cho và IT3040 – Kỹ tḥt lập trình 20211 Để 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ỏ và là sớ ngun tớ nhỏ nhất Dấu hiệu này có thể mơ tả bằng vị từ sau: + là một số nguyên tố + N là một số nguyên tố nếu N > 0, M là sớ ngun tớ nào đó, M < N và N không chia hết cho M - Khi mơ tả bài tốn dưới dạng logic vị từ, ta có thể u cầu hệ thớng tìm kiếm lời giải liên quan đến khai báo Bài tốn cần giải được xem là “mục tiêu” mà hệ thống phải chứng minh sở tri thức đã được khai báo - Như thế, toàn bộ ký hiệu ngôn ngữ lập trình suy 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 là mợt “đích” và cớ chứng minh “đích” bằng cách tạo suy diễn sở tri thức đã khai báo - Mợt ngơn ngữ logic có thể được dùng giai đoạn đặc tả yêu cầu 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 khái niệm và định lý bộ môn khoa học 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 yếu tố chương trình bằng đồ họa thay vì định chúng bằng văn bản Một VPL cho phép lập trình với biểu thức trực quan, sắp xếp khơng gian kí hiệu văn bản và đồ họa, được sử dụng làm thành phần cú pháp kí hiệu phụ - Ví dụ: Nhiều VPL (như lập trình dataflow, sơ đồ) được dựa ý tưởng “Hộp và mũi tên” Trong hợp đớ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 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 ứ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 lúc thực 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 gọi một lệnh từ một ứng dụng khác chạy song song lúc IT3040 – Kỹ thuật lập trình 20211 Người lập trình trực tiếp tạo khung giao diện (interface), ứng dụng thông qua thao tác màn hình dựa vào đối tượng (ojbect) hộp hội thoại nút điều khiển (control button), đới tượng này mang tḥc tính (properties) riêng biệt như: màu sắc, Font chữ mà ta cần chọn lựa một danh sách cho sẵn Khi dùng ngôn ngữ lập trình trực quan ta rất phải tự viết lệnh, tổ chức chương trình một cách rắc rối mà cần khai báo việc gì cần làm một tình huống xuất Máy tính dựa vào phần thiết kế và khai báo lập trình viên để tự động tạo lập chương trình Parallel paradigm (Lập trình song song) - Tính tốn song song là việc chia một công việc thành công việc nhỏ và cho công việc này thực đồng thời với bởi 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 cơng việc x́ng Việc lập trình để tách 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 bộ vi xử lý tăng lên gấp đôi sau 24 tháng.” Gordon Moore - sáng lập viên tập đoàn Intel Cùng với định luật Moore, máy tính đã được trang bị 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 lập trình viên phải tận dụng được hết nhân bộ vi xử lý Vì vậy, thay vì lập trình tuần tự trước sử dụng một nhân bộ vi xử lý thì người lập trình viên ngày phải dùng kỹ thuật lập trình song song để tận dụng hiệu suất 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 mợt q trình “song song hóa”, biến đổi chương trình tuần tự thành chương trình song song có khả tận dụng tới đa sức mạnh hệ thớng - Q trình song song hóa gồm giai đoạn bước chính: Phân chia chương trình thành cơng việc Phân tích sự phụ tḥc Định thời 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 dòng CPU đa nhân ( core i3, core i5, core i7,…) IT3040 – Kỹ thuật lập trình 20211 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 tốn mợt sớ tính tốn được thự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 bắt đầu tiếp theo) Đây là một tḥc tính mợt hệ thớng, có thể là mợt chương trình riêng lẻ, mợt máy tính mợt mạng và có mợt điểm thực thi riêng luồng điều khiển cho tính tốn (quy trình) Mợt hệ thớng đồng thời là mợt hệ thớng mợt tính tốn có thể tiến lên mà khơng cần chờ tất cả tính tốn khác hoàn thành - Lập trình tương tranh là một kỹ thuật quan trọng và cũng là mợt thách thức Mợt mặt, đem lại khả sử dụng hiệu quả cho hệ thống song song và phân tán Mặt khác, rủi ro việc tương tác tiến trình thực đồng thời có thể gây lỗi phần mềm không dễ dàng để tìm - Đặc điểm: Người dùng có thể tương tác với ứng dụng tiến trình thực thi Những tiến trình chạy thời gian dài làm trì hoãn tiến trình ngắn Các chương trình phức tạp được thực tốt 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 đáp ứng được để tiếp tục xử lý Distributed paradigm (Lập trình phân tán) - Lập trình phân tán là mợt dạng lập trình song song (tính tốn song song) Lập trình song song tạo mối liên hệ máy tính và đơn vị tính tố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 tốn có thể đặt rất gần tách rời Khi đơn vị tính tố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, đơn vị tính tốn thường rất khác nhau, cũng sự khác hệ điều hành và thiết lập mạng máy tính Những ́u tớ khiến cho việc lập trình tính tốn 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ó khái niệm chính: peer to peer và client server peer to peer là lập trình ngang hàng 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 - cũng là mô hình chúng ta gặp nhiều thực tế … - Có thể chia lập trình mạng thành cấp độ, cứ theo mức độ thân thiện với developer và khả triển khai: IT3040 – Kỹ thuật lập trình 20211 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 mạng, ứng dụng này thường gặp ứng dụng mạng cỡ nhỏ (Ví dụ: máy tính, mạng LAN ) Mức cao 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 server và trả về, gọi hàm và truyền liệu thông qua proxy đối tượng trả từ server (vd: RMI Java hay Remoting trên.NET ), mô hình này thường gặp ứng dụng mạng cỡ trung bình và lớn, đòi hỏi tính performance cao (vd: ứ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 dịch vụ chat, game online ), ưu điểm mơ hình này là tính performance cao, bảo mật, nhược điểm là tính đa (multiplatform) và tính khả chuyển chưa cao (server và client phải 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 web, điển hình nhất ta có thể thấy là web application và web service, mới nhất có cơng nghệ WCF M$ (tổng hợp tất cả 1) mô hình này cho phép triển khai diện rộng, phục vụ lượng khách hàng lớn cũng có nhược điểm là tính performance chưa cao, bù lai, có khả 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 ứng dụng loại này ứng dụng được cung cấp từ một nhà cung cấp nào (Ví dụ: sớ liệu chứng khốn, thời tiết …) 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 lập trình hướng đới tượng (OOP), thêm vào tiền đề giúp cho chúng ta có thể mơ hình hóa bài toán bằng khái niệm dịch vụ (Service), mà được cung cấp và sử dụng bởi đố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 thực bởi bất kì thành phần (component) nào, cũng có thể được cung cấp bởi thành phần nào, dựa một hợp đồng 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 bài toán lập trình có thể được xem hợp đen, chúng được triền khai một cách độc lập và giao tiếp thông qua hợp đồng - Mô hình client – server truyền thống không được định nghĩa trước hợp đồng công cộng (public contract) client và server Việc thực client và server cũng không thể đợc lập Mợt client có thể kết nối hay giao tiếp với một client nhất Trong mơ hình SOP thì có sự khác biệt, mợt IT3040 – Kỹ thuật lập trình 20211 client không bị bó ḅ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 client và server - Các đặc trưng SOP: Tính liên kết (conjunctive): Khả sử dụng kết hợp dịch vụ theo khác với cách thức đã tạo chúng Nó hàm ý rằng dịch vụ đã tạo interface mà chúng ta có thể dễ dàng nhận Khả triển khai (deployable): Khả triền khai sử dụng lại thành phần bất kì môi trường nào Điều này đòi hỏi sự độc lập môi trường bao gồm sự độc lập vận tải (transport), sự độc lập tảng (platform) và sự độc lập ngữ cảnh Tính lưu đợng (mobile): Khả di chủn mã xung quanh mạng Nó được sử dụng để di chuyển proxy, giao diện người dùng và dịch vụ di đợng Tính sẵn sàng (available): Là mợt tiền đề quan trọng lập trình hướng dịch vụ, nghĩa là mạng lưới nguồn tài nguyên dư thừa đảm bảo sự sẵn sàng cao cho SOP Đây cũng là mục tiêu SOP để xử lý lỗi xảy tính tốn phân bớ Sự bảo mật (security): Những khái niệm mã di động và mạng lưới dịch vụ có khả khám phá đã đưa đến thách thức mặt bảo mật Trong SOP cho phép giới hạn sử dụng dịch vụ rợng hơn, khơng thể thành cơng nếu thiếu việc bảo vệ dịch vụ trước việc sử dụng không đúng đắn IT3040 – Kỹ thuật lập trình 20211 TÌM HIỂU CHI TIẾT VỀ FUNCTIONAL PARADIGM 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 là mợt mơ hình lập trình xem việc tính toán là sự đánh giá hàm toán học và tránh sử dụng trạng thái và 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 ba paradigm lập trì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 có Fortran Sau đó, LISP đời năm 1958, mợt năm trước có COBOL Cả Fortran và COBOL là ngôn ngữ imperative (hay còn gọi là procedural) Chúng đặc biệt thành cơng đượ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ị suốt 30 đầu kỉ nguyên thông tin Vào năm 1970, Object-Oriented paradigm bắt đầu phát triển Cùng với sự trưởng thành 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 - FP xem chương trình là một tập hợp hàm nhận vào đối số và trả giá trị Không giống Imperative, FP không tạo hiệu ứng phụ và sử dụng đệ qui thay cho vòng lặp Hàm FP rất giớng với hàm tốn học vì khơng làm thay đổi trạng thái chương trình Một đại lượng được gán giá trị thì khơng thay đổi giá trị Hàm không sửa đổi giá trị đối số được truyền vào, và giá trị hàm trả hoàn toàn là một giá trị mới - Về mặt kĩ thuật cài đặt bên dưới, 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 Để tạo kết quả trả về, hàm chép giá trị chỉnh sửa bản đó, khơng làm ảnh hưởng đến giá trị ban đầu, trả bản đã được chỉnh sửa Các đại lượng không còn được hàm nào tham chiếu đến tự đợng bị hủy để giải phóng bợ nhớ (đây là ý tưởng bộ thu gom rác 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 vấn đề tính tốn Tuy nhiê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 paradigm khác để xử lý thao tác tính tốn thơng dụng 10 IT3040 – Kỹ thuật lập trình 20211 Ví dụ về Functional paradigm Tính ướng chung lớn nhất số nguyên a và b #include int GCD(int a, int b){ if (b == 0) return a; else return GCD(b, a % b); } int main(){ int a = 32, b = 12; scanf(“%d”, GCD(a, b)); return 0; } Trong chương trình trên, thứ tự thực tính tốn chương trình: + Bước 1: GCD(32, 12) + Bước 2: GCD(12, 8) + Bước 3: GCD(8, 4) + Bước 4: GCD(4, 0) + Bước 5: Ước chung lớn nhất 32 và 12 là Đặ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 là biểu diễn một biểu thức - Giải thuật thực theo từng bước - Giá trị trả là không thể biến đổi - Không thể thay đổi cấu trúc liệu giá trị có thể chép thành phần tạo nên giá trị - Nguyên lý và ý tưởng: Toán học và lý thuyết 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 tốn mợt biểu thức - Hàm là lớp giá trị đầu tiên Hàm là giá trị hoàn chỉnh, tương tự số, danh sách 11 IT3040 – Kỹ thuật lập trình 20211 - Thích hợp với tính tốn theo u cầu Tính tốn bằng cách gọi chức - Mở khả mới Ưu điểm - Hướng đến tính kết hợp hàm để tới đa hóa khả tái sử dụng chương trình - Thay vì thực tuần tự theo từng bước với biến để lưu trạng thái lập trình thủ tục thì FP chú trọng đến thực thi luồng chương trình thông qua việc kết hợp hàm bậc cao (high order function) - Các tḥt tốn FP có thể được diễn tả mợt cách ngắn gọn và sáng Tại nên sử dụng Functional Paradigm? - Nguyên tắc thứ nhất Functional Programming là: nào đã khai báo một lần thì mãi mãi vậy, không thay đổi Các biến đối tượng kịch bản Functional Programming nếu có thì phải immutable - Với Pure Function, cung cấp sự tự tin không thay đổi mọi thứ bên ngoài phạm vi Đây là nguyên tắc thứ hai Functional Programming: tất cả hàm phải là pure function, không bị side effect ( kết quả trả bị ảnh hưởng bởi tác nhân bên ngoài hàm) Nó khơng đọc, nhận bất kỳ gì nào ở bên ngoài hàm ghi bất kỳ gì ở bên ngoài hàm - Dễ kiểm tra, bởi vì khơng phụ tḥc vào trạng thái ứng dụng và xác minh kết quả cũng dễ dàng - Nó làm cho code dễ đọc dễ hiểu Nhược điểm - Để viết một Pure Function đứng một mình thì đơn giản, kết hợp chúng vào mợt chương trình lớn thì rất khó: Tất cả hàm phải tuân theo pattern giống nhau, nếu không lỗi rất dễ xảy - Bắt đầu với functional paradigm, ta phải làm quen và nắm vững recursive (đệ quy), thay vì for, while sử dụng phổ biếng OOP Chính vì thế việc tới ưu bợ nhớ sử dụng đệ quy là điểm cần lưu ý Nhưng điều này có thể giảm đáng kể bằng cách sử dụng tail recursion 12 IT3040 – Kỹ thuật lập trình 20211 TÀI LIỆU THAM KHẢO Bài giảng học phần Kỹ thuật lập trình bộ môn và viện Công nghệ thông tin & Truyền thông http:// wikipedia.com https://topdev.vn/ Các video, tài liệu kỹ thuật lập trình và mô thức lập trình Youtube 13