Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 81 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
81
Dung lượng
1,3 MB
Nội dung
Lập trình hướng đối tượng – Tran Thong - Khoa CNTT-DHDL 2006 Hướng dẫn học mơn Ngun lý lập trình Thực hành nguyên lý lập trình Đánh giá: 9 9 Thi máy kì(30% điểm) cho mơn ngun lý lập trình Thi viết cuối kì(70% điểm) cho mơn ngun lý lập trình Thi máy cuối kì(100% điểm) cho mơn thực hành ngun lý lập trình Có thêm kiểm tra trình thực hành cộng điểm vào thi kì cuối kì Tài liệu tham khảo Bài giảng mơn ngun lý lập trình Download eBook “Wrox Press - Professional C#, 3rd Edition.pdf ” đường dẫn sau \\192.168.6.1\cisco\Downloads MSDN-Microsoft Development Networks Website: http://www.codeproject.com Một số sourcecode mẫu cung cấp trình học Thực hành Bao gồm lab Download lab địa http://192.168.6.1/NLLT2/labX.htm Trong X thứ tự lab Ngơn ngữ minh họa cho lập trình hướng đối tượng: C#(C Sharp) Môi trường thực hành Visual Studio 2003 2005 Trang Lập trình hướng đối tượng – Tran Thong - Khoa CNTT-DHDL 2006 PHẦN 1: NGÔN NGỮ C# C# Net 1.1 Nền tảng Net Khung Net tảng phát triển ứng dụng cung cấp giao tiếp lập trình ứng dụng cho dịch vụ lớp API hệ điều hành Windows Chúng hỗ trợ COM+, phát triển ứng dụng Web, XML, thiết kế hướng đối tượng hỗ trợ giao thức dịch vụ Web SOAP, WSDL, UDDI 1.2 Khung Net Net không hỗ trợ độc lập ngôn ngữ mà cịn tích hợp nhiều ngữ nghĩa khác Điều cho phép thực kế thừa từ lớp, xử lý biệt lệ tính đa hình theo nhiều ngữ nghĩa khác .Net cung đặc tả gọi Common System Type(CTS) mà tất thành phần Net phải tuân theo CTS hỗ trợ khái niệm tổng quát lớp, giao tiếp, (ủy nhiệm)delegate, kiểu tham chiếu kiểu giá trị Ngồi ra, Net cịn cung cấp Common Language Specification (CLS) cung cấp luật để đáp ứng u cầu tích hợp ngơn ngữ ngơn ngữ lập trình hệ thống khác Hình sau biểu diễn cấu trúc Net Hình 1.1: Kiến trúc khung Net 1.3 Biên dịch Điểm tập trung tảng Net môi trường thực việc thực thi ứng dụng gọi CLR(Commong Language Runtime-CLR) Trong Net chương trình khơng biên dịch thành tập tin thực thi, chúng biên dịch theo hai bước: Trang Lập trình hướng đối tượng – Tran Thong - Khoa CNTT-DHDL 2006 Biên dịch mã nguồn thành IL(Intermediate Language) Dùng CLR để biên dịch IL thành mã máy theo tảng thích hợp Việc thực cung cấp nhiều thuận lợi cho Net như: Độc lập tản phần cứng Nâng cao hiệu suất Giúp cho ngôn ngữ phát triển ngơn ngữ lập trình khác tương tác với Một số đặc trưng quan trọng IL: Hướng đối tượng sử dụng interface Phân biệt rõ ràng kiểu tham biến tham trị Hổ trợ nhiều kiểu liệu khác Quản lý lỗi thông qua xử lý biệt lệ Các kiểu Net 1.4 Ngôn ngữ C# Ngôn ngữ C# hỗ trợ cấu trúc, dựa thành phần, OOP khái niệm ngơn ngữ lập trình đại Đặc trưng khái niệm quan trọng OOP hỗ trợ định nghĩa làm việc với lớp Lớp định nghĩa kiểu cho phép mở rộng ngơn ngữ theo mơ hình tốt nhằm giải vấn đề gặp phải Trang Lập trình hướng đối tượng – Tran Thong - Khoa CNTT-DHDL 2006 Assembly tập tập tin cung thư viện liên kết động cho người dùng Trong Net, assembly đơn vị cho việc tái sử dụng mã, bảo mật, phát triển xác định phiên Hỗ trợ truy xuất nhớ trực tiếp tương tự khái niệm trỏ c++ Tạo ứng dụng C# Đầ tiên viêt chương trình ứng dụng “Hello World” đơn giản sử dụng C#: class HelloWorld { static void Main( ) { System.Console.WriteLine("Chuong Trinh Dau Tien"); System.Console.Readline(); } } 2.1 Lớp, đối tượng kiểu Điều cần thiết ngơn ngữ lập trình hướng đối tượng tạo kiểu liệu Các kiểu biểu diễn cho trừu tượng(bảng liệu, luồng) hay rõ ràng(cửa sổ, nút lệnh) Một kiểu định nghĩa đặc trưng hành vi cho Tương tự ngơn ngữ lập trình hướng đối tượng khác, C# kiểu gọi lớp(Class) Trong thể cá thể gọi đối tượng(object) Chưong trình khai báo kiểu đơn giản: lớp HelloWorld sử dụng từ khóa class tên “HelloWorld” Sau định nghĩa thuộc tính hành vi lớp Định nghĩa thuộc tính hành vi lớp C# phải bao {} 2.1.1 Phương thức Mỗi lớp có thuộc tính hành vi Hành vi định nghĩa phương thức thành viên lớp Một phương thức hàm sở hữu lớp mà định nghĩa Thỉnh thoảng người ta gọi phương thức thành viên hàm thành viên Hàm thành viên định nghĩa lớp làm hành vi nào? Thơng thường phương thức tên hành động ví dụ WriteLine Tuy nhiên chúng tên đặc biệt Main() Khai báo phương thức liên lạc người tạo sử dụng phương thức Để khai báo phương thức cần kiểu giá trị trả theo sau tên Một phương thức Trang Lập trình hướng đối tượng – Tran Thong - Khoa CNTT-DHDL 2006 có tham số hay khơnng Ví dụ sau hàm với tham số kiểu nguyên phương thức trả giá trị kiểu nguyên int TinhTong(int n); Nếu hàm khơng trả giá trị trả kiểu void void HienThi( ); 2.1.2 Chú thích Chú thích sử dụng C# tương tự C++ Dùng // thích cho dịng /* */ cho đoạn Ví dụ sau minh họa sử dụng thích C# class Hello { static void Main( ) { /* Chương trình hiển thị chuỗi hình */ System.Console.WriteLine("Chuong Trinh Dau Tien"); } } 2.1.3 Ứng dụng dòng lệnh (Console) Ứng dụng dòng lệnh ứng dụng khơng có giao diện người dùng Việc xuất nhập thơng qua dịng lệnh chuẩn Phương thức Main() ví dụ “Hello World” viết chuỗi “Chuong Trinh Dau Tien” lên hình Màn hình quản lý đối tượng tên Console Đối tượng có phương thức WriteLine(), nhận chuỗi ghi chúng thiết bị xuất chuẩn(màn hình) 2.1.4 Khơng gian tên Console phần FCL Mỗi lớp có tên FCL chứa hàng ngàn tên ArrayList, HashTable… C# cung cấp không gian tên cho việc quản lý tên Trong ví dụ đối tượng Console hạn chế không gian tên System sử dụng theo đoạn mã sau: System.Console.WriteLine(); Trang Lập trình hướng đối tượng – Tran Thong - Khoa CNTT-DHDL 2006 2.1.5 Tốn tử “.” Trong ví dụ tốn tử “.”được sử dụng để truy cập phương thức liệu lớp(phương thức WriteLine()) hạn chế tên lớp khơng gian tên đặc biệt( vị trí Console không gian tên System) Trong nhiều trường hợp, không gian tên chia thành khơng gian Ví dụ không gian tên System chứa số không gian tên Configuration, Collections không gian tên Collections lại chứa không gian tên khác 2.1.6 Từ khóa using Trong ví dụ 2-1 sử dụng từ System trước Console dùng từ khóa using để ta sử dụng kiểu không gian tên System cách ghi: using System Ví dụ sử dụng từ khố using sau using System; class Hello { static void Main( ) { Console.WriteLine("Chuong Trinh dau Tien"); } } 2.1.7 Quy ước đặt tên C# phân biệt chữ hoa chữ thường Nghĩa viết WriteLine() thí khác writeLine() Do cần có quy ước cách đặt tên biến, hằng, hàm 2.1.8 Từ khóa static Phương thức Main() ví dụ 2-1 có nhiều chức khác Trước từ khóa void thấy từ khóa static static void Main() Từ khóa static gọi Main() mà khơng cần tạo đối tượng kiểu Hello Chúng ta sử dụng từ khóa muốn gọi phương thức lớp mà không cần tạo đối tượng Trang Lập trình hướng đối tượng – Tran Thong - Khoa CNTT-DHDL 2006 2.2 Cách chạy chương trình “Hello world” Để thực chương trình sử dụng Visual Studio Net Intergated Development Environment (IDE) công cụ Visual Studio.Net IDE cung cấp công cụ mạnh cho việc dị lỗi cơng cụ hỗ trợ khác 2.2.1 Soạn thảo chương trình “Hello Wolrd” • Chạy chương trình IDE Chọn Visual Studio Net từ thực đơn Start • Chọn FilNewỈProject Chọn kiểu dự án Visual C# Project dạng Console Application hình 2-1 Chúng ta nhập vào tên dự án đường dẫn để lưu trữ dự án Sau chọn nút OK, cửa sổ xuất hình 2.2 Hình 2-1:Tạo ứng dụng dịng lệnh Visual Studio.Net Hình 2.2: Cửa sổ soạn thảo cho dự án • Sau đưa lệnh sau vào hàm Main() System.Console.WriteLine("Chuong Trinh Dau Tien"); Trang Lập trình hướng đối tượng – Tran Thong - Khoa CNTT-DHDL 2006 2.2.2 Biên dịch chạy chương trình “Hello Wolrd” Có nhiều cách để biên dịch chạy chương trình Visual Studio Net • Chọn Ctl+Shift+B hay BuildỈbuild từ thực đơn • Chọn nút Build hình 2-3 Hình 2-3: Nút build Để chạy chương trình mà khơng thực dị lỗi: • Nhấn Ctrl + F5 hay DebugỈStart Without Debugging từ thực đơn • Chọn nút Start Without Debugging hình 2-4 Hình 2-4: Nút Start Without Debugging 2.3 Sử dụng cơng cụ dị lỗi Visual Studio Net kỹ quan trọng dị lỗi: • Bằng cách đặt điểm dừng(breakpoint) chạy điểm dùng nào? • Bằng cách chạy bước qua lời gọi phương thức • Bằng cách kiểm tra thay đổi giá trị biến, liệu thành viên lớp Trang Lập trình hướng đối tượng – Tran Thong - Khoa CNTT-DHDL 2006 Dò lỗi thực theo nhiều cách Thơng thường qua thực đơn Đơn giản đặt điểm dùng bên thước trái Ví dụ hình 2-5 Hình 2-5: Một điểm dừng Để chạy Debug nhấn F5 sau chương trình chạy đến điểm dừng hình 2.6 Hình 2-6: Chọn điểm dừng Bằng cách đặt chuột vào vị trí biến thấy giá trị biến hình 2-7 Hình 2-7: Hiển thị giá trị Trình dị lỗi Visual Studio Net cung cấp số cửa sổ hữu dụng khác để dó lỗi cửa sổ Local để dị biến cục hình 2.8 Hình 2-8: Cửa sổ Local Chúng ta mở rộng cửa sổ để xem chi tiết thông tin biến hình 2-9 Hình 2-9: Mở rộng cửa sổ Local Trang Lập trình hướng đối tượng – Tran Thong - Khoa CNTT-DHDL 2006 Chúng ta lặp qua phương thức nhấn F11 Ví dụ lặp qua phương thức DrawWindow() lớp WindowClass hình 2-10 Hình 2-10: Lặp qua phương thức Cơ sở ngôn ngữ C# 3.1 Kiểu C# bắt buộc phải khai báo kiểu cho kiểu đối tượng tạo (nguyên, thực, chuỗi, cửa sổ, nút lệnh) Trong c# có kiểu: • Kiểu xây dựng sẵn • Kiểu người dùng tạo C# chia kiều thành loại: • Kiểu giá trị • Kiểu tham chiếu Trang 10 Lập trình hướng đối tượng – Tran Thong - Khoa CNTT-DHDL 2006 public interface IHinhHoc { double DienTich(); } } Nội dung lớp HinhTamGiac using System; namespace DoiTuongHinhHoc.DTHH { public class HinhTamGiac:IHinhHoc { public double a; public double b; public double c; public double p { get { return ChuVi()/2; } } public HinhTamGiac() { } public HinhTamGiac(double c1, double c2, double c3) { this.a = c1; this.b = c2; this.c = c3; } public double ChuVi() { return a+b+c; } public double DienTich() { return Math.Round(Math.Sqrt(p*(p-a)*(p-b)*(p-c)),2); } public override string ToString() { return "Tam giác co canh (" + a + "," + b + "," + c + ") dien tich " + this.DienTich(); } } } Nội dung lớp HinhVuong using System; namespace DoiTuongHinhHoc.DTHH { public class HinhVuong:IHinhHoc { Trang 67 Lập trình hướng đối tượng – Tran Thong - Khoa CNTT-DHDL 2006 public double a; public HinhVuong() { } public HinhVuong(double canh) { this.a = canh; } public virtual double DienTich() { return Math.Round(a*a,2); } public override string ToString() { return "Hinh vuong co canh " + a + " dien tich " + this.DienTich(); } } } Nội dung lớp HinhChuNhat using System; namespace DoiTuongHinhHoc.DTHH { public class HinhChuNhat:HinhVuong { double b; public HinhChuNhat() { } public HinhChuNhat(double a, double b) { this.a = a; this.b = b; } public override double DienTich() { return Math.Round(a*b,2); } public override string ToString() { return "Hinh chu nhat co canh (" + a + "," + b +") dien tich " + this.DienTich(); } } } Nội dung lớp HinhTron using System; namespace DoiTuongHinhHoc.DTHH { public class HinhTron:IHinhHoc { Trang 68 Lập trình hướng đối tượng – Tran Thong - Khoa CNTT-DHDL 2006 public double R; public HinhTron() { } public HinhTron(double bankinh) { this.R = bankinh; } public double DienTich() { return Math.Round(Math.PI*R*R,2); } public override string ToString() { return "Duong tron co ban kinh " + R + " dien tich " + this.DienTich(); } } } Nội dung lớp TongDienTich using System; using System.Collections; using SapXepDoiTuong; namespace DoiTuongHinhHoc.DTHH { public class TongDienTich:IComparer { private ArrayList a = new ArrayList(); public IEnumerator GetEnumerator() { return a.GetEnumerator(); } public TongDienTich() { a.Add(new HinhTron(3)); a.Add(new HinhTron(7)); a.Add(new HinhTron(6)); a.Add(new HinhTamGiac(3,4,5)); a.Add(new HinhVuong(8)); a.Add(new HinhTron(5)); a.Add(new HinhChuNhat(3,4)); } int IComparer.Compare(object a, object b) { IHinhHoc x = (IHinhHoc)a; IHinhHoc y = (IHinhHoc)b; if(x.DienTich() > y.DienTich()) return 1; if(x.DienTich() < y.DienTich()) return -1; return 0; } public void SapXep() { a.Sort(this); } public double TinhTongDienTich() Trang 69 Lập trình hướng đối tượng – Tran Thong - Khoa CNTT-DHDL 2006 { double tong=0; for(int i=0; i =0) return (SinhVien)ds[vt]; else return null; } } public LopSinhVien() { /* ds.Add(new SinhVien("001","Thanh",true)); ds.Add(new SinhVien("002","Tuyet",false)); ds.Add(new SinhVien("003","Phung",false)); ds.Add(new SinhVien("004","Anh",true)); */ DocFileDSSV(); } public void Add(SinhVien a ) { ds.Add(a); } public void DocFileDSSV() { Stream s = File.Open("C:\\Data\\dssv.dat",FileMode.Open); IFormatter ib = new BinaryFormatter(); ds = (ArrayList)ib.Deserialize(s); s.Close(); //Console.WriteLine("Doc file C:\\Data\\dssv.dat cong "); } public void LuuDSSV() { Stream s = File.Open("C:\\Data\\dssv.dat",FileMode.Create); IFormatter ib = new BinaryFormatter(); ib.Serialize(s,ds); s.Close(); //Console.WriteLine("Luu danh sach sinh vien xuong file C:\\Data\\dssv.dat cong "); } public void NhapDanhSachLopSinhVien() { int n; Console.Write("\nNhap vao so luong can nhap "); n = int.Parse(Console.ReadLine()); for( int i = 0; i< n; i++) { Console.WriteLine("Nhap sinh vien thu {0} ", ds.Count +i +1); this[ds.Count + i].Nhap(); Trang 76 Lập trình hướng đối tượng – Tran Thong - Khoa CNTT-DHDL 2006 } } private bool XoaTaiViTri(int index) { if(index < || index > ds.Count) return false; for(int i = index; i < this.ds.Count -1; i++) this[i] = this[i + 1]; //this.this[ds.Count-1] = null; //ds.Count ; return true; } private int TimViTriTheoMaSo(string maso) { for(int i =0; i < this.ds.Count; i++) if(this[i].maso.CompareTo(maso)==0) return i; return -1; } public bool XoaTheoMaSo(string maso) { return XoaTaiViTri(TimViTriTheoMaSo(maso)); } public override string ToString() { string s= ""; for( int i=0; i< ds.Count; i++) s += "\n" + this[i]; return s; } } } Nội dung lớp DangKyHocPhan using System; namespace QuanLySinhVien { public class DangKyHocPhan { public string masv; public string mahp; public float diem; public DangKyHocPhan() { } public DangKyHocPhan(string masomasv, string mamahp) { this.masv = masomasv; Trang 77 Lập trình hướng đối tượng – Tran Thong - Khoa CNTT-DHDL 2006 this.mahp = mamahp; } public DangKyHocPhan(SinhVien masv, HocPhan mahp) { this.masv = masv.maso; this.mahp = mahp.maHocPhan; } public DangKyHocPhan(SinhVien masv, HocPhan mahp, float diem) { this.masv = masv.maso; this.mahp = mahp.maHocPhan; this.diem = diem; } } } Nội dung lớp DSDangKyHocPhan using System; namespace QuanLySinhVien { public class DSDangKyHocPhan { public LopSinhVien k28 = new LopSinhVien(); DanhSachHocPhan hp = new DanhSachHocPhan(); DangKyHocPhan []ds = new DangKyHocPhan[100]; public int soluong; public DangKyHocPhan this[int index] { get { if(index>=0 && index< soluong) return ds[index]; else return null; } set { ds[index] = value; } } public DSDangKyHocPhan() { for(int i =0; i < 100; i++) this[i] = new DangKyHocPhan(); this[0] = new DangKyHocPhan(k28[0],hp[0],7); this[1] = new DangKyHocPhan(k28[0],hp[1]); this[2] = new DangKyHocPhan(k28[0],hp[2],3); this[3] = new DangKyHocPhan(k28[2],hp[0],4); this[4] = new DangKyHocPhan(k28[3],hp[3]); this[5] = new DangKyHocPhan(k28[3],hp[1],8); this[6] = new DangKyHocPhan(k28[3],hp[2]); this[7] = new DangKyHocPhan(k28[3],hp[0]); this[8] = new DangKyHocPhan(k28[0],hp[3]); soluong = 9; Trang 78 Lập trình hướng đối tượng – Tran Thong - Khoa CNTT-DHDL 2006 } public string DSDangKyHocPhanTheoMon(string mahp) { string s = ""; for(int i=0; i < soluong; i++) if(ds[i].mahp.CompareTo(mahp)==0) s+= k28[ds[i].masv] + "\t" + hp[ds[i].mahp] + "\t" +ds[i].diem+ "\n"; return s; } public void ThongKeSoLuongDangKyHocPhan() { for(int i=0; i< this.hp.soluong; i++) { int dem =0; for(int j=0; j < this.soluong; j++) { if(this.hp[i].maHocPhan.CompareTo(this[j].mahp)==0) { dem++; } } Console.WriteLine("Co {0} sinh vien dang ki hoc phan {1}",dem,this.hp[i].ten); } } public void DanhSachDangKyHocPhanCua1SV(string maso) { SinhVien x = this.k28[maso]; if(x==null) { Console.WriteLine("Khong co sinh vien co ma so " + maso + " danh sach"); return; } Console.WriteLine("KET QUA DANG KY HOC PHAN "); Console.WriteLine("Ma So: " + maso); Console.WriteLine("Ten: " + x.Ten); Console.WriteLine("Gioi Tinh: " + x.GT(x.gioitinh)); int tongtc =0; string s=""; for(int i=0; i