bằng ngôn ngữ lập trình C# thì các vấn đề như: tránh trùng lặp khi phải viết lạinhiều đoạn chương trình giống nhau trong các lớp, khả năng tái sử dụng lại chươngtrình trong các lớp là vấ
Trang 1KẾ THỪA, ĐA NHIỆM TRONG C#
GV Chử Đức Hoàng
Trang 2bằng ngôn ngữ lập trình C# thì các vấn đề như: tránh trùng lặp khi phải viết lạinhiều đoạn chương trình giống nhau trong các lớp, khả năng tái sử dụng lại chươngtrình trong các lớp là vấn đề rất được quan tâm
lý thực thi các luồng công việc thực hiện bởi ngôn ngữ lập trình để thực hiện cácphần công việc khác nhau mà người dùng yêu cầu
• Ngôn ngữ C# có cho phép kế thừa không và việc kế thừa được thựchiện như thế nào?
lý khi có sự xung đột xảy ra giữa các luồng trong C#?
Trang 3Trình bày được các khái niệm về kế thừa trong C#
Trình bày được khái niệm về luồng và đa nhiệm trong C#
Xây dựng một chương trình C# đơn giản sử dụng tính kế thừa
Xây dựng một chương trình C# sử dụng tính đa nhiệm
Trang 41.1.1 Giới thiệu chung1
1.1.2 Đơn kế thừa2
1.1.3 Đa kế thừa3
1.1.4 Tính đa hình4
2.2.1 Khái niệm luồng5
2.2.3 Ứng dụng đa nhiệm7
2.2.2 Tạo luồng6
Trang 5• Thừa kế là cách tạo một lớp mới từ các lớp có sẵn Nó cho phép tái sử dụng lại mãnguồn đã viết trong lớp có sẵn.
nhưng chúng tồn tại trong một mạng lưới sự phụ thuộc và quan hệ lẫn nhau
với nhau bởi vì chúng ta tạo ra một cây quan hệ
Đặc biệt hoá là những nhánh của tổng quát hoá
Nếu di chuyển lên trên cùng thì được trường hợp tổng quát hóa
Nếu di chuyển xuống thì được trường hợp đặc biệt hóa
Trang 7Đặc điểm
phương thức và biến thành viên của lớp cơ sở
Trang 11Gọi phương thức khởi dựng lớp cơ sở
46 //gọi hàm tạo lớp cơ sở
47 public Student( string name, int age, int pointin):base(name, age)
từ khóa base
Có thể gọi hàm tạo lớp cơ sở từ hàm tạo lớp dẫn xuất
Trang 12sẽ tự động gọi hàm tạo không đối số của lớp cơ sở.
này thì sẽ báo lỗi biên dịch
Trang 13Gọi phương thức lớp cơ sở
thì phải thực hiện theo cấu trúc:
<Bổ từ truy xuất> new <Kiểu trả về> <Tên phương thức()>;
phương thức của lớp cơ sở và thay thế bằng phương thức mới được định nghĩa lại
base.<Tên phương thức()>;
Trang 144 public void SetId(int id) { this.id = id; }
12 public new void SetId(int id) { this.id = id; }
Định nghĩa lại phương thức lớp
cơ sở thông qua từ khoá “new”
Gọi phương thức lớp cơ sở thông qua từ khoá “base”
Trang 15Chỉ cho phép đơn kế thừa:
1 class Student : Person
Chỉ cho phép đa kế thừa giao diện
Iemployee,…
3 .
Trang 16Khi tạo một đối tượng lớp kế thừa thì thứ
tự khởi tạo sẽ bắt đầu từ lớp cơ sở rồi sau
đó mới khởi tạo đến lớp dẫn xuất
Trang 17So sánh hai từ khai báo mới đó là kiểu "new" và "override" giống và khác
nhau gì?
Trang 18Lớp lồng nhau
class, lớp kia gọi là lớp ngoài outer class
• Lớp nội có thể truy cập tất cả thành viên của lớp ngoài, kể cả private
outer_class.inner_class
Trang 19public class Student
{
private int mathpoint;
private int phypoint;
public Student(int mathpoint, int phypoint) {this.mathpoint = mathpoint;
this.phypoint = phypoint;
}public override string ToString() {
string str = mathpoint.ToString() + "/" + phypoint.ToString();
return s;
}public class StudentDisplay
{public void Display(Student f) {Console.WriteLine(“Display Math Point {0}", f.mathpoint);
Console.WriteLine("Display Physical Point {0}", f.phypoint);
Trang 20class Tester{
static void Main(){
Student f1 = new Student(3, 4);
Console.WriteLine("f1: {0}", f1.ToString());
fa.Display(f1);
}}
Ví dụ:
TruyTruy xuấtxuất lớplớp inner qua inner qua lớplớpouter,
outer, lớplớp outer outer tươngtương tựtự nhưnhưmanespace
Trang 21• Luồng (thread): Là một chuỗi liên tiếp các lệnh mà máy tính thực thi.
tục cho đến khi kết thúc hàm Main() Do vậy, phương thức Main() là phương thức
mà NET runtime lấy để bắt đầu cho các luồng
Một thể hiện của luồng đaị diện cho một luồng
Có thể tạo các luồng khác bằng cách khởi tạo một đối tượng luồng
Trang 22• Các trạng thái của luồng
Start(): cho chạy luồng
Suspend(): Đình chỉ tạm thời luồng để bắt đầu một luồng khác
Resume(): Gọi phục hồi luồng
Sleep(): cho luồng ngủ một khoảng thời gian
Abort(): huỷ luồng
Trang 23Các đặc tính của luồng:
Quy trình không kết thúc cho đến khi các luồng “Foreground” kết thúc
Các luồng “Background” được chấm dứt khi ứng dụng kết thúc
• CurrentThread – get, static
Trả về luồng tham chiếu để gọi luồng
Luồng đã bắt đầu nhưng chưa kết thúc
Highest, AboveNormal, Normal, BelowNormal, Lowest
Unstarted, Running, Suspended, Stopped, WaitSleepJoin,…
Trang 24công việc thì được gọi là ứng dụng đa nhiệm Khi đó thì phải đăng kí các độ ưu tiênkhác nhau cho các luồng khác nhau trong một tiến trình Luồng có độ ưu tiên caohơn thì nó sẽ chiếm quyền ưu tiên so với các luồng khác trong tiến trình
cao hơn đang làm việc
hướng đặt độ ưu tiên cao cho các luồng của hệ điều hành
Trang 25• Sự đồng bộ
không đảm bảo được sự đồng bộ thì sẽ gây ra các lỗi
biến bằng từ khóa lock:
lock (x)
{
DoSomething();
}
khi mutex bao một biến thì không một luồng nào được quyền truy nhập vào biến đó
thúc và luồng kế tiếp thử truy xuất vào biến x , việc truy xuất đến biến sẽ bị từ chối.thay vào đó window đơn giản đặt luồng đó ngủ cho đến khi mutex được giải phóng.Mutex là một cơ chế đơn giản được dùng để điều khiển việc truy nhập vào các biến.Tất cả việc điều khiển này nằm trong lớp System.Threading.Monitor Câu lệnh lock
Trang 26• “race condition”: xuất hiện khi nhiều hơn một luồng cố gắng truy nhập vào cùng
một dữ liệu và không quan tâm đến các luồng khác làm gì Khi gặp lỗi này thì nó ítkhi dừng thực thi quá trình nhưng nó lại làm lỗi dữ liệu
Trang 27Có mấy mức ứng dụng đa nhiệm? So sánh ưu tiên đa nhiệm của Windows
với các chương trình của hệ thống?
Trang 28Trong đó a, b là hai đối tượng tham
chiếu mà cả hai luồng cần truy cập
Hai luồng cùng làm việc:
thái ngủ chờ luồng 2 giải phóng b
và ngược lại
Trang 29Kết quả và khắc phục lỗi deadlock
đang ngủ và không thức dậy Cho đến khi lock trên b được giải phóng điều này cũngkhông thể xảy ra cho đến khi nào luồng thứ hai thức dậy
phóng lock
thứ tự
mà lock trên a đầu sẽ hoàn thành nhiệm vụ của nó sau đó các luồng khác sẽbắt đầu
Trang 30On failing, 'Finish' button: Goes to Next Slide
Allow user to leave quiz: At any time
User may view slides after quiz: At any time
Trang 31• Mô tả cách thức xây dựng một lớp mới dựa trên lớp đã có và khai
thác cũng như phạm vi truy cập các thuộc tính và phương thức củalớp nền và lớp dẫn xuất của ngôn ngữ C#
kế thừa của C#
khi thực hiện các luồng Cách khắc phục lỗi sảy ra khi sử dụng đaluồng trong ngôn ngữ C#
kế thừa trong C#
học viên
Trang 32On failing, 'Finish' button: Goes to Next Slide
Allow user to leave quiz: At any time
User may view slides after quiz: At any time
Trang 34Show ‘Next Slide’ Button: Don't show
Completion Button Label: Next Slide