Bài giảng Kỹ thuật lập trình: Chương 3 - ThS. Phạm Thanh An

28 436 0
Bài giảng Kỹ thuật lập trình: Chương 3 - ThS. Phạm Thanh An

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bài giảng Kỹ thuật lập trình: Chương 3 - ThS. Phạm Thanh An

4/10/2012 Chương Xây dựng lớp, đối tượng ThS Phạm Thanh An Khoa Công nghệ thông tin Đại học Ngân hàng Tp Hồ Chí Minh Nội dung trình bày Định nghĩa lớp Tạo đối tượng Sử dụng thành viên static Hủy đối tượng Truyền tham số Nạp chồng phương thức Đóng gói liệu với thuộc tính Thuộc tính đọc         Phát triển hệ thống OOP  Chương trình tạo thành đối tượng  Mỗi đối tượng đảm nhận thực tập nhiệm vụ liên quan Trong phát triển hệ thống, đối tượng mô tả mà muốn thao tác hệ thống: thực thể vật lý thực thể khái niệm  Đối tượng có thuộc tính (property) hành vi (behaviors)  4/10/2012 Đối tượng  Sinh viên:  Thuộc tính:      Tên Mã số sinh viên Ngày sinh Quê quán Hành vi    Đăng ký môn học Chọn chuyên ngành Hủy môn học Đối tượng (tt)  Đối tượng biểu diễn cho người, vị trí, vật, bảng liệu cần xử lý   Tài khoản khách hàng: thực thể khái niệm   Xe : thực thể vật lý Khoa: thực thể khái niệm Các đối tượng tương tác cách gửi thống điệp (sending message)  sending message = calling method Lớp  Lớp mẫu hay kiểu chung cho tất đối tượng có đặc trưng giống  có thuộc tính hành vi giống Trong lập trình hướng đối tượng, lớp xem đồng với kiểu liệu trừu tượng  Một lớp tạo số không giới hạn đối tượng  4/10/2012 Lớp (tt) Khách hàng Tên Tên Địa Điện thoại Thanh Quận 123-456 Bình Quận 221-4728 Lan Quận 117-2321 Địa Điện thoai Lớp với đối tượng Lớp  Đối tượng Là khuôn mẫu  Định nghĩa thuộc tính hành động đối tượng  Được tạo thiết kế  Là thể lớp, đối tượng tồn nhớ có thời gian tồn hữu hạn (finite lifespan) 245 Định nghĩa lớp  Sử dụng từ khoá class [Bổ từ truy cập] class [: Lớp sở] { // Các thành phần liệu // Hàm }  Ghi chú: C# phần kết thúc lớp khơng có dấu “;” khai báo lớp ngơn ngữ C++ 4/10/2012 Ví dụ định nghĩa lớp public class hocsinh { private string hoten; public int lop ; public void lenlop(); { lop = lop +1; } } // kết thúc khai báo lớp Ví dụ: Lớp tài khoản public class taikhoan { private float sodutk ; public void naptien(float sotien) { sodutk = sodutk + sotien; } public bool ruttien(float sotien) { if ( sodutk < sotien) return false ; else { sodutk = sodutk - tienrut; return true ; } } public float laysodu() { return sodutk ; } } Bổ từ truy cập (Access modifiers) Bổ từ truy cập Giới hạn truy cập public Không giới hạn Những thành phần public dùng phương thức lớp private Thành viên lớp A đánh dấu private truy cập phương thức lớp A protected Thành viên lớp A đánh dấu protected truy cập phương thức bên lớp A phương thức lớp dẫn xuất từ lớp A 4/10/2012 Bổ từ truy cập (Access modifiers) Bổ từ truy cập internal protected internal Giới hạn truy cập Thành viên lớp A đánh dấu internal truy cập phương thức lớp khối hợp ngữ với A Thành viên lớp A đánh dấu protected internal truy cập phương thức lớp A, phương thức lớp dẫn xuất A, lớp khối hợp ngữ A Phương thức  Là hàm khai báo bên lớp   Có trả giá trị (int, float, string, object, vv) Hoặc không trả giá trị (void) Một phương thức cài đặt hành vi đối tượng  Khai báo phương thức  (d/s tham số) { < câu lệnh> ; // thân phương thức } Tham số phương thức Có thể có nhiều tham số Mỗi tham số phải khai báo kèm với kiểu liệu  Bên thân phương thức,     Các tham số xem biến cục Giống biến ta khai báo bên phương thức khởi tạo giá trị giá trị tham số truyền vào 4/10/2012 Tạo đối tượng  Sử dụng từ khóa new Đối tượng = new tênlớp()  Ví dụ:    taikhoan tk1 = new taikhoan(); taikhoan tk1 ; tk1 = new taikhoan(); Truy cập đến thành phần  . Ví dụ: lớp thời gian using System; public class ThoiGian { int Nam; int Thang; int Ngay; int Gio; int Phut; int Giay; // Các thành viên private public void ThoiGianHienHanh() { Console.WriteLine(“Hien thi thoi gian hien hanh”); } } Ví dụ: lớp thời gian public class Tester { static void Main() { ThoiGian t = new ThoiGian(); t.ThoiGianHienHanh(); } } 4/10/2012 Phương thức thiết lập (constructor) Là phương thức đặc biệt lớp Được gọi đối tượng tạo  Không bắt buộc phải có, hữu ích cho việc khởi tạo thành phần đối tượng  Có tên với tên lớp, khai báo public, không trả giá trị (khơng sử dụng void)  Khi tạo đối tượng:   đối tượng = new tênlớp(các tham số) Ví dụ: Phương thức thiết lập using System; public class Thang { private int days; public Thang(int songay) { days = songay; } static void Main() { Thang thang1 =new Thang(31); Thang thang4 = new Thang(30); Console.WriteLine (Thang1.days); } } Ví dụ: lớp Rectangle 4/10/2012 Phương thức thiết lập (tt) Nếu không định nghĩa phương thức thiết lập, trình biên dịch cung cấp phương thức thiết lập mặc định  Phương thức thiết lập mặc định tạo cho đối tượng không thực hành động  Các thành viên lớp khởi tạo giá trị mặc định  Giá trị mặc định kiểu liệu Ví dụ: class MyClass { string myMsg; public MyClass (string msg) { myMsg = msg; } } class MyApp { MyClass c; public Main (string[] args) { c = new MyClass(); // Lỗi } } 4/10/2012 Ví dụ: lớp Time using System; using System.Collections.Generic; using System.Text; namespace DeclaringConstructor { public class Time { int Year; int Month; int Date; // private member variables int Hour; int Minute; int Second; Ví dụ: lớp Time (tt) public void DisplayCurrentTime( ) { System.Console.WriteLine( "{0}/{1}/{2} {3}:{4}:{5}", Month, Date, Year, Hour, Minute, Second ); } // phương thức thiết lập public Time( System.DateTime dt ) { Year = dt.Year; Month = dt.Month; Date = dt.Day; Hour = dt.Hour; Minute = dt.Minute; Second = dt.Second; } } // end class Time Ví dụ: lớp Time (tt) public class Kiemtra { static void Main( ) { System.DateTime currentTime =System.DateTime.Now; Time t = new Time( currentTime ); t.DisplayCurrentTime( ); } } } // end namespace 4/10/2012 Khởi tạo biến thành viên  Các biến thành viên khởi tạo trực tiếp khai báo trình khởi tạo private int Giay = 30; // Khởi tạo Nạp chồng phương thức thiết lập Chúng ta định nghĩa nhiều phương thức thiết lập lớp  Với điều kiện    Danh sách tham số phải khác Hoặc kiểu liệu các tham số phải khác Ví dụ public class taikhoan { private float sodutk ; private float gioihanrut; public taikhoan( int sd) { sodutk = sd; } public taikhoan (int sd, int lm) { sodutk = sd; gioihanrut = lm; } 10 4/10/2012 Từ khóa this (tt)  Sử dụng this để gọi tường minh thành phần phương thức lớp public void MyMethod(int y) { int x = 0; x = 7; // gán biến cục y = 8; // gán cho tham số this.z = 5; // gán cho thành phần lớp this.Draw( ); // gọi phương thức thành phần } Các thành viên tĩnh (static member)  Những thuộc tính phương thức lớp thành viên thể (instance members) hay thành viên tĩnh (static members)   Những thành viên thể hay thành viên đối tượng, liên quan đến thể lớp (một đối tượng) Trong thành viên tĩnh xem phần lớp Các thành viên tĩnh (tt) Để truy cập đến thành viên tĩnh lớp: .  Sử dụng từ khóa “static” để khai báo thuộc tính hay phương thức với thuộc lớp  14 4/10/2012 Ví dụ: Phương thức tĩnh Các thành viên tĩnh (tt) Chỉ có thành phần tĩnh nhớ, chia thể hiển lớp  Ghi chú:    Trong C# không cho phép truy cập đến thành viên tĩnh thông qua thể hiện, Nếu cố làm điều trình biên dịch C# báo lỗi Ví dụ: thành viên tĩnh public class Counter { private Counter() { } public static int currentCount; public static int IncrementCount() { return ++currentCount; } } 15 4/10/2012 Ví dụ: thành viên tĩnh (tt) class TestCounter { static void Main() { Counter.currentCount = 100; Counter.IncrementCount(); System.Console.WriteLine("New count: {0}", Counter.currentCount); } } Các thành viên tĩnh (tt) Các thuộc tính tĩnh hữu ích mn lưu trữ trạng thái liên quan đến tất thể lớp  Phương thức tĩnh có tác dụng hành vi chung cho lớp thể cụ thể lớp  Ví dụ sử dụng thuộc tính tĩnh using System; public class Cat { private static int instance =0; public Cat() { instance++; } public static void HowManyCats() { Console.WriteLine(“{0} cats”, instance); } } 16 4/10/2012 Ví dụ sử dụng thuộc tính tĩnh public class Tester { static void Main() { Cat.HowManyCats(); Cat mun = new Cat(); Cat.HowManyCats(); Cat muop = new Cat(); Cat miu = new Cat(); Cat.HowManyCats(); } Kết quả: cats cats cats } Gọi phương thức tĩnh Main() phương thức tĩnh Các phương thức tĩnh khơng cần có tham chiếu this thể tham chiếu tới  Các phương thức tĩnh truy cập trực tiếp đến thành phần không tĩnh (nonstatic)    Ví dụ với Main() để gọi phương thức khơng tĩnh (nonstatic), phải tạo thể lớp Ví dụ: using System; public class Class1 { public void SomeMethod(int p1, float p2) { Console.WriteLine(“Ham nhan duoc hai tham so: {0} va {1}”, p1,p2); } } public class Tester { static void Main() { int var1 = 5; float var2 = 10.5f; Class1 c = new Class1(); c.SomeMethod( var1, var2 ); } } 17 4/10/2012 Phương thức thiết lập tĩnh Nếu lớp khai báo phương thức thiết lập tĩnh (static constructor), phương thức thiết lập tĩnh thực trước thể lớp tạo  Ghi chú:    Khơng thể điều khiển xác phương thức thiết lập tĩnh thực Nó thực sau chương trình chạy trước biến đối tượng tạo Ví dụ: Sử dụng hàm thiết lập tĩnh class A { public static int x; static A ( ) { x = 0; Sử dụng phương thức thiết lập tĩnh để khởi đầu biến thành phần tĩnh } public void Increase() { x = x+1; } } Lưu ý phương thức thiết lập tĩnh lớp định nghĩa phương thức thiết lập tĩnh  Phương thức thiết lập tĩnh thưc lần cho dù có tao số đối tượng  Phương thức thiết lập tĩnh không nhận bổ từ truy cập (private, public, ) không nhận tham số  Phương thức thiết lập tĩnh thực trước phương thức thiết lập mức thể  18 4/10/2012 Phương thức thiết lập private  Được sử dụng lớp có thành phần tĩnh, đối tượng lớp không cần tạo Phương thức thiết lập private (tt) C# khơng có phương thức tồn cục số toàn cục (đều phải khai báo lớp)  Sử dụng phương thức thiết lập private,khi cần tạo lớp tiện ích nhỏ để chứa phương thức tĩnh (lớp Math, Console)   Lưu ý:  Nếu lớp có phương thức thiết lập private khơng có phương thức thiết lập public, tất lớp khác (ngoại trừ lớp lồng) không phép tạo thể lớp Phương thức hủy (Destructors) Không nhận tham số Khai báo phương thức thiết lập, có thêm ‘~’ vào trước  Được gọi Garbage Collector C#  Garbage Collector giải phóng nhớ cách hủy đối tượng không dùng không tham chiếu đến …  Cú pháp: ~()   { ; } … 19 4/10/2012 Phương thức hủy (Destructors)  Lưu ý:      Có phương thức hủy lớp Không thể gọi tường minh phương thức hủy Không nhận tham số Khổng thể nạp chồng hay kế thừa Khơng nhân bổ từ truy cập Ví dụ: phương thức hủy Truyền tham số Mặc định, kiểu giá trị truyền giá trị vào cho phương thức  C# đưa khả cho phép ta truyền tham số kiểu giá trị hình thức tham chiếu, sử dụng bổ từ:  ref : Bắt buộc phải khởi tạo giá trị ban đầu cho tham số truyền vào  out: Không cần phải khởi tạo giá trị ban đầu cho tham số truyền vào  20 4/10/2012 Ví dụ: Truyền tham số Ví dụ: với bổ từ ref Ví dụ: với bổ từ out 21 4/10/2012 Từ khóa params using System; using System.Collections.Generic; using System.Text; namespace UsingParams { public class Tester { static void Main( ) { Tester t = new Tester( ); t.DisplayVals(5,6,7,8); int [ ] mang = new int[5] {1,2,3,4,5}; t.DisplayVals(mang); } Từ khóa params (tt) public void DisplayVals(params int[] intVals) { foreach (int i in intVals) { Console.WriteLine("DisplayVals {0}",i); } } } // kết thúc lớp } // kết thúc namespcae Quá tải phương thức (Overloading) Sử dụng tên cho phương thức  Có hai cách tải phương tức    Chỉ số tham số khác Chỉ kiểu tham số khác 22 4/10/2012 Quá tải phương thức using System; public class Area { private int areaVal; public void AreaCal(int radius) { areaVal = (22/7)* radius*radius; } public void AreaCal(int length, int breadth) { areaVal = length*breadth; } public void AreaCal(int length, int breadth, int height) { areaVal = length*breadth*height; } … } Quá tải phương thức public void Add(int number1, int number2) { sum = number1 + number2; } public void Add(string value1, string value2) { int sum; sum = Int32.Parse(value1) + Int32.Parse(value2); Console.WriteLine ("Sum is {0}",sum); Console.WriteLine ("Strings are converted to integers to add”); } Đóng gói liệu với thuộc tính C# cung cấp khả bảo vệ trường liệu lớp, tránh truy cập trực tiếp cách đọc ghi tới trường thông qua Properties  Properties thiết kế nhắm vào hai mục đích:    Cung cấp giao diện đơn cho phép truy cập biến thành viên Tuy nhiên cách thức thực thi truy cập giống phương thức liệu che dấu, đảm bảo cho yêu cầu thiết kế hướng đối tượng 23 4/10/2012 Đóng gói liệu với thuộc tính public class Employee { private string fullName; public string GetFullName() { return fullName; } public void SetFullName (string s) { fullName = s; } Sử dụng phương thức để truy cấp đến trường private, phương pháp truyền thống } Đóng gói liệu với thuộc tính < Bổ từ truy cập > { get { } set { } }  private, public, protected hay internal, kiểu C# Đóng gói liệu với thuộc tính public class Employee { private string fullName; // Property for fullName public string Name { get { return fullName; } set { fullName = value;} } } Định nghĩa Property chương trình client truy cập static void Main() { Employee p = new Employee(); p.Name = “Tom”; Console.WriteLine (p.Name); } 24 4/10/2012 Đóng gói liệu với thuộc tính  Các kiểu thuộc tính Read/Write Read-Only Write-Only Read/Write Property  Tồn hai khối get set Read-Only Property  Chỉ tồn khối get public class Employee { private string fullName; // read-only Property for fullName public string Name { get { return fullName; } } } 25 4/10/2012 Write-Only Property  Chỉ tồn khối set public class Employee { private string fullName; // write-only Property for fullName public string Name { set { fullName = value; } } } Các trường đọc using System; namespace StaticPublicConstants { public class RightNow { // public member variables public static int Year; public static int Month; public static int Date; public static int Hour; public static int Minute; public static int Second; static RightNow( ) { System.DateTime dt = System.DateTime.Now; Year = dt.Year; Month = dt.Month; Date = dt.Day; Hour = dt.Hour; Minute = dt.Minute; Second = dt.Second; } } Các trường đọc public class Tester { static void Main( ) { Console.WriteLine( "This RightNow.Year.ToString( RightNow.Year = 2009; Console.WriteLine( "This RightNow.Year.ToString( } // kết thúc main } // kết thúc lớp Tester } // kết thúc namespace year: {0}", ) ); year: {0}", ) ); Output: This year: 2008 This year: 2009 26 4/10/2012 Các trường đọc Để cho chương trình client phép đọc tránh thay đổi giá trị thuộc tính year, khai báo sau public static readonly int Year; // thuộc tính đọc  Lúc thay đổi RightNow.Year = 2009; // lỗi  Cấu trúc lớp nhìn từ Cấu trúc lớp từ phía người dùng 27 4/10/2012 Tóm tắt chương Đối tượng  Lớp  Phương thức thiết lập, tải  Thuộc tính  Thành phần Static  Truyền tham số  Q&A Thank you all for your attention and patient ! 28 ... thức thiết lập using System; public class Thang { private int days; public Thang(int songay) { days = songay; } static void Main() { Thang thang1 =new Thang (31 ); Thang thang4 = new Thang (30 ); Console.WriteLine... ThoiGianHienHanh() { Console.WriteLine(“Hien thi thoi gian hien hanh”); } } Ví dụ: lớp thời gian public class Tester { static void Main() { ThoiGian t = new ThoiGian(); t.ThoiGianHienHanh();... taikhoan tk1 = new taikhoan(); taikhoan tk1 ; tk1 = new taikhoan(); Truy cập đến thành phần  . Ví dụ: lớp thời gian using System; public class ThoiGian { int Nam; int Thang;

Ngày đăng: 27/05/2014, 14:58

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan