Câu : Phân biệt kỹ thuật lập trình cấu trúc lập trình hướng đối tượng 1.Lập trinh truyền thống lập trình cấu trúc hay lập trình hướng thủ tục Những ngơn ngữ lập trình truyền thống như: Pascal, C, Foxpro gọi chung ngôn ngữ lập trình hướng thủ tục Theo cách tiếp cận hướng thủ tục hệ thống phần mềm xem dãy công việc cần thực đọc liệu, tính tốn, xử lý, lập báo cáo in ấn kết Mỗi cơng việc dược thực hàm hay thủ tục định Như trọng tâm cách tiếp cận hàm chức Nói rõ theo cách tiếp cận này, chương trình tổ chức thành chương trình Mỗi chương trình đảm nhận xử lý cơng việc nhỏ tồn hệ thống Mỗi chương trình lại chia nhỏ thành chương trình nhỏ Quá trình phân chia tiếp tục diễn chương trình nhận đủ đơn giản Người ta gọi q trình làm mịn dần Khi tập trung vào trọng tâm phát triển hàm lại ý đến liệu ( Nghĩa lập trình hướng thủ tục liệu khơng coi trọng) mà hàm sử dụng để thực cơng việc Cái xẩy liệu gắn liệu với hàm nào? Trong chương trình có nhiều hàm, thường có nhiều thành phần liệu quan trọng khai báo tổng thể nhiều hàm truy nhập, đọc làm thay đổi giá trị biến tổng thể Ngoài hàm có vùng liệu riêng Để liên kết hàm thành đơn vị chương trình thơng qua biến tồn cục Điều có nghĩa nhiều hàm truy nhập, sử dụng liệu chung , làm thay đổi giá trị chúng khó kiểm sốt Nhất chương trình lớn, phức tạp vấn đề trở nên khó khăn Điều xẩy muốn thay đổi, bổ xung cấu trúc liệu biến tồn cục Đó phải viết lại tồn hàm có liên quan Tóm lại đặc tính phương pháp lập trình hướng thủ tục là: + Tập chung vào cơng việc cần thực (thuật tốn) + Chương trình lớn chia thành hàm nhỏ + Phần lớn hàm sử dụng liệu chung + Dữ liêu hệ thống chuyển động từ hàm sang hàm khác + Hàm biến đổi liệu từ dạng sang dạng khác + Sử dụng cách tiếp cận top-down thiết kế chương trình 2.Phong cách phương pháp lập trình hướng đối tượng (OOP - Object Oriented Programming) tập chung vào liệu Theo cách tiếp cận câu hỏi thường đặt liệu phương thức(hay hàm) xử lý người ta đem gói tất liệu phương thức có liên quan với thành nhóm giống lọ thuốc có hai thứ: Các viên thuốc(dữ liệu) tờ giấy ghi cách dùng viên thuốc đó(phương thức) Hai thứ gộp lại thành kiểu liệu gọi liệu đối tượng(Object) Lập trình có sử dụng kiểu liệu loại gọi lập trình hướng đối tượng Lập trình hướng đối tượng đặt trọng tâm vào đối tượng Yếu tố quan trình phát triển chương trình không cho phép liệu biến động tự hệ thống Trong đối tương liệu gắn chặt với hàm thành viên thành vùng riêng mà có hàm tác động nên cấm hàm bên truy nhập tới tuỳ tiện Lập trình hướng đối tượng cho phép phân tích tốn thành thực thể gọi đối tượng sau xây dựng liệu hàm xung quanh đối tượng Các đối tựơng tác động, trao đổi thông tin với thông qua chế thông báo(mesage) thông qua phương thưc(hàm) Lập trình hướng đối tượng có đặc tính sau: + Tập chung vào liệu thay cho hàm + Chương trình chia thành đối tượng + Cấu trúc liệu thiết kế cho đặc tả đối tượng gắn với cấu trúc liệu + Dữ liệu đóng gói lại, che giấu không cho phép hàm ngoại lai truy nhập tự + Các đối tượng tác động trao đổi thông tin với qua hàm + Có thể dẽ dàng bổ sung liệu hàm vào đối tượng cần thiết + Chương trình thiết kế theo cách tiếp cận từ lên(bottom- up) Câu : Trình bày kiểu liệu sau ngôn ngữ C : - Kiểu số (số Nguyên , số Thực ) - Kiểu mảng (array) - Kiểu cấu trúc (struct) Kiểu số nguyên Kiểu số nguyên kiểu liệu dùng để lưu giá trị nguyên hay gọi kiểu đếm Kiểu số nguyên C chia thành kiểu liệu con, kiểu có miền giá trị khác Kiểu số nguyên byte (8 bits) Kiểu số nguyên byte gồm có kiểu sau: STT Kiểu liệu Miền giá trị (Domain) unsigned char Từ đến 255 (tương đương 256 ký tự bảng mã ASCII) char Từ -128 đến 127 Kiểu unsigned char: lưu số nguyên dương từ đến 255 => Để khai báo biến kiểu ký tự ta khai báo biến kiểu unsigned char Mỗi số miền giá trị kiểu unsigned char tương ứng với ký tự bảng mã ASCII Kiểu char: lưu số nguyên từ -128 đến 127 Kiểu char sử dụng bit trái để làm bit dấu => Nếu gán giá trị > 127 cho biến kiểu char giá trị biến số âm (?) Kiểu số nguyên bytes (16 bits) Kiểu số nguyên bytes gồm có kiểu sau: STT Kiểu liệu Miền giá trị (Domain) enum Từ -32,768 đến 32,767 unsigned int Từ đến 65,535 short int Từ -32,768 đến 32,767 int Từ -32,768 đến 32,767 Kiểu enum, short int, int : Lưu số nguyên từ -32768 đến 32767 Sử dụng bit bên trái để làm bit dấu => Nếu gán giá trị >32767 cho biến có kiểu giá trị biến số âm Kiểu unsigned int: Kiểu unsigned int lưu số nguyên dương từ đến 65535 Kiểu số nguyên byte (32 bits) Kiểu số nguyên bytes hay gọi số nguyên dài (long) gồm có kiểu sau: STT Kiểu liệu Miền giá trị (Domain) unsigned long Từ đến 4,294,967,295 long Từ -2,147,483,648 đến 2,147,483,647 Kiểu long : Lưu số nguyên từ -2147483658 đến 2147483647 Sử dụng bit bên trái để làm bit dấu => Nếu gán giá trị >2147483647 cho biến có kiểu long giá trị biến số âm Kiểu unsigned long: Kiểu unsigned long lưu số nguyên dương từ đến 4294967295 Kiểu số thực Kiểu số thực dùng để lưu số thực hay số có dấu chấm thập phân gồm có kiểu sau: STT Kiểu liệu Kích thước (Size) Miền giá trị (Domain) float bytes Từ 3.4 * 10-38 đến 3.4 * 1038 double bytes Từ 1.7 * 10-308 đến 1.7 * 10308 long double 10 bytes Từ 3.4 *10-4932 đến 1.1 *104932 Mỗi kiểu số thực có miền giá trị độ xác (số số lẻ) khác Tùy vào nhu cầu sử dụng mà ta khai báo biến thuộc kiểu Ngồi ta có kiểu liệu void, kiểu mang ý nghĩa kiểu rỗng khơng chứa giá trị Kiểu Mảng Mảng tập hợp phần tử cố định có kiểu, gọi kiểu phần tử Kiểu phần tử có kiểu bất kỳ: ký tự, số, chuỗi ký tự…; có ta sử dụng kiểu mảng để làm kiểu phần tử cho mảng (trong trường hợp ta gọi mảng mảng hay mảng nhiều chiều) Ta chia mảng làm loại: mảng chiều mảng nhiều chiều MẢNG CHIỀU Khai báo Khai báo mảng với số phần tử xác định (khai báo tường minh) Cú pháp: Ý nghĩa: - Tên mảng: tên đặt theo quy tắc đặt tên danh biểu Tên mang ý nghĩa tên biến mảng - Số phần tử: số nguyên, cho biết số lượng phần tử tối đa mảng (hay nói khác kích thước mảng gì) - Kiểu: phần tử mảng có liệu thuộc kiểu - Ở đây, ta khai báo biến mảng gồm có số phần tử phần tử, phần tử thứ tên mảng [0], phần tử cuối tên mảng[số phần tử -1] Khai báo mảng với số phần tử không xác định (khai báo không tường minh) Cú pháp: Khi khai báo, không cho biết rõ số phần tử mảng, kiểu khai báo thường áp dụng trường hợp: vừa khai báo vừa gán giá trị, khai báo mảng tham số hình thức hàm a Vừa khai báo vừa gán giá trị Cú pháp: []= {Các giá trị cách dấu phẩy} Nếu vừa khai báo vừa gán giá trị C hiểu số phần tử mảng số giá trị mà gán cho mảng cặp dấu {} Chúng ta sử dụng hàm sizeof() để lấy số phần tử mảng sau: Số phần tử=sizeof(tên mảng)/ sizeof(kiểu) b Khai báo mảng tham số hình thức hàm, trường hợp ta không cần định số phần tử mảng MẢNG NHIỀU CHIỀU Mảng nhiều chiều mảng có từ chiều trở lên Điều có nghĩa phần tử mảng mảng khác Khai báo Khai báo mảng chiều tường minh Cú pháp: Truy xuất phần tử mảng chiều Ta truy xuất phần tử mảng hai chiều cách viết tên mảng theo sau hai số đặt hai cặp dấu ngoặc vuông Chẳng hạn ta viết m[2][3] Với cách truy xuất theo cách này, Tên mảng[Chỉ số 1][Chỉ số 2] coi biến có kiểu khai báo biến mảng KIỂU CẤU TRÚC TRONG C Khái niệm Kiểu cấu trúc (Structure) kiểu liệu bao gồm nhiều thành phần có kiểu khác nhau, thành phần gọi trường (field) Sự khác biệt kiểu cấu trúc kiểu mảng là: phần tử mảng kiểu phần tử kiểu cấu trúc có kiểu khác Hình ảnh kiểu cấu trúc minh họa: Trường7 Đây cấu trúc có trường Còn kiểu mảng có dạng: 10 11 12 13 Phần tử14 Đây mảng có 15 phần tử Định nghĩa kiểu cấu trúc Cách 1: struct { ; ; …… ; }; Cách 2: Sử dụng từ khóa typedef để định nghĩa kiểu: typedef struct { ; ; …… ; } ; Trong đó: - : tên đặt theo quy tắc đặt tên danh biểu; tên mang ý nghĩa tên kiểu cấu trúc - (i=1 n): trường cấu trúc có liệu thuộc kiểu (tên trường phải tên đặt theo quy tắc đặt tên danh biểu) Khai báo biến cấu trúc Việc khai báo biến cấu trúc tương tự khai báo biến thuộc kiểu liệu chuẩn Cú pháp: - Đối với cấu trúc định nghĩa theo cách 1: struct [, …]; - Đối với cấu trúc định nghĩa theo cách 2: [, …]; CÁC THAO TÁC TRÊN BIẾN KIỂU CẤU TRÚC Truy xuất đến trường biến cấu trúc Cú pháp:. Khi sử dụng cách truy xuất theo kiểu này, thao tác . giống thao tác biến kiểu liệu Lưu ý: - Các biến cấu trúc gán cho Thực chất thao tác toàn cấu trúc trường riêng rẽ Chương trình dòng s=SV ví dụ - Với biến kiểu cấu trúc ta thực thao tác sau đây: Sử dụng hàm xuất nhập biến cấu trúc Các phép toán quan hệ, phép toán số học logic Khởi tạo cấu trúc Việc khởi tạo cấu trúc thực lúc khai báo biến cấu trúc Các trường cấu trúc khởi tạo đạt dấu { }, chúng phân cách dấu phẩy (,) Ví dụ: Khởi tạo biến cấu trúc NgaySinh: struct NgayThang NgaySinh ={29, 8, 1986}; CON TRỎ CẤU TRÚC Khai báo Việc khai báo biến trỏ kiểu cấu trúc tương tự khai báo biến trỏ khác, nghĩa đặt thêm dấu * vào phía trước tên biến Cú pháp: struct * ; Ví dụ: Ta khai báo trỏ cấu trúc kiểu NgayThang sau: struct NgayThang *p; /* NgayThang *p; // Nếu có định nghĩa kiểu */ Sử dụng trỏ kiểu cấu trúc Khi khai báo biến trỏ cấu trúc, biến trỏ chưa có địa cụ thể Lúc cấp phát byte để lưu giữ địa ghi nhận trỏ đến cấu trúc, chưa đến đối tượng cụ thể Muốn thao tác trỏ cấu trúc hợp lệ, tương tự trỏ khác, ta phải: - Cấp phát vùng nhớ cho (sử dụng hàm malloc() hay calloc) - Hoặc, cho quản lý địa biến cấu trúc Ví dụ: Sau khởi tạo giá trị cấu trúc: struct NgayThang Ngay = {29,8,1986}; p = &Ngay; lúc biến trỏ p chứa địa Ngay Truy cập thành phần cấu trúc quản lý trỏ Để truy cập đến trường cấu trúc thông qua trỏ nó, ta sử dụng tốn tử dấu mũi tên (->: dấu - dấu >) Ngồi ra, ta sử dụng đến phép toán * để truy cập vùng liệu quản lý trỏ cấu trúc để lấy thông tin cần thiết