Tuesday, March 25, 2008

SW306 Лабораторийн ажил 4

Хугацаа: IV/2-3 -ны лабораторийн цагуудаас өмнө
Нөхцөл:
Энэ лабораторийн ажлыг дараах алхамтай гүйцэтгэнэ. Үүнд:
1) Сонгосон асуудлынхаа хүрээ хязгаарыг тодорхойлж, тухайн асуудлын хүрээнд хамаарах объектуудыг хэлэлц.
2) Тэдгээр объектуудын хийсвэрлэл болох классыг тодорхойл. Үүнд: Класс нь
a) Гишүүн өгөгдлийг бодит амьдралын шаардлагатай уялдуулан тодорхойлох
b) Гишүүн функцууд: get..., set... гэсэн ерөнхий зориулалтын стандарт функцуудээс гадна custom тусгай зориулалтын функц тодорхойлох.
c) Байгуулагч функцээр хангагдсан байх.
3) Тодорхойлсон классынхаа хэд хэдэн тохиолдлыг (объектыг) үүсгэж ажиллах.


Лабораторийн ажлыг дүгнэхдээ оюутан хийсвэрлэлийг хэрэгжүүлэхдээ бодит амьдралын шаардлагыг хир уялдуулан хийсвэрлэснийг голлон анхаарна.

Тайлбар:Лабораторийн ажлаа бодит амьдралын шаардлагатай уялдуулан хийсвэрлэнэ гэдэгт товчхон тайлбар хийе. Жишээ нь асуудлыг “Номын сангийн үйл ажиллагаа” –ны хүрээнд тодорхойлбол Ном ба Уншигч гэх мэт объектуудын тухай яригдана. Ийнхүү “Ном”-ыг програмчлалд хийсвэрлэхэд (Ном хэмээх классыг үүсгэхэд) түүнд ямар ямар гишүүн өгөгдлийг яагаад тодорхойлох болсон, тэдгээр гишүүн өгөгдлүүдийг ямар төрөлтэй тодорхойлох болсоныг бодит амьдралын шаардлагатай уялдуулан тайлбарлана. Жишээ нь: зарим номын сангийн програмын хувьд номыг “Хэвлэсэн хэвлэлийн газар”–ийн мэдээлэл чухал шаардлагагүй байж болох юм. Тэгвэл “Ном” классд “номыг хэвлэсэн газар” гэсэн гишүүн өгөгдөл тодорхойлох шаардлагагүй. Харин асуудлын хүрээг арай өргөн хүрээнд шийдвэрлэх үед магадгүй “Хэвлэсэн хэвлэлийн газар” гэсэн гишүүн өгөгдөл тодорхойлох хэрэгтэй болно гэх мэт. Мөн “Номын үнэ” гэсэн гишүүн өгөгдлийг монголын хувьд бүхэл тоон төрлөөр тодорхойлж болно, харин одоо ч задгай мөнгөөр гүйлгээ хийдэг япон орны хувьд бутархай тоон төрлөөр тодорхойлох шаардлагатай гэх мэтчилэн сонгосон асуудлын хүрээнээс шалтгаалан тухайн 1 объектыг өөр өөрөөр хийсвэрлэх боломжтой юм гэдгийг ойлгох нь чухал.

Энд жишээ болгон “Завь түрээслэх, завь байрлуулах үйлчилгээ эрхэлдэг байгууллагын үйл ажиллагаа”-г гаргасан програмыг үзүүлье.
Асуудлын хүрээ: “Завь түрээслэх, завь байрлуулах үйлчилгээ эрхэлдэг байгууллагын үйл ажиллагаа”
“Хөвсгөл жуулчин” ХХК нь Хөвсгөл нуурын эрэг дээр байрлах завь түрээслэх, өөрийн талбайд завь түрээсээр байрлуулах үйлчилгээ эрхэлдэг хувийн компани юм.

Тус компани нь завь байрлуулах түрээсийн төлбөрийг тооцохдоо Зогсоол (slip)-ийн өргөнөөс хамаарч 4 янзын тарифтай байна. Үүнд:

Түрээсийн төлбөрийн хүснэгт
Зогсоол Жилийн түрээсийн төлбөр
10 $800
12 $900
14 $1100
16 $1500

Уг боомт нь өөрийн үйлчлүүлэгчид, завьны түрээс, завьны талбайн түрээсийн бүртгэлийг автоматжуулах зорилгоор шинэ автоматжуулсан системтэй болохоор шийдсэн гэж үзээд тус лабораторийн ажлыг гүйцэтгэе.

1) Үйлчлүүлэгч ба Зогсоол гэсэн объектууд оршиж байна.
2) Эдгээр объектуудыг дээр тодорхойлсон асуудлын хүрээнд хийсвэрлэвэл

Үйлчлүүлэгч класс нь дараах бүтэцтэй

Customer
name
address
phoneNo
-

Тэгвэл Үйлчлүүлэгч (Customer) классын програмын бичлэг нь дараах хэлбэртэй байна.
class Customer
{ // Гишүүн өгөгдлүүд
private String name;
private String address;
private String phone;

// Гишүүн функцууд :
public String getName()
{ return name; }

public String getAddress()
{ return address; }

public String getPhone()
{ return phone; }

public void setName(String newName)
{ name=newName; }

public void setAddress(String newAddress)
{ address=newAddress; }

public void setPhone(String newPhone)
{ phone=newPhone; }

}

Slip гэдэг нь нэгж завь байрлах талбайг хэлэх бөгөөд цаашид зогсоол гэе.

Зогсоол (Slip) класс нь дараах бүтэцтэй гэж үзье.

Slip
slipID
width
slipLenght
-

Зогсоол (Slip) классын програмын бичлэг ба түүнийг шалгах програмыг авч үзье:

class Slip
{ // Гишүүн өгөгдлүүд
private int slipID;
private int width;
private double slipLength;
// Гишүүн функцууд
public Slip(int anID, int aWidth,double aSlipLength) //Байгуулагч функц
{
setSlipID(anID);
setWidth(aWidth);
setSlipLength(aSlipLength);
}
// Mutator functions буюу ерөнхий зориулалтын функуууд
public void setSlipID(int anID) { slipID=anID; }
public void setWidth(int aWidth) { width=aWidth; }
public void setSlipLength(double aSlipLength) {slipLength=aSlipLength;}

public int getSlipId() {return slipID;}
public int getWidth() {return width;}
public double getSlipLength() {return slipLength;}

//Custom functions буюу тусгай зориулалтын функцууд
public String tellAboutSelf() {
String info;
info="Slip ID="+getSlipId()+", Width="+getWidth()+", Length="+getSlipLength();
return info;
}
public double leaseSlip(){
double fee;
switch(width){
case 10: fee=800;
break;
case 12: fee=900;
break;

case 14: fee=1100;
break;

case 16: fee=1500;
break;

default: fee=0;
}
return fee;
}
}
Тайлбар: Энд Зогсоол класс нь getter, setter ерөнхий үүрэг зориулттай функцууд болон байгуулагч функцээр хангагдсан байна. Мөн түүнчлэн классын гишүүдийн утгыг хэвлэх үүрэгтэй tellAboutSelf() хэмээх Custom (хэрэглэгчийн) функцыг тодорхойлсон байна. Мөн дээр тодорхойлсон асуудлын хүрээнд завины түрээсийн төлбөр бодох leaseSlip() гэсэн Custom (хэрэглэгчийн) функц тодорхойлсон.


Тодорхойлсон ӨХТөрлүүдийнхээ хэд хэдэн тохиолдлыг үүсгэж ажиллах.

Дээр тодорхойлсон Зогсоол (Slip) классын 3 объект тодорхойлж тэдгээрийн мэдээлэл болон, түрээсийн төлбөрийн мэдээллийг хэвлэх програм зохиоё:

public class CustomerProgram {
public static void main(String args[]){

Slip slips=new Slip(1,10,20);

System.out.println(slips.tellAboutSelf());
double fee=slips.leaseSlip();

System.out.println("Fee is : "+fee+"for slip"+slips.getSlipId());

}
}
Энд тодорхойлж ашигласан объект бүр өөр өөрийн гэсэн өгөгдлийн мужтай байна.



Тайлбар: Уг нь дээр үзүүлсэн жишээтэй төстэй машин түрээсийн үйлчилгээ явуулдаг байгууллагын үйл ажиллагааг автоматжуулах сэдвээр хийлгэе гэж бодож байлаа. Гэтэл хүн бүрийн үзүүлэх програм ижил болчихож магадгүй тул оюутан бүр амьдрал дээр явагддаг өөр өөр системийг сонгон авах хэрэгтэй.
Ингээд уг системээ шаардлагын дагуу өөр өөрсдийнхөөрөө хөгжүүлж програмчлах хэрэгтэй.

Амжилт хүсье!!!!!!

No comments: