36
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bài 1 Giới thiệu ngôn ngữ lập trình C# Nội dung Giới thiệu C# .NET và C# Ví dụ đơn giản – Giải thích Hướng dẫn sử dụng Visual Studio.NET Một số ví dụ khác

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

  • Upload
    jorryn

  • View
    46

  • Download
    0

Embed Size (px)

DESCRIPTION

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG. Bài 1 Giới thiệu ngôn ngữ lập trình C# Nội dung Giới thiệu C# .NET và C# Ví dụ đơn giản – Giải thích Hướng dẫn sử dụng Visual Studio.NET Một số ví dụ khác. Giới thiệu C#. - PowerPoint PPT Presentation

Citation preview

Page 1: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Bài 1 Giới thiệu ngôn ngữ lập trình C#

Nội dung

Giới thiệu C#

.NET và C#

Ví dụ đơn giản – Giải thích

Hướng dẫn sử dụng Visual Studio.NET

Một số ví dụ khác

Page 2: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Giới thiệu C#

Ngôn ngữ C/C++ : viết mã, biên dịch thành dạng nhị phân chỉ thực hiện trên 1 hệ điều hành cụ thể

Có khả năng xâm phạm hệ thống, gây ra các lỗi hệ thống ‘treo’, không bảo mật

Cơ chế cấp phát bộ nhớ và quản lý biến con trỏ !!!

Page 3: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Ưu điểm của C# và .NETChương trình C# được biên dịch thành 1 mã

trung gian Microsoft Intermediate Language- MSIL . Sau đó được thi hành trong môi trường CLR (Common Language Runtime), từ đó chuyển sang mã lệnh tương ứng hệ điều hành

Môi trường .NET cho phép nhiều ngôn ngữ chia sẻ chung thư viện sử dụng (C#,VB.NET)

Chương trình C#,VB.NET thi hành bên trong CLR không có khả năng ‘xâm phạm’ hệ thống : bảo mật, an toàn,…

Page 4: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Môi trường .Net và C# • Hỗ trợ xuyên ngôn ngữ - Cross Language

Support.Tất cả ngôn ngữ .NET đều dựa trên cùng 1 hệ thống kiểu cơ bản làm nền tảng. Do vậy chúng có thể sử dụng dễ dàng, hoặc tích hợp cùng với các mã lệnh viết bằng 1 ngôn ngữ .NET khác. Ngôn ngữ NET bao gồm C#, Visual Basic.Net và managed C++.

• Sử dụng các chuẩn chung trên Internet.Net hỗ trợ cho ngôn ngữ XML, là dạng thức định dạng thông tin trên Internet. Ngoài ra cũng tích hợp hỗ trợ cho mô hình SOAP.

• Sử dụng Metadata có khả năng lắp ghép.Các thành phần của NET được thiết kế như các thành phần có thể lắp ghép được do vậy tạo thuận lợi cho người lập trình.

Page 5: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

• Thi công dễ dàngDựa vào tính năng metadata.

• Kiểm tra kiểu dữ liệu - Type CheckingCLR-common language runtime-sẽ tiến hành kiểm tra chặt chẽ các đối tượng được sử dụng , tất cả các đối tượng đều bắt nguồn từ 1 một lớp tổ tiên chung là object – tương tự như trong Java

• Quản lý bộ nhớ và thu gom rác(Memory Management, Garbage Collection)CLR cũng quản lý bộ nhớ, thu gom rác. Thu gom rác tự động thực hiện giải phóng 1 đối tượng khi phát hiện đối tượng không còn sử dụng.

Page 6: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Ví dụ đơn giản C#

// Hello World - A first program

class HelloWorld{ public static void Main() { System.Console.WriteLine("Hello World"); }

}

Page 7: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Từ khóa class bắt đầu phần định nghĩa lớp. Lớp có thể xem là 1 tổ chức dữ liệu mở rộng chứa các phương thức (methods) cùng các thành phần thuộc tính (members,properties).

Thông thường tên lớp thường sử dụng ký tự hoa ở đầu mỗi từ. Do vậy trong ví dụ trên tên lớp của ta là HelloWorld hơn là helloWorld, helloworld hay hElLoWoRld.

Lưu ý : Trong C#, 1 lớp được định nghĩa trong 1 tập tin (khác với C++ thường có 2 tập tin:tập tin khai báo dùng để include và tập tin cài đặt. Trong C# không kết thúc định nghĩa lớp bằng 1 dấu ; như trong C++.

Page 8: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Phương thức Main

Bên trong phần định nghĩa lớp HelloWorld có phương thức Main.

Một phương thức có thể gọi thi hành nhằm thực hiện 1 nhiệm vụ nào đó. Trong ví dụ này phương thức Main sẽ in chuỗi "Hello World".

Phương thức Main là 1 phương thức đặc biệt trong C#, đây chính là ‘điểm vào’ (entry point – phương thức đầu tiên được thi hành) trong 1 chương trình. Khi gọi thi hành 1 chương trình C# thì phương thức Main sẽ là phương thức thi hành đầu tiên.

Page 9: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Từ khóa public :mô tả phạm vi hoạt động của 1 thành phần hay 1 phương thức thuộc 1 lớp. Trong ví dụ này, hàm Main có thể được gọi thi hành từ bất kỳ nơi đâu trong chương trình. (Các từ khóa khác có liên quan sẽ bàn thảo sau)

Từ khóa static : mô tả hàm Main có thể được gọi thi hành ngay mà không cần thiết phải tạo 1 thể hiện (1 đối tượng) của lớp.

Từ khóa void : tương tự như C/C++.

Lưu ý : Tạm thời ta chỉ cần quan tâm khai báo hàm Main như sau là đủ

static public void Main()

public , static ???

Page 10: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Lưu ý với C/C++ Programmers: Ký tự đầu tiên của main là ký tự hoa. Trong C/C++, nó là ký tự thường.

Lưu ý với C++ Programmers: Hàm Main định nghĩa bên trong 1 lớp , Tương tự như Java, hoàn toàn không có 1 hàm nào nằm ngoài 1 lớp.

Xem dòng lệnh sau :System.Console.WriteLine("Hello World");

-Gọi thực hiện phương thức WriteLine của lớp Console trong không gian tên System với tham số của phương thức là "Hello World". -Console là một lớp của thư viện .Net Class Framework. Lớp này cung cấp phương thức WriteLine dùng để in 1 chuỗi ra 1 cửa sổ lệnh

Page 11: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Không gian tên (namespace)Mục đích : - Nhóm lại (grouping) các lớp được tạo ra từ NSD - Tránh trùng lặp tên - Phân biệt rõ ràng - Mô tả vị trí của các lớp trong nhómVí dụ - Tạo lớp mô tả mèo nhà Cat có phương thức Speak() không gian tên Animal.Pet - Tạo lớp mô tả mèo rừng Cat có phương thức Speak() không gian tên Animal.WildNếu sử dụng 2 lớp này trong cùng 1 chương trình ???? Animal.Pet.Cat.Speak(); Animal.Wild.Cat.Speak();

Page 12: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Sử dụng chỉ thị usingVới chương trình trước, khi sử dụng lớp Console, ta cần khai báo vùng không gian tên của Console- trong trường hợp này là SystemNếu chương trình nhỏ : không đáng quan tâmNếu chương trình lớn : rất nhiều từ System xuất hiện !!!!

Giải quyếtSử dụng chỉ thị using <vùng không gian tên> ;Ý nghĩa : Các lớp được sử dụng trong chương trình mà thuộc vùng không gian tên đã nêu thì không cần phải mô tả tên vùng không gian đi trước nó nữa

Page 13: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Viết lại ví dụ HelloWorld

using System;

class HelloWorld{public static void Main()

{Console.WriteLine("Hello World");}

}

Page 14: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Hướng dẫn sử dụng phần mềm C#1) Khởi động phần mềm Visual Studio.NET. Chọn New Project

Page 15: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

2) Chọn "Visual C# Projects".

Page 16: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

3) Chọn “Console Application” : Chương trình cho phép nhập dữ liệu và in kết quả ra 1 cửa sổ lệnh (tương tự cửa sổ DOS trong Windows), dạng Console App không có phần giao tiếp đồ họa với NSD

Page 17: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

4) Trong hộp Name, nhập vào HelloWorld. Trong ví dụ sau, hãy nhập Lesson2 vào hộp Solution Name. Bấm OK

Page 18: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Kết quả : Một giải pháp (solution) được tạo ra với tên là Lesson2. Lesson2 sẽ quản lý các vùng không gian tên và các lớp được tạo ra Trong ví dụ đang xet, ta chỉ tạo ra 1 không gian tên và 1 lớp Cần lưu ý là 1 không gian tên (namespace) sẽ ứng với 1 folder thuộc hệ thống file trên máy tính. Như trong ví dụ này không gian tên HelloWorld sẽ ứng với folder HelloWorld

Page 19: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

5) Visual Studio tự động tạo 1 chương trình nguồn với tên tập tin lớp là Class1. Lưu ý là chỉ thị "using System" được động đưa vào chương trình. (Đây là chỉ thị thường sử dụng , nó cho phép ta dùngkhá nhiều thư viện lớp của môi trường .NET mà không cần phải mô tả rõ System

Page 20: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

6) Lưu ý quan trọng : Visual Studio đặt sẵn 1 tên mặc định Class1. Trong ví dụ, ta cần đổi tên lại là "Hello". Bấm chuột chọn Class1 trong cửa sổ Solution Explorer. Trong cửa sổ Properties bấm vào vùng file name và đổi tên lại là Hello.cs. Bấm nút Enter sau khi nhập vào "Hello.cs". Qui ước : phần mở rộng là ".cs"

Page 21: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Page 22: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

7) Mở tập tin nguồn Hello.cs , đổi tên lớp thành "Hello".8) Xóa bỏ dòng [STAThread]. (Sẽ bàn đến trong các bài sau).9) Lưu ý rằng Visual Studio đã tạo sẵn 1 phương thức Main rỗng

(chưa có dòng lệnh nào). Nhập chương trình HelloWorld vào vị trí dòng ghi chú "TODO" comment.

10) Khi nhập vào "Console.". (từ Console sau đó là 1 dấu chấm), 1 cửa sổ popup xuất hiện với các gợi ý cho lớp Console (phương thức, thuộc tính,…gọi là Intellisense). Gõ w, sau đó chọn WriteLine. Ấn Enter.

Page 23: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

11) Gõ vào ký tự "(". Phương thức WriteLine có nhiều dạng (gọi là overload : cùng tên nhưng khác tham số). Ta có thể dùng các phím mũi tên để chọn lựa các dạng sử dụng của phương thức này

Page 24: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

12) Trong ví dụ này, ta sử dụng dạng phưong thức WriteLine với 1 tham số là 1 chuỗi. Nhập "Hello World", sau đó là ký tự ")", kết thúc câu lệnh bằng ";". (Tất cả các biểu thức của C# đều kết thúc bằng ký tự “;”

Page 25: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

13) Biên dịch chương trình : bấm chọn Build/ Build Solution. Nếu không có trục trặc gì về cú pháp, một thông báo cho biết quá trình biên dịch thành công sẽ xuất hiện ở cửa sổ Output Screen

Page 26: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Page 27: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

14) Thi hành chương trình : bấm chuột chọn Debug/Start Without Debugging. Cửa sổ kết quả xuất hiện cùng với dòng thông báo "Hello World".

Page 28: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG
Page 29: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Một số ví dụ minh họa

• Các ví dụ minh họa đơn giản

• Các ví dụ minh họa về Stack

• Các ví dụ minh họa về ArrayList

Xem Demo1.sln

Page 30: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

using System;namespace Demo1{

public class Tuoi{

public Tuoi(){ }static void Main(){System.Console.Write ("Nhap ho ten cua ban : ");String ht;ht=Console.ReadLine();Console.Write(ht+ " sinh nam nao : ");int ns = Int32.Parse(Console.ReadLine());Console.WriteLine("Nam nay ban duoc "+(2005-ns)+" tuoi");Console.ReadLine();

}}

}

Page 31: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

using System;namespace Demo1{ public class Giaithua

{static long GT(int k) { long kq=1;for(int i=1;i<=k;i++) kq=kq*i;return kq; }public Giaithua(){}static void Main() { int n; Console.Write("Nhap so n can tinh giai thua : ");

n =Int32.Parse(Console.ReadLine()); Console.WriteLine(n + "! = "+GT( n)); Console.ReadLine(); }} }

Page 32: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

using System;using System.Collections ;namespace Demo1{

class MyStack{static String[] data={"12.5","2.2","+","8.5","-"};static Stack st;static void process(String s)

{float num1 = Single.Parse(((String)st.Pop()));float num2 = Single.Parse(((String)st.Pop()));float kq=0;if (s=="+") kq=num1 + num2;if (s=="-") kq=num2 - num1;if (s=="x") kq=num1 * num2;if (s=="/") kq=num2 / num1;st.Push(kq.ToString ());return; }

Page 33: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

static void Main(string[] args){st = new Stack(); for (int i=0;i<data.Length ;i++){String token=data[i];switch (token)

{case "+": case "-": case "x": case "/": process(token);

break;default : st.Push(data[i]);}

}System.Console.WriteLine(st.Pop());Console.ReadLine(); }}}

Page 34: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

using System;using System.Collections; namespace Demo1{

class TinhTrang{public int sodia;public String cotdau, cotcuoi, cottrunggian;public TinhTrang(int sd,String dau,String cuoi, String tgian)

{sodia=sd;cotdau=dau;cotcuoi=cuoi;cottrunggian=tgian;}}public class ThapHaNoi{static Stack st= new Stack(); public ThapHaNoi(){}

Page 35: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

static void DiChuyen() { while (st.Count>0) { TinhTrang s= (TinhTrang)st.Pop(); if (s.sodia ==1) Console.WriteLine(s.cotdau + "---->"+s.cotcuoi); else { TinhTrang st1= new TinhTrang(s.sodia-1,s.cotdau,s.cottrunggian,s.cotcuoi); TinhTrang st2= new TinhTrang(1,s.cotdau,s.cotcuoi,s.cottrunggian); TinhTrang st3= new TinhTrang(s.sodia-1,s.cottrunggian,s.cotcuoi,s.cotdau); st.Push(st3); st.Push(st2); st.Push(st1); } }//while}//void DiChuyen

Page 36: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

static public void Main() { TinhTrang status= new TinhTrang(3,"A","C","B"); st.Push(status); DiChuyen(); Console.ReadLine(); }}//class}//namespace