Tải bản đầy đủ (.pdf) (80 trang)

bài giảng lập trình hướng đối tượng c

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.53 MB, 80 trang )

CHƢƠNG I: TỔNG QUAN VỀ LẬP TRÌNH HƢỚNG ĐỐI TƢỢNG
1. Các kỹ thuật lập trình
1.1. Lập trình tuyến tính
Cách tip cn n ca lp trình tuyn tính là ln t. Các câu lnh ca 
c thc hin tun t t u ti cui theo trình t xut hin, lnh này k tip lnh kia
cho ti khi k
c lp trình bng mã nh phân, s dng các công tc
 n   liu i dng nh phân c th
hin bng vic có hay không xut hin các l c trên mt tm bìa (punched card) ti
các v c.

Hình (I.1) Chƣơng trình máy tính trên bìa đục lỗ
Sau này, khi yêu cu x lý d liu lc tu câu
lc s dng các bit nh phân t ra rt hn ch. Vì v li ta s
dng các câu lnh gn vi ting Anh gi là ngôn ng lch s
dch các câu lnh này sang ngôn ng  thc thi. Các ngôn ng lp trình c
thit k  ltrình làm các công vi Phn
l i ngn.
Đặc trƣng
 c thc hin mn theo li tun t. Bn thân
i ngn và ít câu lnh
 ng: Ch có mt lung duy nht và các câu lc thc hin tun t theo
lu
Tính chất
 n, d hiu. Lp trình tuyn tính ng d
n
 m: Khó thc hii vi các ng dng phc tp
Ngôn ng lp trình tuyn tính không có kh m soát phm vi nhìn thy ca các d
liu. Mi d liu là d liu toàn c b si
 bt k phn nào ca i không mong mua các
phn t d liu trong mt dãy mã lnh ng làm cho các lp trình viên rt


mt thi gian.
1.2. Lập trình cấu trúc
Khi kh nhu cu thc thi c tp 
lên. Các ngôn ng lp trình c  n cn thi s dng li
t h lp trình tuyn tính. Tht ra, mt
n lng c chép lp li mi khi chúng ta dùng trong nhiu 
 t dài dòng. Thêm vi   ng  u khin  nhn
nhiu ch nên logic cu.
V bn ch  (còn gi là hàm hay
th tc) thc hin các công vic ri rc trong quá trình lc t
c gi c lp vi nhau càng nhiu càng tt, mi hàm có d liu và logic riêng.
c chuyn giao gia các hàm thông qua các tham s, các hàm có th có các
bin cc b mà bên ngoài phm vi ca hàm không th truy xuy, các
hàm có th t chung v xây dng nên mt
ng dng.
Mt khái nim l      p trình có cu trúc là sự trừu tƣợng hóa
(Abstraction). S trng hóa có th  t s vic mà không
cn các chi tit bên trong ca nó. Trong mu trúc, chúng ta
ch cn bit m c mt công vic c th . Còn làm th nào
mà công vii thc hic là không quan trng, chng nào hàm còn tin cc thì
còn có th dùng nó mà không cn phi bit nó thc hin ch c
th u này gi là sự trừu tƣợng hóa theo chức năng (Functional abstraction) và là
nn tng ca lp trình có cu trúc.
Các ngôn ng lp trình cu trúc ph bin là Pascal, C và C++. Riêng C++ ngoài vic
a lp trình cu trúc do k tha t a lng.
c gi là ngôn ng lp trình na cu trúc, nng.
Đặc trƣng
n nht ca lp trình cu trúc th hin  mi quan h:
Chƣơng trình = Cấu trúc dữ liệu + Giải thuật


 Cu trúc d liu là cách t chc d liu, cách mô t i dng ngôn ng lp
trình
 Gii thut là m thc hin mt công vinh
i thut có quan h ph thuc vào cu trúc d liu:
 Mt cu trúc d liu ch phù hp vi mt s hn ch các gii thut.
 Ni cu trúc d liu thì phi gii thut cho phù hp.
 Mt gii thung phi mt cu trúc d liu nhnh.
Tính chất
 M c gi thc hin nhiu ln trong m
chính.
  c g thc hin theo mt th t bt kì, tu
thuc vào gii thu thuc vào th t khai
báo c
 Các ngôn ng lp trình cu trúc cung cp mt s cu trúc lu khi
trình.
Ƣu điểm
 a, d hiu, d theo dõi.
 i thut rõ ràng.
Nhƣợc điểm
 Lp trình cu trúc không h tr vic s dng li mã ngun: Gii thut luôn ph
thuc cht ch vào cu trúc d lii cu trúc d liu, phi thay
i gii thui vit l
 Không phù hp vi các phn mm lu trúc vi các gii thut ch phù
hp vi các bài toán nh, nm trong phm vi mt modul ci d
án phn mm ln, lp trình cu trúc t ra không hiu qu trong vic gii quyt mi
quan h a các modul ca phn mm.
2. Lập trình hƣớng đối tƣợng
Xut phát t hai hn ch chính cp trình cu trúc:
 Không quc s i d liu khi có nhii mt
bin chung. V   c bit nghiêm trng khi các ng dng ngày càng ln,

i ta không th kic s truy nhn các bin d liu chung. 8
 Không tit kii: Gii thut gn lin vi cu trúc d liu,
ni cu trúc d liu, s phi gii thui vit li mã
 u.
 khc phc hai hn ch này khi gii quyt các bài toán li ta xây dng mt
  p cn m        ng, vi hai m 
chính:
  li hn ch s truy nhp t do vào d liu, không quc.
 Cho phép s dng li mã ngun, hn ch vic phi vit li mã t u cho các

Vi lic thc hing thành lp
t th
 Thu thp các thuc tính ca mng, gn các thu
ng.
 Nhóm ng có các thuc tí nhau thành nhóm, loi b bt các
thuc tính cá bit, ch gi li các thuc tính chung nhc gi là quá trình
trng thành lp.
  liu cng vào lng. Mi thuc tính cng
tr thành mt thuc tính ca lng.
 Vic truy nhp d lic thc hic trang b cho
lc truy nhp t do trc tin d liu.
 i trong d liu cng, ta ch cc truy
nhp thuc tính ca lp, mà không cn phi mã ngun c
s dng lng.
Vic cho phép s dng li mã nguc thc hi k tha trong lp trình

 Các lp có th c k tha nhau  tn dng các thuc ca
nhau.
 Trong lp dn xut (lc k tha) có th s dng lc ca lp
 (lp b lp khác k tha) mà không cn thit pht li mã ngun.

 Ngay c khi lp dn xunh ngc cho mình, l 
không b ng và không phi sa li bt kì mn mã ngun nào.
Ngôn ng lng ph bin hin nay là Java và C++. Tuy nhiên, C++ mc
n ca lp trình n không phi là
ngôn ng lp trình thu   ng. Java tht s là mt ngôn ng lp trình thun
ng.
Đặc trƣng
Ln:
  liu: d lic t chc thành các thuc tính ca lng.
Vic truy nhn d liu phc cng lp.
 S dng li mã ngun: vic s dng li mã nguc th hi k
th này cho phép các lng có th k tha t các lng
khác. Khi p k tha, có th s dc (mã ngun) ca
các lp b k tha, mà không cn phi.
Trong lng chúng ta có:
Đối tƣợng = Phƣơng thức + Dữ liệu
Ƣu điểm
Lng có mt s m ni bt:
  liu b i t  lic
 ng. Nu mun truy nhp vào d liu phi thông qua các
c cho phép cng.
 Khi i cu trúc d liu ca m  ng, không c  i mã
ngun ca ng khác, mà ch ci mt s hàm thành phn ci
ng b i. u này hn ch s ng xu ca vii d lin
ng khác 
 Có th s dng li mã ngun, tit kim tài nguyên. Vì nguyên tc k tha cho phép
các lp k tha s d    c k tha t l   ng
c ca chính nó, mà không cn thit phi.
 Phù hp vi các d án phn mm ln, phc tp.
3. Lập trình hƣớng đối tƣợng bằng ngôn ngữ C#

   mô t   các k thut trong l     i ta
ng s dng ngôn ng lp trình Java  mt ngôn ng lp trình thung
hoc C++.
Tuy nhiên, vi hai mt ra: mt là d dàng tip c
thi gian tìm hiu các k thut ln  phát trin các ng dng
trên h u hành windows, hai là s dng thành tho b công c phát trin Visual Studio.net
ng dn t nên tác gi s dng ngôn ng l trình bày
các k thut trong lng vi các lý do sau
C# là ngôn ngữ đơn giản: C# loi b mt vài s phc tp và ri rm ca nhng ngôn ng
nh Java và c++, bao gm vic loi b nhng macro, nhng template, a k tha, và lp c
s o (virtual base class). Chúng là nhng nguyên nhân gây ra s nhm ln hay dn n
nhng vn  cho các ngi phát trin.
C# là ngôn ngữ hiện đại: iu gì làm cho mt ngôn ng hin i? Nhng c tính nh là
x lý ngoi l, thu gom b nh t ng, nhng kiu d liu m rng, và bo mt mã ngun
là nhng c tính c mong i trong mt ngôn ng hin i. C# cha tt c nhng c
tính trên.
C# là ngôn ngữ hƣớng đối tƣợng: Nhng c im chính ca ngôn ng hng i tng
(Object-oriented language) là s ng gói (encapsulation), s k tha (inheritance), và a
hình (polymorphism). C# h tr tt c các c tính trên.
C# là ngôn ngữ mạnh mẽ và cũng mềm dẻo: C# c s dng cho nhiu các d án khác
nhau nh là to ra ng dng x lý vn bn, ng dng  ha, bn tí
























CHƢƠNG II: C# CƠ BẢN
1. Ứng dụng Console
ng dng console giao tip vi ngi dùng thông qua bàn phím và không có giao din
ngi dùng (UI), ging nh các ng dng thng thy trong Windows.  tìm
hiu các k thut trong lng và dùng ngôn ng  mô t các k
thut này ta vit các ng dng console
Ti tìm hiu và s d xây dng các ng dng có giao di
ha trên Windows. Ni dung này s c trình bày tron
Ví dụ (II.1) Tạo dự án C# console đầu tiên
c 1: M Visual Studio
c 2: Chn menu File->New- to mt d án console based v
và tên Solution là Hình (II.1)

Hình (II.1) Cửa sổ tạo dự án mới
c 3i tên l
i

using System;
class Example
{
static void Main(string[] args)
{
Console.WriteLine("This is the my first program using C#”);
Console.ReadLine();
}
}
c 5: Chn File -> Save
c 6: Chn Build - dch d án
c 7: Chn Debug - ch
Màn hình hin th c

Hình (II.2) Màn hình hiển thị Ví dụ (II.1)
2. Biến và hằng
Khai báo và gán giá tr cho bin: <kiu> <tên bin> = <giá tr>;
Khai báo và gán giá tr cho hng: const <kiu> <tên hng> = <giá tr>;
tên bin và hng phi tuân theo các quy tc sau:
 Ch bu bng mt kí t (ch), hoc mt du gi , hoc mt kí t dollar
 Không có khong trng gia tên
 T kí t th hai, có th dùng các kí t (ch), ch s, du dollar, du gi
 Không trùng vi các t khoá
 Phân bit ch hoa ch ng
3. Kiểu dữ liệu
C# phân tp hp kiu d liu này thành hai loi: Kiu d liu giá tr (value) và kiu d liu
tham chiu (reference). i vi mt kiu d liu giá tr thì s c lu gi kích thc tht
trong b nh ã cp phát là stack. Trong khi  thì a ch ca kiu d liu tham chiu thì
c lu trong stack nhng i tng tht s thì lu trong b nh heap
Kiểu dữ liệu

Số byte
Mô tả
byte
1
S nguyên không du giá tr t 0 255
char
2
Ký t Unicode
bool
1
Giá tr logic true/false
sbyte
1
S nguyên có du giá tr t-128 127
short
2
S nguyên có du giá tr t -32768 32767
ushort
2
S nguyên không du giá tr t 0 65536
int
4
S nguyên có du giá tr t 2,147,483,648 2,147,483,647
uint
4
S nguyên không du giá tr t 0 4,294,967,295
long
8
S nguyên có du giá tr t
-9,223,372,036,854,775,808 9,223,372,036,854,775,807

ulong
8
S nguyên không du giá tr t 0 18,446,744,073,709,551,615
float
4
Kiu só thc du phng giá tr t
-3.402823e38 3.402823e38
double
8
Kiu s thc du ph chính xác g t
-1.79769313486232e308 1.79769313486232e308
decimal
8
Giá tr th chính xác ti 28 ch sc dùng trong
tính toán tài chính, kii phi có hu t m hoc M theo
sau giá tr
Bảng (II.1) Các kiểu dữ liệu trong C#
Khi khai báo bii to giá tr cho các bin thì chúng nhn giá tr ngnh
Kiểu dữ liệu
Giá trị ngầm định
u s)
0
bool
False
char
\
enum
0
ng)
null

Bảng (II.2) Giá trị ngầm định
Ví dụ (II.2) sử dụng các kiểu dữ liệu (datatype)
c 1: Thêm mt d án console vi n hành Hình (II.3)
c 2: click chut phi vào project DataTypes -> set as Startup project
i tên file class 

Hình (II.3) Các bƣớc thêm một dự án mới vào solution hiện hành
c 4: Sa mã l
using System;
class Example
{
static void Main(string[] args)
{
int intVal;
double dblVal;
string strVal;
intVal = 10;
dblVal = 3.142;
strVal = "Welcome";
Console.WriteLine("{0} is an integer value", intVal);
Console.WriteLine("{0} is an double value", dblVal);
Console.WriteLine("{0} is an string", strVal);
Console.ReadLine();
}
}
c 5: Chn menu File -  n
c 6: Chn Build - build d án
c 7: Chn Debug - ch

Hình (II.4) Màn hình hiển thị Ví dụ (II.2)

Trên Bng (II.1) trình bày các kiu d lic xây dng sn (Built-in datatypes) trong ngôn
ng lp trình C#. Ngoài ra ta có th xây dng các kiu d liu phc hp t các kiu d li
gi là các kiu d li-u lit kê (enum),
cu trúc (struct), mng (array), lp (class)
Mt kiu d liu tiên là kiu lit kê. Kiu lit kê bao gm mt
tp các giá tr hc, ng t khóa enum.
Ví dụ (II.3) Kiểu liệt kê:
c 1: Thêm mt d án console vn hành
c 2: click chut phi vào project EnumType -> set as Startup project

c 4: Sa mã l
class EnumType
{
// Khai báo kiểu liệt kê
enum NhietDoNuoc
{
DoDong = 0,
DoNguoi = 20,
DoAm = 40,
DoNong = 60,
DoSoi = 100,
}
static void Main(string[] args)
{
Console.WriteLine( "Nhiet do dong: {0}", NhietDoNuoc.DoDong);
Console.WriteLine( "Nhiet do nguoi:{0}", NhietDoNuoc.DoNguoi);
Console.WriteLine( "Nhiet do am: {0}", NhietDoNuoc.DoAm);
Console.WriteLine( "Nhiet do nong: {0}", NhietDoNuoc.DoNong);
Console.WriteLine( "Nhiet do soi: {0}", NhietDoNuoc.DoSoi);
Console.ReadLine();

}
}
c 5: Chn menu File -  n
c 6: Dch và ch
-->

×