Bài giảng Kỹ thuật lập trình - Chương I: Những khái niệm cơ bản trong kỹ thuật lập trình - Vũ Thị Hương Giang

1. Hoạt động của chương trình máy tính • Chương trình máy tính được nạp vào bộ nhớ chính (primary memory) như là một tập các lệnh viết bằng ngôn ngữ mà máy tính hiểu được, tức là một dãy tuần tự các số nhị phân (binary digits). • Tại bất cứ một thời điểm nào, máy tính sẽ ở một trạng thái (state) nào đó. • Đặc điểm cơ bản của trạng thái là con trỏ lệnh (instruction pointer) trỏ tới lệnh tiếp theo để thực hiện. • Thứ tự thực hiện các nhóm lệnh được gọi là luồng điều khiển (flow of control).

pdf27 trang | Chia sẻ: thanhle95 | Lượt xem: 400 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Bài giảng Kỹ thuật lập trình - Chương I: Những khái niệm cơ bản trong kỹ thuật lập trình - Vũ Thị Hương Giang, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
2/6/2012 1 CHƢƠNG I. NHỮNG KHÁI NIỆM CƠ BẢN TRONG KỸ THUẬT LẬP TRÌNH I. Tổng quan về lập trình II. Chu trình phát triển chương trình III. Các mô thức lập trình I. TỔNG QUAN VỀ LẬP TRÌNH I. Tổng quan về lập trình • Với mỗi bài toán, làm thế nào để: – Thiết kế giải thuật nhằm giải quyết bài toán đó – Cài đặt giải thuật bằng một chương trình máy tính 2/6/2012 2 I. Tổng quan về lập trình • Chương trình máy tính (computer program): Tập hợp các lệnh chỉ dẫn cho máy tính thực hiện nhiệm vụ • Ngôn ngữ lập trình (programming language): Dùng để viết các lệnh, chỉ thị I. TỔNG QUAN VỀ LẬP TRÌNH 1. Hoạt động của chương trình máy tính 2. Ngôn ngữ lập trình 1. Hoạt động của chương trình máy tính • Chương trình máy tính được nạp vào bộ nhớ chính (primary memory) như là một tập các lệnh viết bằng ngôn ngữ mà máy tính hiểu được, tức là một dãy tuần tự các số nhị phân (binary digits). • Tại bất cứ một thời điểm nào, máy tính sẽ ở một trạng thái (state) nào đó. • Đặc điểm cơ bản của trạng thái là con trỏ lệnh (instruction pointer) trỏ tới lệnh tiếp theo để thực hiện. • Thứ tự thực hiện các nhóm lệnh được gọi là luồng điều khiển (flow of control). 2/6/2012 3 1. Hoạt động của chương trình máy tính • Bắt đầu mỗi chu trình lệnh, CPU nhận lệnh từ bộ nhớ chính. – PC (Program Counter): thanh ghi giữ địa chỉ của lệnh sẽ được nhận – Lệnh được nạp vào thanh ghi lệnh IR (Instruction Register) • Sau khi lệnh được nhận vào, nội dung PC tự động tăng để trỏ sang lệnh kế tiếp 2. Ngôn ngữ lập trình (NNLT) • Một NNLT là 1 hệ thống các ký hiệu dùng để liên lạc, trao đổi với máy tính nhằm thực thi một nhiệm vụ tính toán. • Các thành phần căn bản của 1 NNLT: – Cú pháp (syntax): luật dùng để ghép các ký hiệu thành câu lệnh, thành chương trình hợp lệ về mặt cấu trúc – Ngữ nghĩa (semantic): luật dùng để ghép các ký hiệu thành câu lệnh, thành chương trình có ý nghĩa • Có rất nhiều NNLT, khoảng 1000 ngôn ngữ ( 60’s đã có hơn 700) – phần lớn là các ngôn ngữ hàn lâm, có mục đích riêng hay phạm vi ứng dụng hạn chế – Ngôn ngữ máy – Ngôn ngữ assembly – Các ngôn ngữ khác 2.1. Ngôn ngữ máy • Máy tính chỉ nhận các tín hiệu điện tử - có, không có - tương ứng với các dòng bits. • Một chương trình ở dạng đó gọi là mã máy (machine code). • Ban đầu chúng ta phải dùng machine code để viết chương trình:  Quá phức tạp, giải quyết các bài toán lớn là không tưởng 23fc 0000 0001 0000 0040 0cb9 0000 000a 0000 0040 6e0c 06b9 0000 0001 0000 0040 60e8 2/6/2012 4 2.2. Ngôn ngữ ASSEMBLY • Là bước đầu tiên của việc xây dựng cơ chế viết chương trình tiện lợi hơn – thông qua các ký hiệu, từ khóa và cả mã máy. • Tất nhiên, để chạy được các chương trình này thì phải chuyển thành thành machine code. • Vẫn còn phức tạp, cải thiện không đáng kể movl #0x1,n compare: cmpl #oxa,n cgt end_of_loop acddl #0x1,n bra compare end_of_loop: 2.3. Phân loại ngôn ngữ lập trình - Theo thời gian • 1940s: Ngôn ngữ máy tính hiểu được – Machine code • 1950s: Khai thác sức mạnh của máy tính – Assembler code, Fortran v.1 • 1960s: Tăng khả năng tính toán – Cobol, Lisp, Algol 60, Basic, PL/1 • 1970s: Giảm sự phụ thuộc vào máy, tăng tính đúng đắn của CT – Structured Programming, Modular Programming: Pascal, Algol 68 and C. • 1980s: Giảm sự phức tạp – Object-oriented, functional programming: Java • 1990s: Khai thác triệt để các tài nguyên – Parallel, distributed computing: occam • 2000s: Phát triển các mô hình tính toán mới – genetic programming languages, DNA computing, bio-computing, service-based computing • . 2.3. Phân loại ngôn ngữ lập trình - Theo mức độ trừu tượng High-level language Low-level language Machine-dependent Phụ thuộc phần cứng, chỉ chạy trên một loại máy tính Ví dụ ??? Machine-independent Thường không phụ thuộc phần cứng, có thể chạy trên nhiều loại máy tính khác nhau Ví dụ ???? Machine và assembly languages là ngôn ngữ bậc thấp High(er) level languages gần với ngôn ngữ con người hơn: Algol, Fortran, Pascal, Basic, Ada, C, 2/6/2012 5 2.3. Phân loại ngôn ngữ lập trình - Theo mức độ trừu tượng Level Instructions Memory handling Low level languages Dạng bits – giống các lệnh machine Truy cập và cấp phát trực tiếp bộ nhớ High level languages Dùng các biểu thức và các dòng điều khiển xác định Truy cập và cấp phát bộ nhớ qua các lệnh, toán tử - operators Very high level languages Hoàn toàn trừu tượng, độc lập phần cứng Che dấu hoàn toàn việc truy cập và tự động cấp phát bộ nhớ 2.3. Phân loại ngôn ngữ lập trình - Theo mục đích sử dụng • Các ngôn ngữ lập trình cấp cao hơn ngôn ngữ assembly và mã máy có thể được phân thành 2 nhóm: – Declarative languages: ngôn ngữ lập trình dạng tường thuật • Trả lời câu hỏi: Cần làm gì / Cần lưu trữ cái gì • Còn gọi là functional languages, logic languages – Non-declarative langues: ngôn ngữ lập trình dạng phi tường thuật • Trả lời câu hỏi: Làm như thế nào / Lưu trữ như thế nào • Còn gọi là imperative languages, procedural languages 2.4. Ngôn ngữ lập trình dạng mệnh lệnh Các ngôn ngữ thông dụng là BASIC, COBOL, PASCAL, C,C++ và JAVA Sử dụng hàng loạt các từ giống tiếng anh để viết các chỉ thị - instructions Còn gọi là third- generation language (3GL) Lập trình viên viết các chỉ thị hƣớng dẫn cho máy tính cai gì cần làm và làm nhƣ thế nào 2/6/2012 6 2.4. Ngôn ngữ lập trình dạng mệnh lệnh • Trình dịch (Compiler): chương trình thực hiện biên dịch toàn bộ chương trình nguồn thành mã máy trước khi thực hiện 2.4. Ngôn ngữ lập trình dạng mệnh lệnh • Trình thông dịch (Interpreter): – là chương trình dịch và thực hiện từng dòng lệnh của chương trình cùng lúc – Dịch từ ngôn ngữ này sang ngôn ngữ khác, không tạo ra chương trình dạng mã máy hay assembly 2.4. Ngôn ngữ lập trình dạng mệnh lệnh • BASIC – Được thiết kế để cho những người mới học, giúp họ tiếp cận một cách đơn giản NNLT – Beginner’s All-purpose Symbolic Instruction Code 2/6/2012 7 2.4. Ngôn ngữ lập trình dạng mệnh lệnh • COBOL – Dùng cho các ứng dụng kinh doanh, thương mại – Các lệnh giống tiếng Anh làm cho code dễ đọc, viết và chỉnh sửa – Common Business-Oriented Language 2.4. Ngôn ngữ lập trình dạng mệnh lệnh • C – Là NNLT rất mạnh, ban đầu được thiết kế để lập trình phần mềm hệ thống – Yêu cầu những kỹ năng lập trình chuyên nghiệp 2.5. Ngôn ngữ lập trình hướng đối tượng Dùng để hỗ trợ thiết kế HĐT (object-oriented design) Lợi ích cơ bản là khả năng tái sử dụng (reuse existing objects) Event-driven— Hướng sự kiện Kiểm tra để trả lời một tập các sự kiện C++ và Java là các NN hoàn toàn HĐT object-oriented languages Object là phần tử chứa đựng cả dữ liệu và các thao tác trên dữ liệu Event là hành động mà chương trình cần đáp ứng 2/6/2012 8 2.5. Ngôn ngữ lập trình hướng đối tượng • C++ – Chứa đựng các thành phần của C, loại bỏ những nhược điểm và thêm vào những tính năng mới để làm việc với object-oriented concepts – Được dùng để phát triển các Database và các ứng dụng Web 2.5. Ngôn ngữ lập trình hướng đối tượng • Java – Phát triển bởi Sun Microsystems – Giống C++ nhưng dùng trình dịch just-in-time (JIT) để chuyển source code thành machine code 2.5. Ngôn ngữ lập trình hướng đối tượng • Visual programming language LTV viết và phát triển chương trình trong các segments Visual programming environment (VPE) Cho phép developers kéo và thả các objects để xd programs Thường được dùng trong môi trường RAD (rapid application development) Đôi khi được gọi là fourth-generation language Cung cấp giao diện trực quan hoặc đồ họa để tạo source code 2/6/2012 9 2.5. Ngôn ngữ lập trình hướng đối tượng • Visual Studio .NET 2003, 2005 – Bước phát triển của visual programming languages và RAD tools – .NET là tập hợp các công nghệ cho phép program chạy trên Internet – Visual Basic .NET 2003-5 dùng để xây dưng các chương trình hướng đối tượng phức tạp Step 1. LTV thiết kế giao diện người dùng - user interface. Step 2. LTV gán các thuộc tính cho mỗi object trên form. Step 4. LTV kiểm tra application. Step 3. LTV viết code để xác định các action cần thực hiện đối với các sự kiện cần thiết. 2.5. Ngôn ngữ lập trình hướng đối tượng • Delphi – Là 1 công cụ lập trình trực quan mạnh – Hợp với những ứng dụng chuyên nghiệp và Web lớn 2.5. Ngôn ngữ lập trình hướng đối tượng • PowerBuilder – Một công cụ lập trình trực quan mạnh khác – Phù hợp với các ứng dụng Web-based hay các ứng dụng lớn HĐT - object-oriented applications 2/6/2012 10 2.6. Ngôn ngữ lập trình dạng tường thuật Nonprocedural Language LTV viết các lệnh giống tiếng anh hoac tương tác với môi trường trực quan để nhận được các dữ liệu từ files hay database Program Development Tools Các chương trình thân thiện với người sử dụng được thiết kế để trợ giúp cả LTV lẫn người sử dụng trong việc tạo chương trình 2.6. Ngôn ngữ lập trình dạng tường thuật • RPG (Report Program Generator) – Các ngôn ngữ LT phi thủ tục được dùng để tạo các báo cáo, thiết lập các thao tác tính toán và cập nhật files 2.6. Ngôn ngữ lập trình dạng tường thuật • NN thế hệ IV fourth-generation language (4GL) – Là các ngôn ngữ phi thủ tục cho phép truy cập dữ liệu trong csdl – NNLT 4GL thông dụng là SQL,Access, là các ngôn ngữ truy vấn . Cho phép users quản trị dữ liệu trong csdl quan hệ relational DBMS 2/6/2012 11 2.6. Ngôn ngữ lập trình dạng tường thuật • Application generator – Là chương trình tạo source code hoặc machine code từ các specification – Bao gồm các chương trình tạo Report và tạo Form nhập dữ liệu 2.6. Ngôn ngữ lập trình dạng tường thuật • Visual Basic for Applications (VBA) – Macro programming language • Macro—Dãy các lệnh dùng để tự động hóa các công việc 2.6. Ngôn ngữ lập trình dạng tường thuật – HTML (Hypertext Markup Language) – Dùng để tạo các trang Web 2/6/2012 12 2.6. Ngôn ngữ lập trình dạng tường thuật - Tạo các trang web • Các hiệu ứng đặc biệt và các phần tử tương tác được thêm vào trang Web như thế nào ? Counter duyệt số người thăm Web site Image map Hình ảnh đồ họa trỏ tới URL Script Thông dịch chương trình chạy trên client Applet thường chạy trên client, nhưng được biên dịch Processing form Thu thập số liệu từ visitors Servlet applet chạy trên server ActiveX control Là chương trình nhỏ chạy trên client 2.6. Ngôn ngữ lập trình dạng tường thuật - Tạo các trang web • Common gateway interface (CGI): Chuẩn giao tiếp xác định cách thức Web server giao tiếp với các nguồn tài nguyên bên ngoài Step 3. Khi user khẳng định submits 1 yêu cầu, nó sẽ được gửi cho CGI program. CGI program kết nối với database và lấy các ttin cho user. Ví dụ user yêu cầu xem phim The Wizard of Oz. Step 1. LTV lưu các CGI program trong 1 thư mục đặc biệt trên Web server ví dụ /cgi-bin. Database CGI script /program – chương trình quản trị việc gửi và nhân dữ liệu qua CGI Step 2. Webmaster tạo 1 liên kết giữa CGI program và Web page. Khi 1 user hiện trang Web, CGI program sẽ tự động chạy. Step 4. CGI program nhận thông tin từ database, két hợp chúng dưới dạng HTML, và gửi cho trình duyệt Web của User. 2.6. Ngôn ngữ lập trình dạng tường thuật - Tạo các trang web • Scripting language?  Rất dễ học và dễ sử dụng  JavaScript—thêm các nội dung động và các phần tử tương tác vào Web page  VBScript (Visual Basic, Scripting Edition)— Thêm tính thông minh và tương tác vào Web page  Perl (Practical Extraction and Report Language)— Có khả năng xử lý văn bản rất mạnh 2/6/2012 13 2.6. Ngôn ngữ lập trình dạng tường thuật - Tạo các trang web • Dynamic HTML (DHTML)  Cho phép nhà phát triển thêm nhiều phần tử đồ họa và tương tác vào Web page 2.6. Ngôn ngữ lập trình dạng tường thuật - Tạo các trang web • XHTML, XML, và WML XHTML (Extensible HTML) tạo khả năng Web sites có thể hiện dễ ràng hơn trên các trình duyệt XML (Extensible Markup Language) Cho phép developers có thể tạo các thẻ - tags – riêng của mình WML (Wireless Markup Language) Cho phép developers có thể thiết kế những trang cho các trình duyệt chuyên dụng – mobil, Chứa các tính năng của HTML và XML Sử dụng chuẩn wireless application protocol (WAP), để xác định cách thức các thiết bị không dây liên lạc với Web Server gửi toàn bộ bản ghi cho client, tạo khả năng cho client có thể thực hiện việc xử lý mà không phải quay lại server FrontPage 2003 Flash MX 2.6. Ngôn ngữ lập trình dạng tường thuật - Tạo các trang web • Web page authoring software?  Tạo các trang Web hoàn hảo mà không cần dùng HTML  Tự tạo các trang HTML Dreamweaver MX 2/6/2012 14 2.6. Ngôn ngữ lập trình dạng tường thuật - Tạo các ứng dụng đa phương tiện • Multimedia authoring software?  Kết hợp văn bản, đồ họa, hoạt hình, âm thanh và video trong 1 bài trình diễn có tương tác  Sử dụng cho computer-based training (CBT) và Web-based training (WBT)  Software includes Toolbook, Authorware, và Director 2.7. Các ngôn ngữ lập trình khác ALGOL ADA APL FORTH LISP HYPERTALK FORTRAN LOGO PASCAL MODULA-2 PILOT SMALLTALK PROLOG PL/I II. CHU TRÌNH PHÁT TRIỂN CHƢƠNG TRÌNH 2/6/2012 15 Program development cycle: các bước mà các LTV dùng để xây dựng chương trình Mô tả Bước 1: phân tích yêu cầu (analyze requirements) • Phân tích hệ thống – Dựa trên các hệ thống có thực (do con người vận hành hoặc hệ thống tự động) – Do các nhà phân tích hệ thống tiến hành, sẽ hiệu quả hơn nếu phỏng vấn người dùng – Mục tiêu: • Xác định xem hệ thống hiện tại đã làm được những gì, làm như thế nào, còn tồn tại các vấn đề gì  Quyết định xem có nên thực hiện bước tiếp theo hay không (Return-on-Investment – ROI estimation ) Bước 1: phân tích yêu cầu (analyze requirements) • Thiết lập các yêu cầu của hệ thống: – Dựa trên sự trao đổi giữa nhà phân tích hệ thống và nhà phân tích nghiệp vụ – Hình dung hệ thống mới: « look and feel » – Xác định • Cái gì cần thay đổi • Cần làm gì để có sự thay đổi đó (chưa quan tâm đến việc làm như thế nào) – Mô tả những việc cần làm: xác định • đầu vào (input): dữ liệu nào, từ đâu đến • đầu ra (output): dữ liệu nào, « mềm » (dữ liệu xuất ra màn hình) hay « cứng » (dữ liệu xuất ra các thiết bị khác) • xử lý (process): các hành động nào cần thực hiện để biến đầu vào thành đầu ra Vẽ biểu đồ IPO Quyết định xem có nên thực hiện bước tiếp theo hay không 2/6/2012 16 Bước 1: phân tích yêu cầu (analyze requirements) • Biểu đồ IPO: – Input, Output: danh từ, phân biệt được các dữ liệu – Process: động từ, chỉ 1 hành động duy nhất • Ví dụ: viết chương trình cho phép nhập vào 3 số, tính tổng của chúng và tính giá trị trung bình của chúng. Input Process Output Bước 1: phân tích yêu cầu (analyze requirements) Input Process Output 3 numbers read 3 numbers (n1 + n2+ n3) / 3 compute average and total n1 + n2 + n3 print average and total Input Process Output value1, value 2, value3 read the input values value1, value 2, value3 add the numbers together Total Total, value number calculate average Average display average display total Bước 2 – thiết kế giải pháp (design solution) • Những việc cần làm trong bước thiết kế giải pháp? – Phân rã bài toán thành các bài toán nhỏ hơn – Tìm giải pháp cho từng bài toán nhỏ, phát triển lên thành giải thuật – Kết hợp các giải pháp cho bài toán nhỏ thành giải pháp tổng thể cho bài toán ban đầu 2/6/2012 17 LTV bắt đầu với thiết kế tổng thể rồi đi đến thiết kế chi tiết Bước 2 – thiết kế giải pháp (design solution) • Những việc cần làm trong bước thiết kế giải pháp? Object-oriented design Structured design, còn gọi là top-down design Hai hƣớng tiếp cận Chia để trị Bước 2 – thiết kế giải pháp (design solution) – Sơ đồ phân cấp chức năng (hierarchy chart) ? • Trực quan hóa các modules CT • Còn gọi là sơ đồ cấu trúc Bước 2 – thiết kế giải pháp (design solution) • Object-oriented (OO) design là gì?  LTV đóng gói dữ liệu và các thủ tục xử lý dữ liệu trong 1 object  Các objects được nhóm lại thành các classes  Biểu đồ lớp thể hiện trực quan các quan hệ phân cấp quan hệ của các classes 2/6/2012 18 Bước 2 – thiết kế giải pháp (design solution) • Máy tính không thể tự nghĩ ra hay tự quyết định một sơ đồ hoạt động • Máy tính chỉ có thể làm chính xác những gì được yêu cầu, theo cách được yêu cầu, chứ không phải làm những gì con người muốn máy tính làm • Giải thuật là một tập các chỉ thị miêu tả cho máy tính nhiệm vụ cần làm và thứ tự thực hiện các nhiệm vụ đó. Bước 2 – thiết kế giải pháp (design solution) • Giải pháp cho mọi chương trình máy tính, dù đơn giản hay phức tạp, đều có thể được trình bày dựa trên 3 cấu trúc cơ bản sau: – Tuần tự – Chọn – Lặp • Các cấu trúc này được gọi là các cấu trúc điều khiển hay các cấu trúc logic, vì nó điều khiển logic tính toán của chương trình máy tính Bước 2 – thiết kế giải pháp (design solution) Cấu trúc tuần tự • Cấu trúc tuần tự trong một chương trình máy tính chỉ thị cho máy tính xử lý lần lượt các lệnh (statement) của chương trình theo thứ tự được chỉ ra trong chương trình 2/6/2012 19 Bước 2 – thiết kế giải pháp (design solution) Cấu trúc tuần tự • Lệnh có thể là: – Lệnh gán – Lệnh vào / ra – Lệnh ghép Bước 2 – thiết kế giải pháp (design solution) Cấu trúc chọn • Dùng để ra quyết định, và sau đó thì thực hiện một hành động dựa trên quyết định đó • Phải chỉ ra được các hành động có khả năng được thực hiện sau khi có quyết định • Quyết định phụ thuộc vào các điều kiện Bước 2 – thiết kế giải pháp (design solution) Cấu trúc chọn 2/6/2012 20 Bước 2 – thiết kế giải pháp (design solution) Cấu trúc chọn • Single input – single output • Single input – multiple output condition S1 condition S2 S1 value Sn S1 TRUE TRUE FALSE v1 vn • Single input – double output Bước 2 – thiết kế giải pháp (design solution) Cấu trúc lặp Bước 2 – thiết kế giải pháp (design solution) Cấu trúc lặp • Cho phép lập trình viên đặc tả một hành động cần thực hiện lặp đi lặp lại và có điều kiện • Khi được sử dụng trong một chương trình, cấu trúc lặp chỉ thị cho máy tính thực hiện lặp đi lặp lại một hoặc nhiều lệnh, cho đến khi thỏa mãn điều kiện. Vào thời điểm đó, máy tính có thể kết thúc vòng lặp 2/6/2012 21 Bước 2 – thiết kế giải pháp (design solution) Cấu trúc lặp condition S1 .. Sn TRUE FALSE condition S1 .. Sn TRUE FALSE Bước 2 – thiết kế giải pháp (design solution) Cấu trúc lặp • Trường hợp 1: số lần lặp biết trước Bước 2 – thiết kế giải pháp (design solution) Cấu trúc lặp • Trường hợp 2: số lần lặp không biết trước • Các lệnh trong vòng lặp được thực hiện cho đến khi điều kiện lặp không còn đúng nữa. – Điều kiện phải được kiểm tra trước: các lệnh trong vòng lặp có thể không được thực hiện lần nào – Khác đi, các lệnh trong vòng lặp có thể được thực hiện ít nhất một lần 2/6/2012 22 Ví dụ • Flowchart (biểu đồ luồng) là công cụ để phát triển một giải pháp thành một giải thuật – Mô tả giải thuật một cách trực quan – Sử dụng ít ký hiệu để định nghĩa giải thuật vớ
Tài liệu liên quan