Kĩ thuật lập trình - Tổng quan Lập trình

pdf 55 trang vanle 2660
Bạn đang xem 20 trang mẫu của tài liệu "Kĩ thuật lập trình - Tổng quan Lập trình", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfki_thuat_lap_trinh_tong_quan_lap_trinh.pdf

Nội dung text: Kĩ thuật lập trình - Tổng quan Lập trình

  1. Tổng quan Lập trình v 1.0 - 09/2012 Lê Viết Mẫn - lvman@hce.edu.vn 1 Tổng quan lập trình Thursday, September 5, 13
  2. Nội dung 1. Lập trình là gì ? 2. C# và .NET Lê Viết Mẫn - lvman@hce.edu.vn 2 Tổng quan lập trình Thursday, September 5, 13
  3. Lập trình là gì ? Lê Viết Mẫn - lvman@hce.edu.vn 3 Tổng quan lập trình Thursday, September 5, 13
  4. Máy tính là tập hợp các dây dẫn và vi mạch được tổ chức sao cho có thể thực hiện nhanh chóng các phép toán đơn giản Lê Viết Mẫn - lvman@hce.edu.vn 4 Tổng quan lập trình Thursday, September 5, 13
  5. Vì sao máy tính lại có khả năng lớn như hiện nay ? Điều gì giúp một hộp linh kiện điện tử thành một công cụ mạnh mẽ như vậy ? Lê Viết Mẫn - lvman@hce.edu.vn 5 Tổng quan lập trình Thursday, September 5, 13
  6. câu trả lời là nhờ có Lập trình Lê Viết Mẫn - lvman@hce.edu.vn 6 Tổng quan lập trình Thursday, September 5, 13
  7. Lập trình là Chat với máy tính Sai khiến máy tính thực hiện những thao tác mong muốn Cần hiểu/nắm vững ngôn ngữ của máy tính Lê Viết Mẫn - lvman@hce.edu.vn 7 Tổng quan lập trình Thursday, September 5, 13
  8. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung Lê Viết Mẫn - lvman@hce.edu.vn 8 Tổng quan lập trình Thursday, September 5, 13
  9. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung step forward turn right turn left Lê Viết Mẫn - lvman@hce.edu.vn 9 Tổng quan lập trình Thursday, September 5, 13
  10. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung step forward turn right step forward step forward turn left turn right step forward turn left turn left step forward turn right step forward Lê Viết Mẫn - lvman@hce.edu.vn 10 Tổng quan lập trình Thursday, September 5, 13
  11. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung step forward turn right turn left Lê Viết Mẫn - lvman@hce.edu.vn 11 Tổng quan lập trình Thursday, September 5, 13
  12. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung step forward step forward turn right step forward turn left step forward Lê Viết Mẫn - lvman@hce.edu.vn 12 Tổng quan lập trình Thursday, September 5, 13
  13. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung Phải giải quyết bài toán với tất cả các trường hợp có thể (trường hợp tổng quát) Phải tìm ra thuật toán của bài toán Lê Viết Mẫn - lvman@hce.edu.vn 13 Tổng quan lập trình Thursday, September 5, 13
  14. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung step forward turn right turn left facing a wall ? outside the maze ? Lê Viết Mẫn - lvman@hce.edu.vn 14 Tổng quan lập trình Thursday, September 5, 13
  15. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung step forward turn right turn left facing a wall ? outside the maze ? Làm thế nào để khái quát hoá chương trình ? Chia nhỏ chương trình thành những thành phần cơ sở / trường hợp riêng Lê Viết Mẫn - lvman@hce.edu.vn 15 Tổng quan lập trình Thursday, September 5, 13
  16. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung step forward turn right Luôn để chuột đi sát bên turn left phải các bức tường của facing a wall ? outside the maze ? mê cung Lê Viết Mẫn - lvman@hce.edu.vn 16 Tổng quan lập trình Thursday, September 5, 13
  17. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung step forward turn right turn left facing a wall ? outside the maze ? Lê Viết Mẫn - lvman@hce.edu.vn 17 Tổng quan lập trình Thursday, September 5, 13
  18. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung đi sát bên phải bức tường Lê Viết Mẫn - lvman@hce.edu.vn 18 Tổng quan lập trình Thursday, September 5, 13
  19. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung đi sát bên phải bức tường turn right if facing a wall then turn left and if facing a wall then turn left and if facing a wall then Lê Viết Mẫn - lvman@hce.edu.vn 19 Tổng quan lập trình Thursday, September 5, 13
  20. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung đi sát bên phải bức tường turn right while (facing a wall?) { turn left } Lê Viết Mẫn - lvman@hce.edu.vn 20 Tổng quan lập trình Thursday, September 5, 13
  21. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung đi sát bên phải bức tường turn right while (facing a wall?) { turn left } đối diện không phải là bức tường, có thể bước tới Lê Viết Mẫn - lvman@hce.edu.vn 21 Tổng quan lập trình Thursday, September 5, 13
  22. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung turn right while (facing a wall?) { turn left } step forward if (not outside the maze?){ turn right while (facing a wall?) { turn left } step forward if (not outside the maze?){ } } Lê Viết Mẫn - lvman@hce.edu.vn 22 Tổng quan lập trình Thursday, September 5, 13
  23. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung while (not outside the maze?){ turn right while (facing a wall?) { turn left } step forward } Lê Viết Mẫn - lvman@hce.edu.vn 23 Tổng quan lập trình Thursday, September 5, 13
  24. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung step forward while (not outside the maze?){ turn right while (facing a wall?) { turn left } step forward } Lê Viết Mẫn - lvman@hce.edu.vn 24 Tổng quan lập trình Thursday, September 5, 13
  25. Chú chuột trong mê cung Hãy đưa ra các lệnh chỉ dẫn sao cho chú chuột có thể đi qua một mê cung Lê Viết Mẫn - lvman@hce.edu.vn 25 Tổng quan lập trình Thursday, September 5, 13
  26. Máy tính và ngôn ngữ lập trình • Máy tính chỉ hiểu được và hành động hay trả lời đối với một số lượng giới hạn các lệnh được dự đoán trước - gọi là tập lệnh • Viết chương trình nghĩa là thể hiện việc giải quyết bài toán dưới dạng thuật toán bằng các lệnh có trong tập lệnh • Kết hợp một cách thông minh các lệnh đơn giản đó thì có thể thực hiện được các công việc rất khó khăn và phức tạp • Quá trình viết một chương trình : • Phải biết các lệnh có sẵn • Hiểu bài toán để lập một thuật toán giải • Thể hiện thuật toán dưới dạng các lệnh máy • Sử dụng ngôn ngữ lập trình bậc cao - máy tính sẽ chuyển ngôn ngữ bậc cao thành các lệnh máy để chương trình có thể chạy được Lê Viết Mẫn - lvman@hce.edu.vn 26 Tổng quan lập trình Thursday, September 5, 13
  27. Ngôn ngữ lập trình Lê Viết Mẫn - lvman@hce.edu.vn 27 Tổng quan lập trình Thursday, September 5, 13
  28. Luôn có những đánh đổi Ngôn ngữ cấp cao Java, C#, Objective C gần với bài toán phụ thuộc vào hệ thống Fortran, COBOL, C++ C/C++ Ngôn ngữ cấp thấp gần với hệ thống Assembler không ánh xạ đến bài toán Machine Lê Viết Mẫn - lvman@hce.edu.vn 28 Tổng quan lập trình Thursday, September 5, 13
  29. Các ngôn ngữ lập trình FORTRAN ALGOL(58) ALGOL(60) CPL BCPL B Objective C C C++ Java C# Tham khảo Lịch sử ngôn ngữ lập trình, Lê Viết Mẫn - lvman@hce.edu.vn 29 Tổng quan lập trình Thursday, September 5, 13
  30. Phương pháp lập trình Lê Viết Mẫn - lvman@hce.edu.vn 30 Tổng quan lập trình Thursday, September 5, 13
  31. Hướng thủ tục • Tập trung vào cách giải quyết vấn đề (ví dụ : thuật toán) • Chia một bài toán lớn ra làm nhiều bài toán nhỏ • Các thủ tục hoặc chương trình con • Ghép nối các đoạn chương trình xử lý các bài toán nhỏ thành một chương trình • Hai kiểu dữ liệu (dữ liệu được định nghĩa hai vùng khác nhau) • Dữ liệu địa phương được định nghĩa ở bên trong và chỉ có thể truy xuất bên trong một thủ tục • Dữ liệu toàn cục được định nghĩa bên ngoài và có thể truy xuất ở bất kỳ đâu trong chương trình • Dữ liệu toàn cục dẫn đến hiện tượng ghép nối thủ tục Lê Viết Mẫn - lvman@hce.edu.vn 31 Tổng quan lập trình Thursday, September 5, 13
  32. Hướng dữ liệu • Cố gắng đầu tiên để cải tiến mô hình hướng thủ tục • Luồng dữ liệu • Nối dữ liệu đầu vào với dữ liệu đầu ra • Thiết kế cấu trúc dữ liệu trước • Thiết kế tiến trình / hàm sau • Che dấu dữ liệu • Đóng gói dữ liệu và các thủ tục xử lý dữ liệu cùng trong một module • Dữ liệu vẫn trong miền toàn cục nhưng chỉ cho phép truy xuất thông qua các hàm của module • Abstract Data Type (ADT) • Người lập trình tạo ra kiểu dữ liệu • struct trong ngôn ngữ C# Lê Viết Mẫn - lvman@hce.edu.vn 32 Tổng quan lập trình Thursday, September 5, 13
  33. Hướng đối tượng • “Object-oriented modeling and design is a new way of thinking about problems using models organized around real-world concepts. The fundamental construct is the object, which combines both data structure and behavior in a single entity.” James Rumbaugh, Object-Oriented Modeling and Design • Các đặc tính của mô hình thủ tục và dữ liệu • Sự tổ chức tự nhiên cho dữ liệu và chức năng • Các đối tượng đóng gói dữ liệu và chức năng với nhau • Hỗ trợ ADT : nhiều đối tượng của một kiểu có thể được tạo ra (class là một kiểu đặc biệt hay ADT) • Hỗ trợ che dấu dữ liệu : truy xuất dữ liệu được kiểm soát thông qua các từ khóa Lê Viết Mẫn - lvman@hce.edu.vn 33 Tổng quan lập trình Thursday, September 5, 13
  34. Chương trình và thuật toán • Chương trình là một dãy các lệnh mà máy tính điện tử cần thực hiện theo một thứ tự xác định để giải một bài toán nào đó • Thuật toán là một tập hữu hạn các bước công việc cần được thực hiện theo một trật tự nhất định để giải bài toán đó • Để viết chương trình, chúng ta cần nắm : • Ngữ pháp của một ngôn ngữ lập trình (C#) • Phải thông thạo các quy tắc về ngữ pháp • Cách trình bày chương trình • Tổ chức chương trình sáng sủa • Thiết kế và cài đặt một thuật toán • Khó khăn nhất và hấp dẫn nhất • Phải học, nhớ nhiều kỹ thuật và biết kết hợp các phương án thực hiện công việc Lê Viết Mẫn - lvman@hce.edu.vn 34 Tổng quan lập trình Thursday, September 5, 13
  35. Các bước trong lập trình Trình soạn thảo Các lỗi biên dịch và cảnh Đầu báo Lỗi ra Trình biên dịch thi không hành chính xác Nạp và chạy Lê Viết Mẫn - lvman@hce.edu.vn 35 Tổng quan lập trình Thursday, September 5, 13
  36. Nền tảng .NET Lê Viết Mẫn - lvman@hce.edu.vn 36 Tổng quan lập trình Thursday, September 5, 13
  37. Trước khi có .NET • C/C++ • C cung cấp khả năng điều khiển xâu vào hệ thống • C++ cung cấp những lợi thế của lập trình hướng đối tượng • tự quản lý bộ nhớ, cú pháp không chặt chẽ, phép tính con trỏ dễ nhầm lẫn • Visual Basic 6.0 • cho phép dễ dàng xây dựng các giao diện phức tạp, truy xuất cơ sở dữ liệu mà không đòi hỏi nhiều công sức • không hoàn toàn hướng đối tượng, không hỗ trợ đa luồng • Java • độc lập nền tảng, cung cấp đầy đủ các kiểu dữ liệu và hàm chức năng cho tất cả các loại ứng dụng • ngôn ngữ thừa kế từ C++, những đã loại bỏ những cú pháp dễ gây nhập nhằng • không hỗ trợ khả năng liên thông ngôn ngữ Lê Viết Mẫn - lvman@hce.edu.vn 37 Tổng quan lập trình Thursday, September 5, 13
  38. Giải pháp .NET • Một nền tảng phần mềm cho desktop và web • Tương tác ngược với các công nghệ trước đây • Hỗ trợ nhiều ngôn ngữ lập trình - C#, Visual Basic, F#, J#, • Một động cơ thi hành chung (common runtime engine) được chia sẻ cho tất cả các ngôn ngữ chấp nhận .NET (.NET-aware languages) • Tích hợp (integration) hoàn toàn và với tất cả các ngôn ngữ • Một thư viện lớp cơ sở (base class library) đầy đủ • Lập trình đơn giản cho các trang web động • Mô hình phát triển đơn giản hoá • Không còn phải đăng ký chương trình với hệ thống registry • Cho phép nhiều phiên bản của một dll tồn tại trong 1 máy Lê Viết Mẫn - lvman@hce.edu.vn 38 Tổng quan lập trình Thursday, September 5, 13
  39. Kiến trúc nền tảng .NET Lê Viết Mẫn - lvman@hce.edu.vn 39 Tổng quan lập trình Thursday, September 5, 13
  40. Common Language Runtime Lê Viết Mẫn - lvman@hce.edu.vn 40 Tổng quan lập trình Thursday, September 5, 13
  41. .NET assembly • Là đơn vị nhỏ nhất (.exe, .dll) để phân phối, đánh phiên bản (versioning), tải tự động • Bao gồm : manifest, metadata, mã IL/CIL • Metadata được sử dụng để : tải tự động, đánh phiên bản và phản chiếu (reflection) Lê Viết Mẫn - lvman@hce.edu.vn 41 Tổng quan lập trình Thursday, September 5, 13
  42. Common Intermediate Language • Cho phép xây dựng ứng dụng với ngôn ngữ bạn quen thuộc • Một ngôn ngữ chung cho nhiều hệ điều hành khác nhau C:\>ildasm Hello.exe .assembly Hello {} .method public static void Main() cil managed { .entrypoint .maxstack 1 ldstr "Hello, world!" call void [mscorlib]System.Console::WriteLine(string) ret } Lê Viết Mẫn - lvman@hce.edu.vn 42 Tổng quan lập trình Thursday, September 5, 13
  43. Lê Viết Mẫn - lvman@hce.edu.vn 43 Tổng quan lập trình Thursday, September 5, 13
  44. JIT/Jitter (Just-in-time) Compiler • Môi trường thực thi .NET cung cấp một trình biên dịch JIT cho nền tảng bên dưới • Tại mỗi thời điểm, JIT sẽ biên dịch phần được triệu gọi của mã nguồn và lưu mã máy đã được biên dịch vào lại assembly thay cho mã CIL Lê Viết Mẫn - lvman@hce.edu.vn 44 Tổng quan lập trình Thursday, September 5, 13
  45. Diễn dịch & biên dịch • Diễn dịch (Interpreter) là quá trình đọc mã nguồn và trả ra kết quả của việc thực thi mã nguồn đó • Phân tích lặp lại ở một số câu lệnh (vòng lặp, hàm) • PERL, Python, HTML, Javascript, • Biên dịch (Compiler) là quá trình dịch một chương trình từ ngôn ngữ nguồn sang ngôn ngữ đích • Thời lượng biên dịch ảnh hưởng đến hiệu năng thực thi • Cần nhiều tối ưu • C, C++, Java, COBOL, Lê Viết Mẫn - lvman@hce.edu.vn 45 Tổng quan lập trình Thursday, September 5, 13
  46. Hướng tiếp cận lai Ví dụ nổi tiếng là Java • Biên dịch mã nguồn Java sang byte codes - Java virtual machine language (tập tin .class) • Thực thi • Diễn dịch trực tiếp byte codes, hoặc • Biên dịch một số hoặc tất cả ra mã máy (native code) • Just-in-time compiler (JIT) Lê Viết Mẫn - lvman@hce.edu.vn 46 Tổng quan lập trình Thursday, September 5, 13
  47. .NET Base Class Library • .NET cung cấp một thư viện lớp đầy đủ • 200 namespace với 4500 kiểu dữ liệu • Hỗ trợ những công nghệ quan trọng • XML • mã hoá (cryptography) • phản chiếu (reflection) • đa luồng (multi-threading) • • Cơ bản thống nhất cho các ngôn ngữ lập trình khác nhau Lê Viết Mẫn - lvman@hce.edu.vn 47 Tổng quan lập trình Thursday, September 5, 13
  48. .NET Base Class Library Lê Viết Mẫn - lvman@hce.edu.vn 48 Tổng quan lập trình Thursday, September 5, 13
  49. Common Type System • Đặc tả hình thức các kiểu phải được định nghĩa để được sử dụng trên CLR • Tập các kiểu dữ liệu chung : • Bất kỳ ngôn ngữ nào chạy trên CLR đều nên cài đặt • Không có cú pháp xác định • Các ngôn ngữ thường định nghĩa các kiểu thay thế CTS C# System.Int32 int System.Int64 long System.String string Lê Viết Mẫn - lvman@hce.edu.vn 49 Tổng quan lập trình Thursday, September 5, 13
  50. Common Language Specification • Một tập các đặc tả mà các trình biên dịch phải thoả mãn, nếu chúng muốn sản phẩm của chúng là hoạt động tốt trong thế giới .NET Lê Viết Mẫn - lvman@hce.edu.vn 50 Tổng quan lập trình Thursday, September 5, 13
  51. C# Lê Viết Mẫn - lvman@hce.edu.vn 51 Tổng quan lập trình Thursday, September 5, 13
  52. Các ngôn ngữ .NET • Hơn 20 ngôn ngữ chấp nhận .NET • Hầu hết được cung cấp bởi bên thứ ba (3rd parties) • Các ngôn ngữ .NET được cung cấp bởi Microsoft • C++ • Visual Basic • C# Danh sách các ngôn ngữ lập trình .NET, Lê Viết Mẫn - lvman@hce.edu.vn 52 Tổng quan lập trình Thursday, September 5, 13
  53. C# • C# là ngôn ngữ hướng đối tượng đơn giản, trong sáng, chỉ gồm ~80 từ khoá và hơn 10 kiểu dữ liệu cơ sở • Khá giống Java • 70% Java, 10% C++, 5% Visual Basic, 15% new Giống Java Giống C++ • Object-orientation (single inheritance) • Struct types • Interfaces • Operator oveloading • Generics • Pointer arithmetic in unsafe • Exceptions • Some syntactic details • Threads • Namespaces • Strong typing • Garbage collections • Reflection • Dynamic loading of code • Lê Viết Mẫn - lvman@hce.edu.vn 53 Tổng quan lập trình Thursday, September 5, 13
  54. Các đặc điểm của C# • Không yêu cầu con trỏ • Quản lý bộ nhớ tự động thông qua trình gom rác (Garbage Collector) • Cấu trúc cú pháp hình thức cho kiểu dữ liệu liệt kê (enumeration), cấu trúc (structure) và thuộc tính lớp (class properties) • Cho phép chồng hàm cho các kiểu dữ liệu tự tạo • Sử dụng cú pháp tương tự khuôn mẫu trong C++ để lập trình các generic • Hỗ trợ hoàn toàn cho các kỹ thuật lập trình dựa trên giao diện Lê Viết Mẫn - lvman@hce.edu.vn 54 Tổng quan lập trình Thursday, September 5, 13
  55. Cảm ơn sự chú ý Câu hỏi ? Lê Viết Mẫn - lvman@hce.edu.vn 55 Tổng quan lập trình Thursday, September 5, 13