1 / 37

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

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG. Bài 2 Các kiểu dữ liệu-Khai báo biến Nội dung - Các kiểu dữ liệu: giá trị , tham chiếu - Khai báo biến : qui tắc, cách đặt tên - Các kiểu dữ liệu cơ bản. Các kiểu dữ liệu. C# cung cấp 2 kiểu thể hiện dữ liệu

didier
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Bài 2 Các kiểu dữ liệu-Khai báo biến Nội dung - Các kiểu dữ liệu: giá trị , tham chiếu - Khai báo biến : qui tắc, cách đặt tên - Các kiểu dữ liệu cơ bản

  2. Các kiểu dữ liệu • C# cung cấp 2 kiểu thể hiện dữ liệu • Kiểu dữ liệu có sẵn – chuẩn . Ví dụ kiểu số nguyên : có thể lưu trữ 1 giá trị số nguyên. Ngoài thông tin lưu trữ ra , các biến kiểu này không có thêm bất kỳ thông tin nào khác • Kiểu do NSD định nghĩa , thường gọi là lớp (class): có thể chứa thông tin cùng nhiều nhiều thông tin khác

  3. Các kiểu dữ liệu(tt) • Ví dụ : Có thể xây dựng 1 lớp để thể hiện lớp mèo nhà , trong lớp này, ta có những thông tin như : tuổi, màu lông. Cũng tropng lớp này, ta lại mô tả những khả năng của lớp mèo như : kêu meo meo, ăn hay ngủ. • Các khả năng của 1 lớp  thiết kế và thi công : gọi là phương thức của 1 lớp. • Kiểu do NSD định nghĩa bao gồm các lớp và giao diện do người lập trỉnh xây dựng và đóng góp thêm vào thư viện .NET Framework

  4. Cách lưu trữ và truy xuất dữ liệu • Kiểu dữ liệu giá trị : lưu trữ trên stack, biến chứa giá trị trong chính nó • Kiểu dữ liệu tham chiếu: có 2 phần phần tham chiếu (con trỏ, số hiệu – handle) chứa trên stack, bản thân thông tin đối tượng lưu trữ trên heap (do C# quản lý). Phần tham chiếu  chứa địa chỉ của đối tượng trên heap • Satck được C# quản lý nhằm chứa tất cả các biến được tạo ra trong chương trình • Biến lưu trên heap được tạo bởi lập trình viên bằng cách sử dụng toán tử “new”

  5. Lưu trữ biến trên stack và heap • Biến kiểu nguyên (integer : kiểu giá trị) ,biến kiểu chuổi (string : kiểu tham chiếu), biến ký tự (kiểu giá trị)

  6. Sao chép dữ liệu – phép gán • Ngoài sự khác biệt về việc lưu trữ thông tin, kiểu giá trị và tham chiếu còn có khác biệt cơ bản trong thao tác “sao chép” • Khi 1 biến kiểu giá trị đưọc gán bởi 1 biến khác : Giá trị lưu trữ sẽ được sao chép từ biến này sang biến kia.

  7. Deep Copy • Cả 2 biến count1 và count2 đều có dữ liệu riêng của chúng, trong trường hợp này là 5. Vùng dữ liệu của 2 biến độc lập nhau. Nghĩa là nếu gán 6 cho count1 thì count2 vẫn có giá trị 5 • Kiểu sao chép này được gọi là “deep copy” (sao chép sâu): Giá trị, thông tin của biến dữ liệu được sao chép.

  8. Shallow Copy • Các biến tham chiếu thực hiện lệnh gán theo 1 cách khác • Lưu ý là kiêu tham chiếu gồm 2 thành phần : dữ liệu thực sử trên heap và địa chỉ tham chiếu đến vùng dữ liệu này chứa trong stack. • Khi gán 1 biến tham chiếu này cho biến tham chiếu khác : chỉ sao chép địa chỉ tham chiếu mà thôi  cả 2 biến đều tham chiếu đến cùng 1 vùng dữ liệu trên heap(shallow copy). • Ví dụ

  9. Ví dụ lệnh gán

  10. Ví dụ lệnh gán

  11. Ví dụ (phép gán với biến class) class Point { public int x,y; public Point(int u, int v){x=u;y=v;} }

  12. public class VD4 { static public void Main() { Point a=new Point (1,2); Point b=new Point (3,4); Point c=new Point (1,2); Console.WriteLine("a = b --> {0}", a= =b); Console.WriteLine("a = c --> {0}", a= =c);

  13. b=a; Console.WriteLine("a = b --> {0}", a==b); a.x++; b.y--; Console.WriteLine("a({0},{1}) b({2},{3})",a.x,a.y,b.x,b.y); Console.ReadLine(); } } Demo2.VD4

  14. Khai báo biến • Phần trình bày tiếp theo sẽ đề cập đến các vấn đề sau • Khai báo, sử dụng các kiểu có sẵn • Các qui tắc, các gợi ý khi khai báo và đật tên biến • Một số hiệu ứng khi thực hiện phép toán gán (=) • Như đã nói ở phần trên các kiểu built-in là các kiểu giá trị: 1 biến kiểu này có thể xem như 1 vùng nhớ chứa trực tiếp giá trị dữ liệu

  15. Khai báo biến (tt) • int count = 5;float temperature = 99.5F; • Giá trị kiểu float  phải theo sau bằng ký tự "F".Nếu không : hiểu là “doubles” • Kiểu double cũng chứa giá trị số thực nhưng có phạm vì biểu diễn rộng hơn và có độ chính xác cao hơn

  16. Ví dụ static public void Main() { float x=23.12345678F, y=23.12345679F; double x1=23.12345678, y1=23.12345679; Console.WriteLine(x= =y); Console.WriteLine(x1= =y1); Console.ReadLine(); } • Demo2.VD2

  17. Lưu trữ biến giá trị • Tóm lại : biến kiểu giá trị là 1 vùng bộ nhớ chứa • dữ liệu của chính nó cùng với 1 tên mô tả

  18. Qui tắc đặt tên biến • Vấn đề : tên phải đặt sao cho hợp lệ và có tính gợi nhớ, tránh sai sót • Qui tắc đật tên trong C# Tên (danh hiệu) bao gồm ký tự, ký số và lý tự gạch dướiunderscores (_). Tên(danh hiệu phải bắt đầu bằng 1 ký tự hay ký tự gạch dưới. Tên(danh hiệu) không được trùng với các từ khóa (keyword , reserved word).

  19. Tên biến nào hợp lệ? • int idnumber;int transaction_number;int __my_phone_number__;float 4myfriend;float its4me; double VeRyStRaNgE;float while;float myCash;int CaseNo;int CASENO;int caseno;

  20. Trả lời • int idnumber;      Hợp lệint transaction_number;        Hợp lệint __my_phone_number__;   Hợp lệfloat 4myfriend;     Không  Hợp lệfloat its4me;       Hợp lệdouble VeRyStRaNgE;       Hợp lệfloat while;      Không  Hợp lệfloat myCash;       Hợp lệ

  21. Lưu ý !!!! • C# phân biệt chữ thường chữ hoa, vì vậy các khai báo dưới đây sẽ tạo ra 3 biến khác biệt nhau int CaseNo; int CASENO; int caseno; • Do vậy tránh sử dụng những khai báo nhập nhằng như trên do có thể dẫn đến sai sót khi lập trình

  22. Thủ thuật đặt tên biến • Việc đặt tên biến rất quan trọng : sử dụng trong chương trình, tìm lỗi,bảo trì,… • Ví dụ :Biến lưu trữ năm sinh của 1 học viênnamSinhNamSinhNAMSINHnam_sinh _nam_sinh....Tất cả đều hợp lệ !!.

  23. Thủ thuật đặt tên biến (tt) • Qui tắc do Microsoft đề xuất : không bắt đầu bằng ký tự _, ký tự đầu tiên là ký tự thường, các ký tự đầu tiên trong các từ tiếp theo ở dạng chữ hoa.cabinPressurerestrictedTransactionTypebodyTemperaturenewYorkYankeesmomentOfInertiaaLengthyUnnecessaryLongVariableName • Tránh dùng lại 1 tên biến dù sử dụng tính chất : C# phân biệt ký tự thường/hoa. int namSinh , namsinh, NamSinh ;

  24. Các kiểu dữ liệu giá trị • KiểuKích cỡMô tả • bool 1 byte true or false • byte 1 byte Số nguyên không dấu (0-255) • char 2 bytes ký tự trong bảng mã Unicode • decimal 16 bytes độ chính xác đến 28 ký số • double 8 bytes số thực (chính xác gấp 2) • float 4 bytes số thực • int 4 bytes Số nguyên:-2 tỷ đến 2 tỷ (xấp xỉ) • long 8 bytes Số nguyên có dấu • sbyte 1 byte -128 đến 127 • short 2 bytes -32000 đến 32000 (xấp xỉ) • uint 4 bytes 0.. 4 tỳ • ulong 8 bytes Số nguyên không dấu • ushort 2 bytes Số nguyên từ 0..64000(xấp xỉ)

  25. Từ khoá (Keywords ) • abstract as base bool break byte case catch • char checked class const continue • decimal default delegate do double else • enum event explicit extern false finally • fixed float for foreach goto if implicit • in int interface internal is lock long • namespace new null object operator out • override params private protected public • readonly ref return sbyte sealed short sizeof stack • alloc static string struct switch this throw • true try typeof uint ulong unchecked • unsafe ushort using virtual void while

  26. Cú pháp khai báo biến giá trị • Cú pháp khai báo biến: <Kiểu dữ liệu> <tên biến>; • Ví dụ : int count; float bendingMoment; char myInitial; • Lưu ý : kết thức khai báo biến bằng ký tự ; • Các biến địa phương (local variables) là các biến nằm trong 1 phương thức (method) phải được khai báo trước khi sử dụng.

  27. Khởi tạo và phép gán • Khi khai báo và gán luôn giá trị cho 1 biến : thường gọi là khởi tạo biến(initialization). int count = 0; double bodyTemperature=99.5; //gọi là khởi tạo-initializationstring messages = "The elephant was pink"; • Cũng có thể khai báo và gán giá trị cho biến tại các phần khác nhau trong chương trình. • int count; //Khai báodouble bodyTemperature;string message;............count = 5;bodyTemperature = 101.5; //goi là phép gán - assignment.messages = "My eyes are red";

  28. Trong C#: Tất cả các biến đều phải lưu trữ dữ liệu nghĩa là chúng phải được khởi tạo hay gán trị trước khi sử dụng • Nếu không tuân thủ : thông báo lỗi từ trình dịch public static void Main() { int k; string s; Console.WriteLine(k); Console.WriteLine(s); } Demo2.VD3

  29. Trong C/C++: Biến có thể sử dụng mà không cần được gán trước 1 giá trị mà không bị cảnh báo từ trình biên dịch . Đây chính là nguyên nhân gây lỗi trong chương trìnhvà điểm yếu của ngôn ngữ C/C++ • Xem thử tình huống minh họa sau.

  30. Chuyển kiểu(Conversions) • Biến có thể được khởi tạo hay gán bới 1 giá trị cùng kiểu với nó hay từ 1 giá trị thuộc các kiểu khác được ‘chuyển đỏi’ sang kiểu của nó • Việc chuyển kiểu có thể là ngầm định hay rõ ràng (implicit /explicit). • Chuyển kiểu ngầm định xảy ra khi 1 giá trị của 1 kiểu có thể chuyển sang 1 kiểu khác mà không mất thông tin • Ví dụ kiểu short và int . ta có thể chuyển kiểu ngầm định từ short sang int mà không mất thông tin • Tương tự kiểu float và double. • Chuyển kiểu ngầm định từ 1 kiểu có phạm vi biểu diễn rộng sang 1 kiểu phạm vi nhỏ hơn sẽ gây ra lỗi. Do vậy phải chuyển kiểu 1 cách rõ ràng (ép kiểu) • Lưu ý : khả năng mất thông tin, trình biên dịch sẽ hỗ trợ việc kiểm tra sai sót

  31. Ví dụ về việc chuyển kiểu • using System;namespace Example2{class PromotionDemo {static void Main(string[] args) { short s = 5; int i; i = s; //Implicit conversion From short to int

  32. System.Console.WriteLine("i is {0}",i);float f = 52.7F;double d;d = f; //Implicit conversion From float to doubleSystem.Console.WriteLine("d is {0}",d);f = d; Error: Cannot implicitly convert type 'double' to 'float'f = (float) d; //Explicit ConversionSystem.Console.WriteLine("f is {0}",f);// i = f; Error: Cannot implicitly convert type 'float' to 'int'

  33. Nhận xét kết quả in ra !!! i = (int) f; //Explicit ConversionSystem.Console.WriteLine("i is {0}",i);}}} • Kết quả in ra :i is 5d is 52.7000007629395f is 52.7i is 52Press any key to continue

  34. Nhận xét : Giá trị biến d có các điểm khác biệt so với giá trị biến f. Lý do : f có độ chính xác thấp hơn nên các bit dư trong d sẽ có giá trị ngẫu nhiên • Nhận xét : Biến i mang giá trị 52

  35. Làm quen kiểu string string str="Thu Khao Sat Du Lieu Chuoi Ky Tu"; System.Console.WriteLine("Chuoi ban dau : {0}",str); System.Console.WriteLine("Doi sang dang chu hoa la :"+str.ToUpper()); System.Console.WriteLine("Doi sang dang chu thuong la :"+str.ToLower()); System.Console.WriteLine("Co tat ca la {0} ky tu ",str.Length); //System.Console.WriteLine("abc < aBC = {0}" ,"abc"<"aBc"); System.Console.WriteLine("abc < aBC -> {0}" ,"abc".CompareTo("aBc")); System.Console.WriteLine("xyz = xyz -> {0}" ,"xyz".CompareTo("xyz")); string fnum="134.56",inum="345"; float f=Convert.ToSingle(fnum); int i = Int32.Parse(inum); System.Console.WriteLine("f = {0} i= {1}",f,i); Demo2.TypeString

  36. Làm quen kiểu float float f=1.4F; string fnum= f.ToString(); System.Console.WriteLine("float f = {0} string fnum = {1}",f,fnum); System.Console.WriteLine("So nho nhat kieu float bieu dien la : {0}",float.MinValue); System.Console.WriteLine("So lon nhat kieu float bieu dien la : {0}",float.MaxValue); Single s= new Single() ; s=f; System.Console.WriteLine(" s = {0}",s); s=s*2; System.Console.WriteLine(" s = {0}",s); float g=1.4F; System.Console.WriteLine(" f = g --> {0}",f==g); Demo2.TypeFloat

More Related