Xây dựng lớp và giao diện

Quan hệ Composition: Xét mô hình quan hệ giữa hai lớp Car và Engine. Trong quan hệ giữa 2 lớp này, sự tồn tại của đối tượng thành phần Engine (part) phụ thuộc vào đối tượng Car (whole). Khi đối tượng Car hủy, đối tượng thành phần Engine cũng không còn tồn tại nữa.

ppt79 trang | Chia sẻ: tuanhd28 | Lượt xem: 1831 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Xây dựng lớp và giao diện, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Xây dựng lớp và giao diện Nội dungCác khái niệm cơ bản về lập trình OOPKhai báo lớpConstructor & destructorHàm thành viênThuộc tínhĐa hình trong C#Down cast – up castAbstract classSealed class, nested classInterface*#1 – Các khái niệm cơ bản về OOP Sự kỳ diệu khi sử dụng ObjectCác khái niệm và thuật ngữ dùng trong OOPXây dựng ứng dụng hướng đối tượng đầu tiên#1 – Lập trình theo kiểu OOP - Object-Oriented ProgrammingSự kỳ diệu của hướng đối tượng Khảo sát các công ty lớn Dell, Compaq làm sao có thể lớn?Họ mua các thành phần của các công ty khác và kết hợp chúng trong sản phẩm của họDell không có thiết kế riêng cho motherboardsCompag không có thiết kế động cơ cho đĩa cứng của họChương trình được hình thành từ ObjectDell, Compaq và Gateway cho phép mọi người có thể thiết kế nguồn điện hoặc motherboard.OOP xuất phát cùng quan điểm như vậy.Chương trình của chúng ta cũng hình thành từ các đối tượng.Mỗi đối tượng sẽ có trách nhiệm thực hiện các nhiệm vụ của nó.Bí mật để lập trình OOP một cách hiệu quảMỗi đối tượng có trách nhiệm thực một số công việc có liên quan.Nếu đối tượng cần có một kết quả của một công việc, nhưng không phải là công việc của đối tượng đó – có thể đề nghị đối tượng khác làm việc đó.“Nếu tôi không thể làm được, tôi có thể nhờ người khác làm hộ”.Không bao giờ được quên!Chương trình được hình thành từ các objectsMỗi đối tượng thực hiện các phần việc có liên quan đến nó.Các đối tượng tương tác với nhau qua việc gửi thông điệpKhi đối tượng thứ nhất không thể thực hiện được nó có thể đề nghị đối tượng thứ hai thực hiện giùm.Gửi thông điệp = lời gọi tới phương thức Lớp và đối tượng Lập trình hướng đối tượng.Mô tả đối tượng.Giải thích về việc tạo các lớp.Giải thích về việc khởi tạo đối tượng .Các vấn đề của lập trình hướng cấu trúcLập trình quan tâm nhiều đến cách thức xử lý trên các dữ liệu hơn là chính bản thân dữ liệu đó.Xem xét kỹ và phân tích tình huống hiện hành, chia thành các công việc nhỏ hơnNếu có thay đổi, phải phân tích, lập trình lại.Khó trong việc sử dụng lại và cũng khó trong việc bảo trìLập trình hướng đối tượng (Object-oriented Programming)Lập trình hướng đối tượng là kĩ thuật lập trình hỗ trợ công nghệ đối tượng, giúp tăng năng suất, đơn giản hóa độ phức tạp khi bảo trì cũng như mở rộng phần mềm bằng cách cho phép lập trình viên tập trung vào các đối tượng phần mềm ở bậc cao hơn. Giải quyết được những khó khăn của lập trinh hướng cấu trúcOOP tập trung đến bản thân dữ liệu nhiều hơn đến cách thao tác trên các dữ liệu đó.Tiếp cận cách định nghĩa đối tượng như một thực thể có thể xác định được các giá trị và các hành động có thể dùng để thực hiện trên các giá trị đó. Các tính năng của OOPTrừu tượng (Abstraction)Khả năng bỏ qua hay không chú ý đến một số khía cạnh của thông tin của đối tượng, khả năng tập trung vào những cốt lõi cần thiết.Đóng gói (Encapsulation) che giấu thông tin (information hiding)Không cho phép thay đổi trạng thái nội tại của một đối tượng. Việc cho phép môi trường bên ngoài tác động lên các dữ liệu nội tại của một đối tượng theo cách nào là hoàn toàn tùy thuộc vào người viết mã. Đây là tính chất đảm bảo sự toàn vẹn của đối tượng..Kế thừa (Inheritance)Đặc tính này cho phép một đối tượng có thể có sẵn các đặc tính mà đối tượng khác đã có thông qua kế thừa. Điều này cho phép các đối tượng chia sẻ hay mở rộng các đặc tính sẵn có mà không phải tiến hành định nghĩa lạiĐa hình (Polymorphism)Thể hiện thông qua việc gửi các thông điệp (message) - gọi các hàm bên trong của một đối tượng. Các phương thức dùng trả lời cho một thông điệp sẽ tùy theo đối tượng mà thông điệp đó được gửi tới sẽ có phản ứng khác nhau.Khái niệm và thuật ngữ trong OOP - Class Là khuôn mẫu hay một thiết kế, từ đó các đối tượng thực sự hình thành. (Tất cả code viết trong chương trình Java đều nằm bên trong các class.)Lớp định nghĩa những đặc điểm chính của trạng thái và các hành vi có thể có của các đối tượng.Các class này cũng có thể được xây dựng bằng cách mở rộng hoặc điều chỉnh các class khácKhi nói khởi tạo một đối tượng (construct an object) từ một lớp, có thể là tạo 1 thể hiện (instance) của lớp đó.Khái niệm và thuật ngữ – ObjectLà thể hiện của 1 lớp.Mỗi đối tượng đều có các hành vi được định nghĩa bằng các phương thức (method) mà chúng có thể thực hiện.Anh có thể làm gì với những đối tượng này?Anh có thể áp dụng những phương thức nào cho chúng?Mọi đối tượng đều có chung những trạng thái và những hành vi được định nghĩa trong lớp mà nó được tạoSo sánh giữa class và objectLớp mô tả thực thể, là mẫu của đối tượng, định nghĩa các hành động và tính chất cần thiết Lớp không thay đổi trong quá trình thực thi chương trìnhĐối tượng là thực thể thực sựDữ liệu chưa trong một đối tượng có thể thay đổi trong quá trình thực thi chương trìnhMột vài lời khuyên cho những mới bắt đầu học về OOPKhi xây dựng một ứng dụng bằng Java, anh có thể nói là đã phát triển “một ứng dụng hướng đối tượng”.Quy tắc vàngHình dung tất cả các đối tượng cần có trong ứng dụngVới mỗi đối tượng, hãy định nghĩa chúng Đó là cái gì?Chúng có thể làm gì? (có thể làm gì cho ứng dụng của anh?)Những dữ liệu là chúng cần có để thực hiện công việc? Biểu diễn mỗi loại đối tượng bằng classTạo lớp trong C#Khai báo lớpAccess modifier: public, protected, internal, protected internal, privateNếu ko khai báo lớp cơ sở thì C# mặc định xem lớp cơ sở là objectLớp luôn là kiểu dữ liệu tham chiếu trong C#*[access modifier] class [: base class]{ // class body}Khóa truy xuất cho classMột class chứa trong namespace chỉ có 2 khóa truy xuấtPublic: cho phép bên ngoài assembly truy xuấtInternal: chỉ cho phép sử dụng bên trong assemblyAssembly là tập mã đã được biên dịch sang .NETMột assembly chứa nội dung thực thi chương trình hay thư viện độngAssembly có thể chứa trong nhiều file*Các thành phần của classLớp có thể chứa các phần sauConstructor và destructorField và constantMethodPropertyIndexerEventChứa các kiểu khác (nested): class, struct, enumeration, interface và delegate*Tạo đối tượngKhai báo Trong thân lớpGiống như thuộc tínhTrong thân phương thứcTương tự như biếnKhởi tạoBằng lệnh new*HocSinh hs ;Tên lớpTên đối tượnghs = new HocSinh();hshsTạo đối tượngConstructorĐược gọi tự động khi tạo đối tượngCùng tên với lớpConstructor ko tham số sẽ được tạo mặc định khi không có bất cứ constructor nàoCho phép overload constructor để tạo ra nhiều cách khởi tạo đối tượngStatic constructor: ko tham số, ko access modifier, *ConstructorConstructor mặc địnhKhông có tham sốKhởi tạo thể hiện (đối tượng) khi chưa biết thông tin gì về nóConstructor sao chépTham số vào là đối tượng cùng lớpTạo ra obj như bản sao của obj đầu vàoConstructor khácCó một hay nhiều tham số vàoTạo obj khi biết một số thông tin nào về nó*Constructor*class HocSinh{ //... public HocSinh() { hoTen = “unknown"; namSinh = 1990; diemVan = diemToan = 0; } public HocSinh(HocSinh hs) { hoTen = hs.hoTen; namSinh = hs.namSinh; diemVan = hs.diemVan; diemToan = hs.diemToan; } public HocSinh(string ht) { hoTen = ht; }}Constructor mặc địnhConstructor sao chépConstructor khác (tạo học sinh khi biết họ tên)ConstructorKhai báo private cho constructor sẽ ko cho phép tạo đối tượng*Ko thể tạo thể hiện/objDestructorThực hiện nhiệm vụ “clean” khi đối tượng bị hủyTrùng tên lớp và có dấu “~” phía trướcKhông có tham số và access modifier Mỗi lớp chỉ có 1 destructor*class HocSinh{ //... ~HocSinh() { siSo--; }}MethodHàm, thủ tục khai báo trong classHành vi giao tiếp với bên ngoàiStatic và non static*public class CSharp{ public CSharp ( ) { . . .} public static void StaticMethod( ) { . . .} public void NonStaticMethod( ) { . . .}}public class Tester() { CSharp cs = new CSharp( ); cs.NonStaticMethod( ); CSharp.StaticMethod( );}Truy cập qua thể hiện: csTruy cập qua tên lớp: CSharpMethod*namespace QuanLyHocSinh{ class HocSinh { //... }}static public bool KiemTraDiem( double diem ){}bool kq = (0 [: base interface list]Interface - example*public interface IStudent{ int StudentID { get; set; } void AddSubject(string subjectName);}Khai báo property StudentID gồm hàm get ,setKhai báo phương thức AddSubjectPhải định nghĩa {get,set} của StudentID và AddSubject ở lớp thực thi interfaceInterface - example*public class Student : IStudent{ private int studentID = 0; private ArrayList subjects = null; public Student() {} public int StudentID { get { return studentID; } set { studentID = value; } } public void AddSubject(string subjectName) { subjects.Add(subjectName); }}Bắt buộc lớp student phải định nghĩa property Student và hàm AddSubjectExceptionVấn đề đặt ra:Rất khó khăn để tránh lỗi khi sử dụng chương trìnhGhi vào file dạng chỉ đọc (read only)Người sử dụng đưa ra một địa chỉ không chính xác (URL)Máy in chạy không có giấy, .Printer may run out of paper in the middle of a printout. Chương trình sẽ dừng ngay lập tức khi lỗi xuất hiện*Ta muốn làm điều gì?ExceptionNếu có lỗi khi thực thi chương trìnhChương trình sẽ thông báo lỗi cho người sử dụngCho phép người sử dụng lưu giữ phần công việc của mìnhCho phép người sử dụng thoát (một cách nhẹ nhàng) khỏi chương trình.*Exception là gì?Lỗi thực thi có thể xuất hiện và làm chương trình dừng đột ngột.Xử lý ngoại lệ (Exception Handling) là quá trình xử lý các lỗi thực thi này.Là hành động được thực hiện khi lỗi xuất hiện để tránh cho chương trình khỏi việc bị ngắt đột ngột.*Exception Mục đích của xử lý lỗi (Exception Handlers)Các lỗi (Ngoại lệ ) xuất hiện trong khi thực thi chương trình cần phải được xem xét, nắm bắt (caught) bởi chương trình xử lý ngoại lệ. Nếu chương trình không có cơ chế xử lý ngoại lệ phù hợp, khả năng dừng chương trình đột ngột sẽ rất cao.*Các kiểu Exception *Năm bắt ngoại lệ - Catching Exceptions*Đặt các đoạn code chuẩn trong khối try Phần xử lỗi nằm riêng trong khối catchNăm bắt ngoại lệ - Catching Exceptions*Nhiều khối catch Mỗi khối catch bắt 1 loại ngoại lệ riêng. Khối try có thể có một catch tổng quát chung*Ném và xử lý ExceptionsCâu lệnh throwNém ra một ngoại lệ tại các vị trí cần thiết trong chương trìnhChuyển tới phần xử lý thông báo lỗi thích hợp*Ném và xử lý Exceptions*Mệnh đề finally Tất cả các câu lệnh nằm trong khối này luôn luôn được thực hiện*Chương 2: XÂY DỰNG ỨNG DỤNG ĐA TẦNG *UML Diagram cho C#UML ( Unified Modeling Language) là ngôn ngữ chuẩn hóa để mô tả cho một hệ thống hoặc thương mại. Trong phần này sử dụng một số phần của mô hình UML để trình bày các biểu đồ quan hệ giữa các lớp.Lưu ý mũi tên đi từ các lớp đặc biệt hóa đến lớp tổng quát hóa.Chương 2: XÂY DỰNG ỨNG DỤNG ĐA TẦNG * UML Diagram cho C#Class diagramNếu thành viên lớp là public sử dụng dấu +, private sử dụng dấu -, protected sử dụng dấu #.Không nhất thiết phải liệt kê tất cả mọi thành viên trong mô hình lớpChương 2: XÂY DỰNG ỨNG DỤNG ĐA TẦNG *UML Diagram cho C#Interface và thừa kếChương 2: XÂY DỰNG ỨNG DỤNG ĐA TẦNG *UML Diagram cho C#Thừa kế giữa các lớp là quan hệ “is-a”.Composition giữa các lớp là quan hệ “part-of”. Aggregation giữa các lớp là quan hệ “has-a”.Chương 2: XÂY DỰNG ỨNG DỤNG ĐA TẦNG *2.2 UML Diagram cho C#Quan hệ Composition:Xét mô hình quan hệ giữa hai lớp Car và Engine.Trong quan hệ giữa 2 lớp này, sự tồn tại của đối tượng thành phần Engine (part) phụ thuộc vào đối tượng Car (whole). Khi đối tượng Car hủy, đối tượng thành phần Engine cũng không còn tồn tại nữa.Chương 2: XÂY DỰNG ỨNG DỤNG ĐA TẦNG *2.2 UML Diagram cho C#Quan hệ Aggregation:Với quan hệ “has-a”, sự tồn tại của đối tượng thành phần (part) không phụ thuộc vào đối tượng tổng thể (whole).Đối tượng Person sẽ có một Address cụ thể, nếu đối tượng Person bị hủy, đối tượng Address vẫn có thể tồn tại.*?*Xin cảm ơn!

Các file đính kèm theo tài liệu này:

  • ppt_p3_lop_va_giao_dien_9678.ppt
Tài liệu liên quan