SlideShare a Scribd company logo
1 of 90
Download to read offline
JAVA програмчлал
С.Ууганбаяр
JAVA ПРОГРАМЧЛАЛ
/ЭХЛЭН СУРАЛЦАХ/
-1-
С.Ууганбаяр
JAVA програмчлал
Лекц №1
1. Java танилцуулга
1.1. Java гэж юу вэ ?
Java хэлийг 1991 онд “Green” төслийн нэг хэсгээр Sun Microsystems хөгжүүлж
бий болгосон. Энэ төслийн групп нь хэрэглэгчдийн элетрон төхөөрөмжийг
удирдах програм хангамжийг хөгжүүлэхээр ажиллаж байв. Энэ хугацаанд тэд
Start гэж нэрлэгдэх төхөөрөмжийг бүтээсэн бөгөөд түүнийг удирдахаар
төлөвлөж байсан үйлдлийн систем нь С++ дээр бүтээгдэх байв. Гэвч багын нэг
гишүүн James Gosling нь С++-ийн бүтээмжийг төдийлөн өндөр үнэлэхгүй байв.
Тиймээс тэрээр Start-д зориулж шинэ хэлийг бий болгосон. Тэрээр энэ хэлээ
Oak гэж нэрлэсэн, энэ нь түүний offise-ийн гадаа харагдаж байдаг Oak модны
нэрийг хэрэглэсэн хэрэг. Сүүлд нь Oak гэдэг нэр нь зарим өөр хэлэнд
ашиглагддаг болохыг мэдээд Sun энэ хэлийг Java гэж нэрлэсэн.
Java бол платформоос хараат бус объект хандлагат програмчлалын хэл юм.
Програм бичих үедээ та энэ програм эцэст нь хаана ажиллахад үргэлж анхаарч
байдаг. Жишээлбэл, хэрэв програм Windows платформ дээр ажиллах бол та
MFC (Microsoft Foundation Classes)-ийг ашиглана. Хэрэв энэ нь Mac машин бол
Mac OS Toolbox-г ашиглана. Түүнчлэн төгсгөлд нь програмаа хэрэгжүүлэх
/турших/-дээ програмынхаа эх кодыг янз бүрийн процессортой машин бүрд
тохиргоог нь хийж хөрвүүлэх болно, тэгээд энэ нь зайлшгүй програмыг
ажиллах машины процессорт тохируулж зайлшгүй хөрвүүлэх хэрэгтэй болно.
Үнэ хэрэгтээ энэ нь програмууд Internet-д хэрэгжүүлэх боломжгүй болох юм.
Хэрэв бид адилхан сценартай гэж бодвол учир нь та програм тань эцэстээ хаана
татагдаж ажиллахыг мэдэж чадахгүй. Энэ асуудлыг эсэргүүцэхийн тулд Java нь
JVM /Java Virtaal Machine/ гэж нэрлэгдэх in-built механизмтай байдаг. JVM нь
таны програмыг клиентийн машинтай зохицохоор болгодог бөгөөд таны
програм интернет дэх дурын машин дээр ажиллаж чадна.
С++-тай адилгүй нь, Java бол бүхэлдээ объект хандлагат хэл. Java дахь бүх
зүйлс зөвхөн классын дотор бичигдэх ёстой. Классууд дотор бүх зүйлүүдийг
хийж хязгаарласнаар програмууд зарим талаар хатуу чанга болно гэж та бодож
магадгүй, гэвч энэ нь бүрэн дүүрэн эргэлзээгүй програмчлалын хэв маяг юм.
С++-д объект хандлагат ба бүтцийн програмчлалын хэв маягуудыг хослуулан
програмаа бичихэд хангалттай уян хатан байдаг. Гэвч энэ хольсон арга нь тийм
ач холбогдолтой бус юм.
Ингээд зохиомжлогчдийн хувьд бүхэлдээ объект хандлагат аргыг ашиглан
зохиомжлоход хялбар болжээ.
1.2. Java хувилбарууд ба хөгжүүлэлтийн хэрэгслүүд
Өдий хүртэл Java нь ердөө л 3 чухал хувилбараар өөрчлөгдсөн. Java нь эхлээд
Java 1.0 гэж гарч ирсэн, энэ нь одоо хүртэл олонхи brokser-уудын хувьд тохирч
байна. Дараа нь Java 1.1 гарсан, энэ нь сайжруулсан хэрэглэгчийн итеррэйс,
үзэгдэл боловсруулалттай сайжирсан хэл байв. Энэ хүртэл Java олон өөрчлөлт
хийгдсээр эцэст нь Sun сүүлчийн хувилбар “Java 2” гэж нэрлэгдэх Java 1.2.2-г
гаргасан.
-2-
С.Ууганбаяр
JAVA програмчлал
Java нь олон хөгжүүлэлтийн орчинд бичигддэг. Хамгийн хялбархан Java
програм хангамж бол JDK /Java Devolepment Kotekit/ 1.0, 1.1, 1.2 юм. JDK-г
интернет дэх http://java.sun.com/products/jdk сайтаас үнэгүй татаж авч болно.
Java-гийн хувьд олон өөр хөгжүүлэлтийн хэрэгслүүд байдаг: Java Workshop,
Borland Jduilder, Symantec Visul Case, Visual Java /VJ++/, SuperCede г.м
1.3. Java-гийн онцлог
Java нь объект хандлагат байхаас гадна интернет програмчлалын хувьд чухал
онцлогуудаар хангадаг.
Архитектур ба Цөм
Бодит шинжтэй байсан учраас Java гарч ирсэн цагаасаа л өргөн ашиглагдаж
эхэлсэн. Платформ хэлний эсрэг өндөр үр бүтээмжтэй болгон Java өөрийгөө
баталгаажуулж чадсан. Java програмууд нь эх кодод ямар нэгэн өөрчлөлт
хийлгүйгээр интернет дэх ямарч төрлийн клиент машин дээр ажиллаж чадна.
Өмнө хэлснээр энэ бол JVM буюу Java Virtual Machine-д хүрсэн явдал юм. JVM
нь таны програмыг шууд техник хэсгүүдтэй харьцахыг зөвшөөрдөггүй бөгөөд
код ба техник хангамж хоёрын хоорондох интерфэйс байдлаар ажилладаг.
Иймээс Java програм нь клиент тал болдог, энэ нь програмын биелэлтийг
локаль процессорт зохицоход тусалдаг. Доорхи тодорхойлолт бол Java програм
яаж ажилладаг тухай юм.
Java програм нь 2 үе шатанд биелдэг. Java програм хөгжүүлэгчээр
хөрвүүлэгдэж дуусаад интернэт сервер рүү ачаалагдана, дараа нь дахин interpret
хийгдэж тэгээд ажилладаг.
Java програмууд байт код /.class file/ гэж нэрлэгдэх зүйл рүү хөрвүүлэгддэг.
Байт код бол байт хэлбэрийн командуудын дараалал юм. Эдгээр командууд нь
ямар нэгэн машинд зориулагдсан зүйл биш, харин JVM-д зориулан бичигдсэн.
JVM бол виртуаль машинд зориулсан програм юм, ө.х бодит машин биш боловч
үнэндээ бол төстэй орчин юм. Байт код буюу class файл өөрөө ажиллах
боломжгүй ба түүнийг веб хуудсанд суулгадаг. Та веб хуудсаа HTML-ээр
байгуулаад түүний дотроос .class файлыг дуудна. Байт кодыг агуулсан веб
хуудас нь түүнийг веб сайт дээр тавигдсанаар интернэтээр тардаг. Веб хуудсын
клиент талд браузер ашиглан ханддаг. Браузер нь дотроо Java компонентыг
агуулсан байх ёстой, ө.х Java-г зөвшөөрсөн байх ёстой, эсрэг тохиолдолд байт
кодыг HTML текст гэж хүлээн авна. Веб хуудас клиентээр дуудагдах үед Java
програм HTML документ дотор сууж ажиллаж эхэлдэг. Хамгийн эхний алхам
болох хамгаалалтын шалгалт Java код үнэхээр мөн эсвэл биш гэдгийг
тодорхойлохын тулд Java кодыг оруулж ирж байх үед хийгддэг. Дараа нь энэ нь
холбогдоно, эцэст нь тухайн машины архитектур руу орчуулагдана, энэ
хооронд ямар нэг алдаа эсвэл тасралт тохиолдвол тэдгээр нь боловсруулалт
хийгдэх ба програм ажиллана.
-3-
С.Ууганбаяр
JAVA програмчлал
Эх код- - - - - - - Хамгаалалтын
- - - - - - -
Зур 1.1 Аплет яаж ажилладаг вэ.
Хүчтэй
Ихэнхи програмууд гэмтлийн тохиолдлуудад бууж өгдөг, учир нь товлосон
байдал бүрдээгүй шинжүүд нь байхгүй, эсвэл санах ойн зохион байгуулалт
буюу програмын алдаа боловсруулах байдал нь ялгаатай байдлуудад байдаг.
Энэ бол санах ойн зохион байгуулалтын дараа авч үзэх маш чухал зүйл юм.
Заримдаа тодорхой алдааны нөхцөлүүд, “File not found” зэрэг, тулгардаг. Эцэст
нь програм мухардалд ордог!
Эдгээр асуудлууд нь Java-д “garbage collection” ба “ exception handling” гэж
нэрлэгдэх технологиудаар онцгойлон шийдэгдсэн.
“Garbage collection” – “Хог хаягдал цуглуулах”
“Хог цуглуулах” технологид daemon /буг чөтгөр, догшин сахиус/ thread
заагдаагүй объектуудыг чөлөөлж байдаг.
Daemon thread - / систем харьцангуй чөлөөтэй болох үед амьтай болдог thread/
Тиймээс програм зохиогч heap муж дүүрэгийн тухайд зовох хэрэггүй.
“Exception handling” – “алдаа боловсруулах”:
“Exception handling” механизмд массивын доод хязгаарын элементэд хандахыг
оролдох зэрэг програмыг сүйрүүлэхэд хүргэдэг тохиолдлуудыг түүнийг
ажиллаж байх үед нь засаж шийддэг.
Найдвартай, Аюулгүй
Java програм нь интернэтээр зөөвөрлөгдөн хэн нэгний машин дээр ажиллах
чадвартай, гэвч хүлээн авагч ирсэн програмыг ямар нэг сүйтгэх ажиллагаа
хийхгүй гэдэгт яаж үнэмшиж, итгэх вэ? Та үргэлж мэддэг эх сурвалжаас
- - - - - - -
шалгалт
Java
хөрвүүлэгч
00110100
01000100
01000010
(.java файл)
Орчуулалт
01011000
Алдаа
боловсруулалт
Код интернэтээр
зөөвөрлөгдөнө
Байт код
(.class файл)
Биелэх код
Хөгжүүлэлтийн төгсгөл Интернэт Клиент
-4-
С.Ууганбаяр
JAVA програмчлал
мэдээллийг татдаггүй, мөн энэ нь татсан програмуд файл систем рүү хандах,
тодорхой файлуудыг устгаж болно. Тиймээс Java програмыг найдвартай
байлгахын тулд Java нь интернэтээс ирээд браузер дээр ажиллаж байгаа аплет
гэж нэрлэгдэх програмудад локаль системийн файл систем рүү хандахыг
зөвшөөрдөггүй.
Хэдий тийм боловч заагч нь үнэхээр уян хатан, програм бичихэд хүчтэй, Java
нь заагчийг бүрэн ашиглахыг хягаарласан. Энэ нь Java програмуудыг маш
аюулгүй болгоно, энэ нь дур зоргоороо дурын санах ойн байрлалд бичилт хийх
эсвэл системийн нөөцүүдийг онгичих боомжгүй болгоно.
Аплет өөрийн зорьсон газраа ирэхэд түүнийг орчуулахын өмнө хамгаалалтын
шалгалт түүн дээр явагдана. Энэ нь ирсэн Java кодыг үнэхээр Java код мөн
эсэхийг баталгаажуулна. ө.х энэ нь ямар нэгэн вирустай төстэй тодорхойгүй
элементүүдийг агуулах ёсгүй. Та мөн өөрийн Java кодоо илгээхийн өмнө тэмдэг
хийж болох ба хүлээн авагч түүнийг авахын тэмдгийг /шошго, хаяг/ тааруулж
болно. Үүнийг таны кодын цифрэн тэмдэг /digital sign/ гэх ба хэрэв тэмдэг
тохирохгүй бол та хэн нэгэн гуравдагч хүн кодыг онгичсон /hack/ гэж мэдэж
болно.
Энгийн, хялбар
Нэгэн объект хандлагат програмчлалын үндсэн ойлголтууд тодорхой болсон
бол та үр бүтээлтэй Java праграммуудыг маш хялбархан бичиж чадна. Олон
хэлүүд тодорхой тооны онцлогуудаар тодорхой зорилгын хэрэгжүүлэх
боломжуудаар хангадаг. Энэ нь эргээд хэнийг эмх цэгцгүй, сурахад хэцүү
болгодог. Java нь энэ аргыг хэрэглээгүй бөгөөд үндсэн чухал онцлогуудыг
үлдээхийг зорьсон, мөн нийлмэл төвөгтэй байдлуудаас зайлсхийсэн.
Java классын сан дахь классуудын тусламжтайгаар асар их чадал бий болсон.
Distributed
Java объектууд нь интернэт дэх чухал серверүүдээр тархаж чаддаг. Тэдгээр
объектууд нь дурын Java програм дотор агуулагдах, мөн тэдгээр нь түүний
өөрийнх нь компонентууд бол ажиллуулдаг.
Лекц№2
1.4. Java дахь програмын төрлүүд
Java хэл нь үндсэндээ програмын 2 төрөлтэй байдаг, аплет ба програм /
өгүүлэмж/
Аплет бол браузераар интернэтэд ажиллах чадвартай програм юм, өгүүлэмж –д
ийм боломж байхгүй. Браузер нь апплетыг ажиллуулж чадахын тулд өөр дотроо
Java компонентийг агуулсан байх ёстой. Internet Explorer 3.1 ба түүнээс дээшхи
хувилбарууд аплет-г амжилттай ажиллуулж чадна. Энэ хоёрын хоорондох өөр
нэг гол ялгаа бол өгүүлэмж бол локаль файл систем ба нөөцүүд рүү хандаж
-5-
С.Ууганбаяр
JAVA програмчлал
чадна, харин аплет үүнийг хийх хориотой. Програм бол та түүний функцүүдийг
/үүргүүдийг/ маш сайн мэдэж байдаг бүрэн дүүрэн итгэлтэй, мөн та програмаар
хэн тань руу хандсаныг мэддэг. Апплетын хувьд програмыг зохиогч нь хэн
болох тухай мэдэхгүй, эсвэл програм хангалттай аюулгүй эсэх талаар. Үүнийг
толгойдоо хадгалж, аплетууд ирсэн зөвхөн тэр машиныхаа файл систем эсвэл
бусад хэсэг рүү хандах боломж локаль буюу клиент машинуудаас / дэдний
ажиллах/ илүү байдаг.
1.4.1 Өгүүлэмж
Өгүүлэмж ба аплетууд нь Java дахь бүх зүйлтэй адилхан классууд хэлбэрээр
бүхэлдээ бичигддэг. Классын гадна бичигдэх ямар нэгэн зүйл байж болохгүй,
С++-тай адил классын гадна функцүүдийг тодорхойлох г.м зүйлс боломжгүй.
Классыг нэр нь нэрлэх ёсыг дагах ёстой бөгөөд том жижиг үсгүүд ялгаатай.
Өгүүлэмж биелүүлэх үед JVM нь файлын нэртэй ижил нэртэй класс байгаа
эсэхийг хайдаг. Энэ класс нь эхлэх класс /initrating class/ гэж нэрлэгддэг. Pullic
хандалттай класс нь түүнийг гадна харагдана гэдгийг тодорхойлдог, ө.х JVM-д
харагдана. Энэ нь “main” гэж нэрлэгдэх методтой байдаг ба энэ нь compiler-аар
автоматаар хамгийн эхэлж ажиллах метод юм.
Энэ методоос бусад бүх классууд ба тэдний методууд холбогддог.
Өгүүлэмжийн энгийн жишээг үзье.
public class SimpleApp {
public static void main(String args[ ]) {
System.out.println(“Та өөрийн анхны програмаа үүсгэлээ”);
}
}
JDK-д өөрийн гэсэн хөгжүүлэлтийн орчин байдаггүй. Програмууд DOS editor,
notepad дээр бичигдэж болно. Файл нь эхлэн классын нэртэй адилхан нэртэй
.java өргөтгөлтэй хадгалагдах ёстой, дээрхи тохиолдолд энэ нь ‘SimpleApp.java’
байна.
Одоо main() методын тодорхойлолт дахь чухал хэсгүүдийг авч үзье. public
түлхүүр үг нь main() методыг програмын гадна харагдахаар болгодог, ө.х main()
методыг хөрвүүлэгч харах болно. Static түлхүүр үг нь main()–г агуулах классын
хувийг үүсгэлгүйгээр JVM шууд main ( ) метод руу хандаж чадна. void түлхүүр
үг нь main () метод ямар нэгэн утга буцаахгүй гэдгийг заана.
System.ont.println() нь гаралтын стандарт урсгал руу өгөгдөл хэвлэх метод юм.
Энэ нь агуулгыг хэвлэсний дараа шинэ мөрөнд шилжинэ.
Програм дараа нь хөрвүүлэгчээр (javac) хөрвүүлэгдэнэ.
Өмнө path=;c:javabi;c:javalib;c:java2include гэж Java 2-н Java програмуудыг
агуулж байгаа замыг хаах хэрэгтэй.
C:> javac SimplApp.java
Хөрвүүлэлтийн дараа byte кодыг агуулах .class файл үүснэ. Үүнийг дараа нь
C: > java SimpleApp
-6-
С.Ууганбаяр
JAVA програмчлал
1.4.2 Аплет
Програмтай адилхнаар файлын нэртэй адилхан нэртэй класстай аплет-г бичнэ.
Програмтай адилгүй нь main метод байхгүй. Бусад чухал методууд аплет-д
байдаг.
Import java.аплет.*;
Import java.awt.*;
Public class Apple extuds Аплет
{
public veid paint (graphics) {
g.drawstring C” An apple a Day Keeps the Doctor Away”, 50,50);
}
}
Эхний 2 бичиглэл нь аплет-д пакетуудыг багтаах буюу импортлох үүрэгтэй.
Пакет бол тусгай нэрийн дор категорчлогдсон классудын олонлог бөгөөд санд
(librory) хадгалагддаг. Энэ програм java. Пакетыг paint () методыг
ашиглахын тулд, java.аплет-г main классыг Аплет классаас урамшуулахын тулд
include хийж болно. ‘ extends’ түлхүүр үг нь удамшилд хэрэглэгддэг.
Paint (Graphics-д) метод нь аплет-д зураг, текстийг зурахад ашиглагддаг. Энэ нь
аплет-н график колтекстыг автоматаар параметр болгон авдаг. График колтекст
бол ямар нэгэн зүйл зурах бичих муж юм. Тиймээс paint() функц дэх ‘Graphics-
д’ нь аплет-н график колтекстыг өгдөг. Аплет-д текст бичихийн тулд бид
drawString (String text, int posx, int posy) функцийг ашиглана.
Дээрхи аплет нь классын нэртэй адил Аплет.java гэсэн нэртэй хадгалагдаж,
дараах байдлаар хөрвүүлэгдэнэ.
Javac Apple.java
Энэ нь byte кодыг агуулах .class файлыг үүсгэнэ. Энэ нь аплет учраас .class
файл нь HTML документ дотор суулгагдах ба браузерээр ажиллана. Хамгийн
энгийн HTML документ дараах байдалтай бичигдэж болно:
<html>
<head>
<title> “The Аплет is Rumming” </title>
</hend>
<body>
<аплет code=”Apple” heigt=200_width=200>
</аплет>
</html>
1.5. Java хэлний элементүүд
1.5.1 Операторууд
Төрөл Зорилго Тэмдэглэгээ Хэрэглэх байдал
-7-
С.Ууганбаяр
JAVA програмчлал
Арифметик Нэмэх + Int no =1+1
Хасах - Int no =1-1
үржих * Int no =1*1
хуваах / Int no =1/1
үлдэгдэл % Int no =1%1
нэмэгдүүлэх ++ no++ буюу ++no
нийлбэр олгох += no+=4
ялгавар олгох -= no- =4
үржвэр олгох *= no* =4
ногдвор олгох /= no/ =4
үлдэгдэл олгох %= no%=4
хорогдуулах - - no- - буюу - - no
Бит үгүйсгэл ~ ~a
ба & a&b
буюу  ab
xor ^
баруун шилжилт >>
баруун >>>
тэгээр дүүргэх
зүүн шилжилт <<
Хөрвүүлэх Тэнцүү ==
Тэнцүү биш !=
Их >
Бага <
Их буюу тэнцүү >=
Бага буюу тэнцүү <=
1.5.2 Өгөгдлийн төрлүүд
Java-д 8 үндсэн өгөгдлийн байдаг. Эдгээрээс чадал класс, интерфейс, массив
зэрэг өгөгдлийн төрлүүд байдаг. Класс ба интерфейсийн тухай сүүлд гүнзгий
үзнэ.
Өгөгдлийн
төрөл
Урт Хэмжээ Хэрэглэнэ
Byte 8 -128 127
Short 16 -32768 32767
Int 32 -2147483647 2147483647
- 263
263
-1Long 64
Double 64 1.7e – 308 1.7e + 308 Илүү нарийвчлалтай
fleat 32 3.4e – 038 3.4e +038 Бага нарийвчлалтай
char 16 0- ээс 65536 Java нь тэмдэгтийг
дүрслэхэд Unicode –г
ашигладаг. Тэмдэгт нь
кодоор эсвэл тэмдэгтээр
олгогдож болно.
Char choice=1y 1;
Char trop = 27;
-8-
С.Ууганбаяр
JAVA програмчлал
boolean True/false Boolean flag=true;
1.5.3 Бүтцүүд ба илэрхийлэл (Statemant and Expressions )
Бүтэц гэдэг нь тодорхой зориулалттай хэсэг дэх командууд юм. Java дахь зарим
бүтцийн бүтцийг авч үзье.
Dear reply = ‘y’;
Int book –no;
System.ont.println(” resulting statemant g”)
Java дахь бүх бүтцүүд цэгтэй таслалаар (semicolon) төгсдөг. Бүтцүүдийг
бүлэглэхэд нээх, хаах “{}” хаатлтуудыг хэрэглэдэг. Нээх, хаах хаалтуудтай
тодорхойлогдсон бүтцүүдийг олонлогын блок гэж нэрлэдэг.
----------------------------------
{
int count=0;
----------------
----------------
{
count=count+1;
----------------
----------------
}
}
Илэрхийлэл гэдэг нь операторууд ба операидуудаас бүрддэг, эдгээр нь утгыг
гаргадаг.
1.5.4 Хувьсагчид ба утгууд (тогтмолууд) (Variables and Literals)
Хувьсагч бол хамгийн үндсэн хадгалах нэгж юм. Энэ нь дараахь байдлаар
тодорхойлогдоно:
Type identifier=value;
Жишээлбэл, boolean status=true; int heigt=60;
Утгын жишээ, “lilly”, “tulip”, 100, 5179, 79 г.м
1.5.5 Тайлбар
Тайлбар нь хоёр байдлаар бичигддэг: ‘// ’ ба ‘ / * * / ‘. // нь дан мөр тайлбарт
хэрэглэгдэнэ.
Энэ нь хаа ч бичигдэж болох бөгөөд compiler түүний ардаас бичигдсэнийг үл
хэрэгсдэг.
/ * * / нь блок тайлбар оруулахад хэрэглэгддэг. Хэд хэдэн тайлбар хийхэд
хэрэглэнэ.
1.5.6 Хувьсагчийн үйлчлэх хүрээ (Scope)
-9-
С.Ууганбаяр
JAVA програмчлал
Хувьсагчийн үйлчлэх хүрээ нь түүний тодорхойлогдсон блокоор
тодорхойлогддог. Хувьсагч нь түүний тодорхойлогдсон блок болон түүн
доторхи бүх дэд блокуудад харагдана. Дараахь жишээг үзье:
Public class Visibility
{
public Static void main (String args [ ] ) {
block 1 : // энэ бол label
{
int gvar = 100;
block 2:
{
int lvar = 200;
system.out.println (“Глобаль хувьсагч” + gvar);
system.out,println (“Локаль хувьсагч” + lvar);
}
}
gvar=gvar+1;
System.out.println (“Глобаль хувьсагч” + gvar);
Lvar =lvar+1; // алдаа
}
}
}
Тэнд: Java-д өөр блокуудад боловч ижил нэртэй хувьсагчид зарлахыг
зөвшөөрдөггүй.
Жишээлбэл, gvar хувьсагчийг block2 дотор дахин зарлавал алдаа өгнө.
1.6 Програмчлалын элементүүд
Програмчлалын элементүүд нь програмын биелэх дарааллыг удирддаг. Java
дахь програмчлалын элементүүд нь С++ -аас авсан бөгөөд нэмсэн зүйл байхгүй.
1.7 Массив
Массив бол нэгэн ижил нэрийн дор заагдах ижил төрлийн хувьсагчдын бүлэг
юм. Массив нь дурын хэмжээст байж болно. Дараах жишээг үзье.
Public class EnyBenus
{
public static void main (String args [ ])
{
String ebonus[ ] [ ] =new String [2][5];
Ebonus [0][0]= “P.K.Roy” ;
‘
‘
‘
‘
ebonus [1][4]= “5500”;
for (int I=ө; i < 5; I ++)
{
System.out.println (“Emplorgee name:” + ebonus [0] [ i]);
-10-
С.Ууганбаяр
JAVA програмчлал
System.out.println (“Bonus Receved:” + ebonus[1][i]);
}
}
}
Java-д массивтай ажиллах нь бусад хэлэн дэхтэй ижил, гэхдээ массив үүсгэх нь
нэлээд өөр:
Type name[ ] = new type [no.of elements];
Жишээ нь: int item_code [ ] = new int [10];
String week Days [ ]= new String [7];
New түлхүүр үг нь заалт төрлийн хувьсагчдад санах ой хувиарлахад
ашиглагддаг. Java-д тэмдэгттэй ажиллахад ‘String класс’-ийн тусламжтай
хийгддэг. Энэ класс нь зөвхөн тэмдэгт мөр үүсгэхийг зөвшөөрдөггүй, гэхдээ
тэмдэгтийг боловсруулах олон функцүүдтэй.
Хоёр буюу олон хэмжээст массив:
Float twoP_Array[ ] [ ]= new float [5][10];
байдлаар үүсгэдэг. Мөн 2 хэмжээст массивын ялгаатай тооны багануудтайгаар
үүсгэж болдог.
Int list+[ ] [ ] = new int [2][ ];
List[0] = new int [6];
List[1] =new int [15]
Лекц№3
2. Java дахь ОХП
2.1. ОХП-н ухагдахуунууд
Объект хандлага бол програмчлалын технологи дахь шилжилт юм. Одоог
хүртэл програм зохиогчид процедур програмчлалын уламжлалт аргыг хэрэглэж
байна. Процедур програмчлалд програм зохиогч заавруудын дарааллыг
компьютерийн системд өгдөг. Код том хэмжээтэй болоход кодыг процедур ба
функцүүд гэж нэрлэгдэх блокуудад хуваах хэрэгтэйг мэдсэн. Үүнийг бүтцийн
програмчлал гэдэг байв.
Бүтцийн програмчлал нь кодын удирдаж болох хэсгүүдийг байгуулахад
туслана, гэхдээ ижил хугацаанд энэ олон дутагдалтай. Ихэнхи тохиолдолд
функц ба процедурууд тэднээс гадуурхи өгөгдлийг ашиглаж байдаг. Үүний үр
дүнд модулыг шалгахад маш хүнд болдог., модул бүр зөв ажиллаж байгаа
эсэхийг нь мэдэхийн тулд шалгагдаж байдаг, тэр утгыг өөрчилсний дараа
гэмтсэнийг мэдэхийн тулд. Энэ асуудал нь програмын хэмжээг нэмэгдүүлэн
хүндрүүлдэг. Процедур програмчлал дахь өөр нэг асуудал бол өгөдөлд
хоёрдугаарт ач холбогдол өгдөг. Өгөгдөл бол ямар ч програмчлал дахь хамгийн
чухал зүйл. Үнэн хэрэгтээ өгөгдөл бол програм яагаад оршиж байгаагын
анхдагч учир шалтгаан. Гэвч процедур програмчлалд өөр нэг цохон тэмдэглэх
-11-
С.Ууганбаяр
JAVA програмчлал
зүйл бол функц, процедуруудын тусламжтайгаар өгөгдөл яаж удирдагдах вэ
гэдэгт байдаг.
Эдгээр асуудал нь объект хандлагат технологиор шийдэгддэг. Объект хандлагат
технологид өгөгдөл нь анхдагч чухалчлал болдог. Объект хандлагат
технологийн цөм бол объект. Объект бол өгөгдөл ба тэдгээр өгөгдөлтэй
ажилладаг методуудын нэгдэл юм. Үүнийг сайн ойлгохын тулд, ямар нэгэн
бодит амьдралын объектод анхаарлаа хандуул, жишээлбэл үзгийг авч үзье. Үзэг
бол шинж чанар (өнгө, бие, үзгэн эсвэл бөөрөнхий хошуутай г.м) ба ааш
авиртай (үзэг бичдэг) объект юм. Үүнтэй төстэйгээр объект хандлагат
технологид объект нь шинж чанар (өгөдөл)ба ааш авирыг (өгөгдөл дээр
боловсруулалт хийх методууд) агуулж байдаг. Энэ ойлголт нь процедур
програмчлалаас эрс ялгаатай болгодог.
Бид объект хандлагын тухай ярих үед объект, класс, хийсвэрлэл, удамшил,
полимор , битүүмжлэх зэргийг олон ухагдхуунууд бодит толгойд бууна. Бид
объект гэж юу болох тухай ярилцсан, одоо үндсэн ухагдхуунуудыг нэг нэгээр
нь тайлбарлая.
2.1.1 Класс
Класс нь төстэй объектуудбн цуглуулга. Эдгээр объектууд нь ижилхэн
өгөгдлийн бүтэц ба методуудтай байх ёстой
2.1.2 Хийсвэрлэл
Хийсвэрлэл бол програмын үндсэн зорилгоос өөрийн сонирхож байгаа зүйлсээ
илрүүлэх процесс бөгөөд өөрт хамаагүй нарийвчлалуудын гадна орхидог.
Жишээлбэл, Order Processing System-г авч үзье, зүйл бүр нь түүнийг адилтгасан
үл давтагдах дугаартай. Энэ зүйл (item) нь тодорхойлолт, үнэ, тоо ширхэг,
дахин дугаарлах эрэмблэлтэй байна. Бид мөн өөр өнгө, хэмжээс зэрэг
атрибутыг авч болно. Гэхдээ эдгээр атрибутууд ь Order Processing System-д
төдийлөн ач холбогдолгүй, тиймээс бид тэднийг өөрсдийн зохиомжоосоо орхиё.
Энэхүү таарахыг нь үлдээгээд үл таарахыг нь орхиж байгаа процессыг
хийсвэрлэл гэдэг.
2.1.3 Битүүмжлэл
Өмнөх хэлснээр объект нь өгөгдөл ба түүнтэй ажилладаг методуудын нэгдэл
юм. Өгөгдөл ба методуудыг хамтад нь багцалж байгаа энэ аргыг битүүмжлэл
гэдэг.
Order Processing System-с адил хэмжээг дахин авъя. Бид өгөгдлийн тал дээр аль
хэдийн шийдчихсэн, одоо объектын методуудыг олж тогтооё. Методууд нь:
a) Зүйлийн тодорхойлолтуудыг хэвлэх
b) Зүйлийн өгөгдлүүдийг оруулах /хүлээн авах/
c) Тоо хэмжээг өөрчлөх
d) Материалын утгыг хэвлэх
e) Зүйл дахин дугаарлагдах эсэхийг тодорхойлох төвийг хэвлэх.
-12-
С.Ууганбаяр
JAVA програмчлал
Объект
Өгөгдөл Методууд
ItemNo Print Details
Description Accept Details
Rate Change QOH
Quantity on hand Display Value
Reorder Level Reorder Status
Өгөгдөл ба методуудыг хамтад нь багцалж байгаа энэ арга нь битүүмжлэл
бөгөөд энэ нь өгөгдлийн далдлатад хүргэдэг, учир нь гадна талыг интефэйсүүд
төлөөлнө харин дотор атрибутууд далдлагдана.
2.1.4 Удамшил
Удамшил бол шатлан захирах хамаарал дээр тулгуурласан классуудын хооронд
атрибут ба үйлдлүүдийн эзэмшилт юм. Удамшигч нь мөн үндсэн классын бүх
атрибутууд ба зан байдлыг түүний sub-класст бэлэн болгож дахин ашиглаж
төлөвшдөг. Жишээлбэл, бид order Processing System-д Item гэж нэрлэгдэх
объектыг авсан. Компани компьютерийн төхөөрөмж худалддаг гэж бодъё.
Тэгвэл энэ Item нь Printer, Stationery, Floppy disk sub-классуудад тохирно.
Эдгээр бүх sub-классуд нь нийтлэг itemno, description, rate, qurantity on hand,
reorder level атрибуудтай, бид эдгээрийг super класс item-н дор оруулсан.
Printer sub класс нь эдгээр бүх атрибут дээр өөрийн хоёр атрибутыг нэмнэ-
хэвлэлийн төрөл /laserjet эсвэл Inkjet/, минутад хэвлэх хуудасны тоо. Stationory
класс нь мөн Super классын атрибуттуд дээр өөрийн нэг атрибутыг нэмнэ-
хуудсын хэмжээ. Floppy disk класс мөн super классын атрибутууд дээр нэмээд
өөрийн 2 атрибутуудтай-багтаамж ба хэмжээ. Энэ удамшлыг зургаар үзүүлбэл.
Item
Item No
Description
Rate
Quantity on hand
Reorder level
-13-
С.Ууганбаяр
JAVA програмчлал
Printer Stationery Floppy disk
2.1.5 Полиморфизм
Полифермизм бол өөр өөр объектуудтай ялгаатай байх метод эсвэл үйлдлийн
чадвар юм. Жишээлбэл, show функц нь Printer ба Floppydisk классуудын хувьд
ялгаатай байна.
SiteType Capacity
Pages Per Minute Site
2.2 Класс ба объект үүсгэх
Бид одоо объект ханлагат програмтай танил боллоо. Одоо Item class-г үүсгэх
Java програм бичье.
Class Item {
Private int itemno;
Private string description;
Private float rate;
Private int goh;
Private int roe;
Public void display () <
System.out.println (“Item Details”);
Sistem.out.println (“. . . . . .. . . . ”);
Sistem.out.println (“Item number : ” + itemno);
Sistem.out.println (“Description : ” + description);
Sistem.out.println (“Rate : ” + rate );
Sistem.out.println (“Quantityon hand : ” + );
Sistem.out.println (“Reoder level : ” + roe);
Public void change QOH ( int qty, char Status) {
If (Status == ‘A’)
Qch=qch+qty;
Else
If (status = = ‘S’)
Qoh=qoh-qty;
}
public void accep+Details ( int ino, String desc, float rt, int qty, int reorder) {
itemno=ino;
description=desc;
rate=rt;
qoh=qty;
rol=roerder;
}
2.3 Санах ойн менежмент (Memory Management)
-14-
С.Ууганбаяр
JAVA програмчлал
Та Java –д шинэ объект үүсгэхэд пек операторыг ашигладгыг үзсэн. Энэ
оператор нь объектын өгөгдөл бүрт тохирох хэмжээтэй бүхэл санах ойг
хувиарладаг. Java-д санах ойг удирдах нь динамик ба автомат. Энэ нь зүгээр л
объектын шууд заагчийг үүсгэх боломжтой ба сүүлд нь түүнд пек операторын
тусламжтай ой хувиарлана гэсэн үг.
………….
Item I;
…………
…………
I= пеw Item () ;
……….
Одоо классын объектын классуудад ой яаж хувиарлагддагыг үзье. Классын
объект бүр түүний тусдаа атрибутуудынхаа хувьд ой хувиарлагдсан байдаг.
Гэвч нэгэн ижил классын бүх объектууд ижил методуудыг эзэмшинэ. Энэ нь
зүгээр л классын объект пек операторын тусламжтай үүсгэгддэг, ой нь түүний
атрибутуудад хувиарлагддаг боловч методуудад хувиарлагддаггүй гэсэн үг.
Санах ой
Item классын методууд
Assept Details
Display
Change QOH
Item A Item B
Java -д санах ойн удирдлага нь автомат учраас та объектын хэрэглэсэн санах
ойг чөлөөлөх хэрэггүй. Java нь хэрэглэгдэхгүй болсон объектуудыг хайдаг хог
цуглуулагчтай байдаг ба тэдгээр объектуудаар ашиглагдсан ойг буцаан
сэргээдэг.
Олон тохиолдолд объект нь түүнийг устгах үед тодорхой үйлдлүүдийг хийдэг.
Жишээлбэл, програм файл handl, цонхны тэмдэгтийн файл зэрэг объект
устахынхаа өмнө суллах хэрэгтэй болно. Энэ метод нь объект хог
цуглуулагчаар чөлөөлөгдөхийн өмнө дуудагддаг. Finalite() методын
1 2
Nuts & Botts Hammer
23.56 75.89
100 156
23 50
-15-
С.Ууганбаяр
JAVA програмчлал
тодорхойлж буй энэ процессыг finalitation гэж хэлдэг. Finalite() методын
ерөнхий хэлбэр:
Protected void finalite () {
…….
…….
}
Ямар ч гэсэн та нэг зүйлийг тэмдэглэх ёстой. Хэзээ хог цуглуулагч идэвхждэг
мөн Finalite() дуудагддаг болохыг мэдэх боломжгүй. Иймээс та хэзээ Finalite()
дуудагдах, эсвэл дуудагдсаныг хэзээ ч баттай хэлж чадахгүй.
Та пек оператын тусламжтай объектод санах ойг ил тодорхой хувиарладаг, гэвч
түүнийг тодорхойгоор чөлөөлж чадахгүй.
Runtime класс
Runtime класс нь run-time орчныг битүүмжилдэг. Run-time орчин нь аль хэдийн
оршиж байгаа бол та Runtime объектыг үүсгэж чадахгүй. Гэхдээ та getRuntime()
методын тусламжтай идэвхтэт run-time орчны заалтыг авч чадна. Та ил
тодорхой байдлаар gc() методыг ашиглан хог цуглуулагчыг дуудаж болно.
Дараах кодыг хэсэг хог цуглуулагчийг дуудна.
……….
……….
Runtime r=Runtime, getRuntime();
r.gc();
2.4 Төрөл хувиргалт
Java програмд олон удаа нэг төрлийн өгөгдөл утгыг өөр төрлийн утга руу
хөрвүүлдэг. Жнь: int-с float руу, float-c double руу. Casting бол утгыг түүний
анхны төрлөөс өөр төрөлтэй шинэ утга болгох процесс юм. Төрөл хувиргалт нь
үндсэн өгөгдлийн төрлүүд (int8 flout8 boolean г.м) хооронд, эсвэл объектуудын
хооронд (String, Point, Integer г.м) эсвэл үндсэн төрөл ба объектын хооронд
хийгддэг.
2.4.1 Үндсэн өгөгдлийн төрлүүдийн хувиргалт
Энэ нь үндсэн өгөгдлийн төрөлтэй нэг утгыг өөр нэг үндсэн өгөгдлийн
төрөлтэй болгож хувиргах. Гэхдээ boolean утгууд true эсвэл false гэсэн хоёрхон
утга авдаг учраас хувиргалт хийгдэж болохгүй. Хувиргалт нь ихэвчлэн тоон
утгуудад хийгддэг. Энэ тохиолдолд дүр утга нь эх утгаасаа том байх хэрэгтэй,
жнь: int-г long руу. Учир нь бага утга их утга руу хувиргахад их утгад алдаа
гарахгүй. Ийм төрлийн хувиргалт нь автоматаар хийгддэг.
Харин, хэрэв дүр утга нь эхээс том байж чадахгүй бол ил төрөл хувиргалтыг
хийдэг. Ил төрөл хувиргалт нь дараах байдлаар хийгдэнэ.
(data type)value
Дараах кодын хэсэг float утгыг int утга руу хөрвүүлж байна.
……..
int i ;
-16-
С.Ууганбаяр
JAVA програмчлал
float f=6.7;
I=(int)f;
……….
Ямар ч гэсэн энэ тохиолдолд өгөгдөл гэмтэнэ. I хувьсагч нь 6 утгатай байж
болно, зөвхөн бүтэн утга авна. Өөр нэг бүтэн тоог бодит руу хөрвүүлсэн жишээ
үзье.
……….
Int i =1078;
Double d;;
…………
2.4.2 Объектуудын төрөл хувиргалт
Нэг классын объект нь өөр нэг классын объект руу хөрвөж болно. Гэхдээ энэ 2
класс нь хоёул хоорондоо удамшлаар холбогдсон байх ёстой, ө.х нэг класс нь
нөгөөгийн sub класс байх ёстой.
Энд мөн далд эсвэл ил төрөл хувиргалт хийгдэнэ.
Далд хувиргалт нь бага төрлийн объект том төрлийн объект руу хувиргагдаж
байгаа үед явагдана. Энэ нь ил хувиргалтгүйгээр sub классын объект нь super
классын объект болн ашиглагдаж болно гэсэн үг. Учир нь супер классын бүх
атрибут, методууд автоматаар түүний sub классд байдаг.
Хэрэв sub классын объект super класс руу хувиргагдаж байгаа бол ил хувиргалт
явагдана. Энд бодох ёстой нэг зүйл бит-ын хувиргалтын үр дүнд мэдээлэл
гэмтэж болно. Учир нь sub класс бол түүний super классын илүү үүргүүдийг
агуулдаг. Объектыг доорхи байдлаар төрөл хувиргана.
(class name) object
Ж.нь: Item new Item ();
Printer P= new Printer();
I=P; // зөв, далд хувиргалт хийгдэнэ.
P=I; // буруу, ил хувиргалт хэрэгтэй
P=(printer) I;// зөв
2.4.3 Үндсэн төрлөөс объект руу эсвэл объектоос үндсэн төрөл рүү хувиргах
Объектын үндсэн төрөл рүү хувиргах буюу vice – versee нь Java-д
зөвшөөрөгддөггүй. Учир нь ердийн үндсэн төрлүүд нь класстай адилгүй бөгөөд
тэдгээр нь объектоос ялгаатай. Хэдийгээр объектын үндсэн төрөл рүү хувиргах
нь зөвшөөрөгдөөгүй боловч Java үүнийг өөр байдлаар бий болгосон. Java.long
пакет нь үндсэн өгөгдлийн төрлүүдтэй тохирох классуудыг агуулдаг. Жнь:
Integer класс нь int үндсэн төрлийн оронд, үүнтэй төстэйгээр Boolean, Byte8
Character, Long, Void, Double, Float г.м классууд байдаг.
Объектын үндсэн төрөл рүү хувиргахын тулд уг классын методуудыг ашиглаж
болно. Жнь: String объектыг int рүү хувиргах дараах кодыг харъя:
String str = nek String (“4578”);
Int i = Integer.Parse Int (str);
Дээрхи кодод String-н str объектын бүхэл утгыг авахад Integer классын parse Int
методыг ашиглаж болно.
Лекц№4
2.5 Байгуулагчид
-17-
С.Ууганбаяр
JAVA програмчлал
Байгуулагч бол объектын анхан утгуудыг тогтооход ашиглагддаг классын нэг
метод юм. Байгуулагч нь бусад классын методуудтай адилхан зарлагддаг.
Гэхдээ байгуулагч нь буурах утга байдаггүй ба түүний нэр нь классын нэртэй
ижил байдаг. Дараах кодын хэсэг нь Item классын байгуулагчыг тодорхойлж
байна.
Item() 1
Itemno=0;
Description = nek String ();
Rate = 0.0 f;
Goh = 0;
Rol =0;
}
Энэ байгууллага нь дуудагдсан үедээ объектын өгөгдлүүдэд утга онооно.
Байгуулагч дараах байдлаар дуудагддаг:
Item I= new Item ();
Java нь default байгуулагчийг класс болгонд үүсгэдэг. Хэрэв хэрэглэгч
тодорхойлогч бол. Хэрэв хэрэглэгч классын байгуулагч методыг тодорхойлсон
бол энэ нь уг классын объект үүсэх үед дуудагддаг.
2.5.1 Олон байгуулагч үүсгэх
Класс нь олон байгуулагчтай байж болно. Гэвч яагаад класст олон байгуулагч
хэрэгтэй болдог юм бэ? Байгуулагч бол объектын эхний төлвийг байгуулах
арга, объектыг олон замуудаар үүсгэхийг хүсч болно. Програмд дуудагдах
байгуулагч нь объект үүсч байх үед тодорхой болно. Дараах жишээнд Item-ийн
2 байгуулагчыг тодорхойлж, объектууд хэрхэн ялгаатай замаар үүсгэгддэгийг
үзүүдэв.
Class Item {
Private int itemno;
Private String description;
Private float rate;
Private int goh;
Private int rol;
Public void display () {
System. out. println (“Item details”);
System. out. println (“Item details”);
System. out. println (“Item number : ‘’ + itemno);
System. out. println (“Description : ” + description);
System. out. println (“Rate :” + rate);
System. out. println (“Quantity on hand :” + qoh);
System. out. println (“Reoder level :” + rol);
}
public void change QOH (int, qty, char status) {
if (Status == ‘A’)
qoh = qoh + qty;
-18-
С.Ууганбаяр
JAVA програмчлал
else if (status == ‘s’)
qoh=goh – qty;
}
public void accapt Details ( int ino, string dese, float rt, int qty, int reorder);
{ itemno = ino;
description = desc;
rate = rt
qoh = qty;
rol = reorder;
}
Item () { // байгуулагч 1
Itemno = 0;
Deseription =
Rate = 0. 0 f;
Roh = 0;
Roe = 0;
}
Item (string str) { // байгуулагч 2
Itemno = 0
Description = str;
Rate = 0.0 f;
Roh = 0;
Roe = 0;
}
} Item.Java файл
Import Item;
Class Try Item {
Public void (string args [ ] ) {
Item I=new Item (); // байгуулагч 1-г дуудна
i. display;
string d=new string (“Nuts 2 Bolts”);
Item I=new Item (d); // байгуулагч 2-г дуудна
i. display;
/* буруу, классд тохирох байгуулаа тодорхойлогдоогүй */
item k=new Item (1, d);
k.display();
}
} Try Item.java файл
Энд импортлогдож байгаа Item класс нь нэгэн ижил каталогт байх ёстой.
Default байгуулагч объектын өгөгдлүүдийг яаж
Ижил нэртэй боловч ялгаатай тодорхойлолттой 2 функц байвал үүнийг
функцийг дахин тодорхойлолт гэдэг.
2.5 Объектуудыг харьцуулах
Үндсэн өгөгдлийн төрлүүдийг харьцуулахад == (тэнцүү) операторыг ашигладаг.
Доорхи жишээг харъя:
-19-
С.Ууганбаяр
JAVA програмчлал
Class Compint {
Public strtic void main (string args [ ] ) {
Int x= 33;
Int y=33;
If ( x==y)
System.out.println (“Equal”);
Else
System.out.println (“Not Equal”);
Энэ програмын үр дүн нь х, у хоёул тэнцүү учраас “Equal” байна. Одоо Integer
классын объектыг ашиглаж ижил програм бичьев
Class CompInteger {
Public static void main (String args [ ]){
Integer x= new Integer (33);
Integer y= new Integer (33);
If (x==y)
System.out.println (“Equal”);
Else
System.out.println (“ Not Equal”);
}
Энэ програмын үр дүн нь хоёр объект хоёул 33 утгатай байхад “Not Equal”
байна. Учир нь == оператор нь 2 объектыг харьцуулдаг. Харин объектын
утгуудыг харьцуулдаггүй, х бау нь объектууд, тиймээс үр дүн нь “Not Equal”.
Ялгаатай объектуудын хувьд ой хувиргалт
Санах ой
х у
33 33
Дараах байдлаар объектуудыг зарласан үед дээрхи програм нь “Equal” үр дүн
гарна.
Integer y;
y = x;
Учир нь зөвхөн ганц объект 33 гэсэн утгатайгаар үүссэн. у объектод санах ой
хувиарлагдахгүй учир нь энд байгуулагч метод ашиглагдахгүй. Тиймээс у бол
зүгээр л Integer төрлийн объектын заалт, гэвч одоохондоо энэ нь ямар нэг зөв
объект заахгүй байна. у=х –н дараа у нь х-н зааж байгаатай адил объектыг
заана.
Ижил объектыг заах хувьсагчдын санах ой хувиарлалт
Санах ой
х у
-20-
С.Ууганбаяр33
JAVA програмчлал
Ингэхлээр, 2 объект тэдгээрийн утгын хувьд харьцуулагдах үед == операторыг
ашиглаж болохгүй. Хоёр объектод ашиглагдах утгуудыг харьцуулахад equals ()
методыг хэрэглэж болно.
Жнь:
Class CompInteger {
Public static void main (string args [ ]) {
Integer x= new Integer (33);
Integer y= new Integer (33);
If (x.equals (y))
System.out.println (“Equal”);
Else
System.out.println (“ Not Equal”);
2.6 Удамшил
Бид өмнө удамшлын тухай бяцхан оршил хийсэн. Одоо яаж хэрэгжүүлэхийг авч
үзье.
Бид Item классыг 5 атритурт, 3 метод, 2 байгуулагчтай тодорхойлсон. Одоо Item
классын дэд класс Printer-г нэмэлт атрибутуудтайгаар үүсгэе.
Import Item;
Class Printer extends Item {
String type;
Int ppm;
Printer () { // байгуулагч 1
Super () ;
Type ;
Ppm=0;
}
Printer (int ino8 string desc, float rt, int qty, int reorder, string type, int ppm){
Super (ino, desc,rt, qty, reorder); // байгуулагч 2
This.type = type;
-21-
С.Ууганбаяр
JAVA програмчлал
This.ppm = ppm;
}
public void display () {
super.display (); // super классын display методыг дуудах
system.out.println (“Printer-н төрөл : ” + type);
system.out.println (“Минут дахь хуудас : ” + ppm);
Printer.java файл
Import java.lang.*;
Import Printer;
Class Try In herit {
Public static void main (String args [ ]){
Item I=new Item (1, “Mouse”, 500.89f 1200, 200);
i. display ();
Printer p=new Printer (2, “Inkjet Printer”, 10000.75f, 200.35, “6P”, 6);
P. display () ;
}
}
Try Inherit.java файл
Super түлхүүр үг нь super классыг заахад хэрэглэгддэг. Printer классын
байгуулагч 1-д Super () бичиглэл нь Item super классын байгуулагч 2-д super
(ino, desc, rt, qty, reorder) бичиглэл нь Item super классын байгуулагч методыг
(дугаар 1) шууд дуудаж байна. Төстэйгээр Printer классын байгуулагч 2-д super
(ino, desc, rt, qty, reorder) бичиглэл нь Item super классын байгуулагч методыг
(дугаар 2) дуудаж байна. Printer классын display метод супер классын display
методыг дуудагч эхний 5 атрибутыг хэвлээд дараа нь нэмэлт 2 атрибутыг
хэвлэж байна. Энэ нь Sub класс супер класс хоёул ижил нэртэй функцүүдтэй
байж болно гэдгийг харуулж байна. Printer-н байгуулагч 2 нь мөн this түлхүүр
үгийг ашиглаж байна. this түлхүүр үг нь тухайн идэвхтэй объектыг заахад
хэрэглэгддэг. Байгуулагч 2 методын аргументуудын нэг нь объектын
атрибуттай адилхан нэртэй (type) байгааг ашиглаххэрэгтэй. Энэ нь ямар
хувьсагч нь утга өгч, ямар нь утга авч байгаа нь тодорхой байх ёстой. Иймээс
this.type = type бичиглэл өгөгдөж байна.
2.7 Полиморфизм
Өмнө хэлснээр полиморфизм бол ялгаатай объектуудад ялгаатайгаар харш
үйлдэл хийх функцийн чадвар юм. Полиморфизмын 2 төрөл байгаа, static ба
динамик полиморфизм.
Static полиморфизмд дуудагдах функц нь компиляц хийх үед өөрөө мэдэгддэг.
Жнь:
Дараах хоёр тодорхойлолттой 2 функц програмд зарлагдсан байдаг:
Change QOH (int, char)
Change QOH (int)
тэгээд програмд дараах команд өгөгдсөн: Change QOH (30);
-22-
С.Ууганбаяр
JAVA програмчлал
Хоёр дахь функц дуудагдах бөгөөд энэ нь хөрвүүлэлтийн үед өөрөө тодорно.
Хоёрдугаар функц дуудагдах нь энэ тохиолдолд функцэд өгөгдөх аргументын
тоо ба төрлөөр тодорно. Зөвхөн нэг аргумент өгөгдсөн учраас 2 дахь функц
дуудагдана. Хэрэв хоёр аргумент (нэг нь int нөгөө нь char) өгөгдсөн бол эхний
функц дуудагдах байсан. Энэ онцлогыг мөн Функцийн тодорхойлолт буюу
Эрт Холболт гэдэг.
Dynamic полиморизм бол Хожуу холболт гэж мөн нэрлэгддэг. Динамик
полиморизмд дуудагдах функцийн шийдэл нь ажиллаж байх үед шийдэгддэг.
Илүү тодорхой болгохын тулд жишээ авъя.
Бид өмнө Item ба Printer класс файлууд тодорхойлсон. Printer бол Item классын
sub класс. Энэ нь супер классын (Item) заалтыг задлах боломжтой ба тэгээд
ажиллаж байх үед нь хэрэглэгчийн оролтоос хамааруулан Item эсвэл Ptinter
объект тодорхойлогдож болно.
Import Ptinter;
Import java.io.*;
Class Try Poly {
Public static void main (string args [ ]) {
Item I;
Int ch =0;
While ( ch ! = ‘P’ && ch! = ‘N’)
{
System.out.println(“ердийн Item нэмэхэд N, Printer нэмэхэд P
дар”);
Try {
Ch=System.in.read();
}Catch (I 0 Exception e) {
System.out.println (“Error”); }
}
if (ch==’p’)
I=new Println (1, “Laser jet”, 20000f, 100,25. “III plus”, 8);
Else
I=new Item (1, “Mouse Logitech”, 300f, 100, 20);
i. display ();
}
}
Динамик полиморфизмын хэрэгжүүлэх (TryPoly.java)
2.8 Командын мөрийн аргументууд
Командын мөрийн аргументууд бол командын мөрнөөс Java програмд
дамжигдах аргументууд юм.
Java програм нь дараах командыг өгч ажилладаг:
Java { class file name}
Жишээ нь: TryPoly.class файлыг ажиллуулахад java TryPoly
Програмд аргументууд дамжуулахад дараахь команд өгөгдөж болно:
Java TryPoly c1 c2 c3 c4 c5
Энд с1 нь эхний аргумент, с2 нь хоёрдох аргумент г.м. Хоёр аргументын
хооронд заавал сул зай байх ёстойг анхаараарай. Командын мөрөн дээр
аргументыг хүлээн авахын давуу тал нь програм илүү ерөнхий шинжтэй болно.
-23-
С.Ууганбаяр
JAVA програмчлал
TryPoly.java програмд анхаарлаа хандуулъя. Ямар төрлийн объект үүсгэхийг
ажиллаж байх үед асуухын оронд командын мөрнөөс аргументаар дамжуулж
програмд өгье.
Одоо Java яаж командын мөрийн аргументуудыг боловсруулдагыг үзье. Хэрэв
програм командын мөрнөөс аргумент хүлээн авсан бол Java эдгээр
аргументуудыг тэмдэгт мөрийн массивт хадгалан main() функцэд дамжуулдаг.
Дараа нь програм үүнийг хүссэн цагтаа боловсруулж болно. Жишээ нь:
Public class TryMain Arguments {
Public static void main (string [ ] args)
{
int I =0;
for ( I=0; I < args.lugth; I ++) {
System.out.println (“Аргумент ” + (I+1) + “ ; “ + args [i]) ;
}
}
}
Командын мөрийн аргументуудыг хэвлэх.
Одоо TryPoly.java програмыг дээр хэлснээр өөрчилье:
Class TryPoly 1 {
Public static void main (String args [ ]) {
Item :;
If (args. Length !=1) {
System.out.println (“Аргументын тоо буруу ”);
System.exit (0); }
If (args [0]. Equals (“P”)) {
I=new Println (1, “Laserjet”, 20000 f, 100, 25, “III plus”, 8);
i.display () ;
}
else
if (args [0]. Equals (“N”)) {
I=new Item (1, “Mouse logitech”, 300f, 100, 20);
i. display ();
}
else {
System.out.println (“Буруу утга ….”);
System.exit (0);
}
}
}
Лекц №5
3.1 Хандалт ба хандалтын удирдлага
-24-
С.Ууганбаяр
JAVA програмчлал
Өмнө хэлснээр битүүмжлэл нь классын өгөгдөл ба методуудын хамтад нь
нэгтгэж дан бүхэл болгодог. Битүүмжлэл дэх хамгийн чухал зүйл бол класс
дотрхи компонентуудын хамгаалалт юм. Энэ бол классын рүү хандалтыг
чангатгахад маш чухал бөгөөд өгөгдөл буруу ашиглагдахгүй. Ийм шалтгаанаар
хандалт тодорхойлогчид, public, private, protected, өгөгдөл рүү ялгаатай
замаар хандахыг удирдахын тулд тодорхойлогдсон. Хандалт тодорхойлогчид нь
өгөгдлүүдийн харагдах байдалд нөлөөлдөг ба мөн классын гадна методуудын
харагдах байдалд нөлөөлнө. Эдгээр методуудад классын гадна талаас нэг бол
удаанаар эсвэл классын объектыг үүсгэж хандахад Хандалт тодорхойлогчид нь
дан класс эсвэл пакетын түвшинд бүлэг классуудтай ажилладаг. Бид
одоохондоо хандалт хувиргагчдыг нэг класс хэрэглэнэ.
Сүүлд удахгүы пакетын тухай үзнэ.
3.1.1 Default
Ямар нэгэн хандалт хувиргагчтай зарлагдаагүй хувьсагч буюу метод нь ижил
пакет дотроо бусад классуудад бэлэн байна. Нэгэн пакет дахь классууд public
гишүүдтэй адил default хувьсагчдад хандаж чадна.
3.1.2 Public
Public хандалт нь классын гаднаас гишүүн өгөгдөл, функцүүд рүү нээлттэй
хандахыг зөвшөөрдөг.
3.1.3 Privite
Ийм өгөгдөл, функцүүд рүү зөвхөн public гишүүн функцүүдээр дамжин
ханддаг.
3.1.4 Protected
Protected гишүүд нь уг классаас удамшсан классд дотроос хандахыг
зөвшөөрдөг.
3.1.5 Static
Класс дотор хувьсагч static-р тодорхойлогдсон үед түүний зөвхөн нэг хувийг
классын объектуудын гадна үлдээдэг. Энэ нь мөн кодын дурын бусад хэсгээс
хандаж болох глобаль хувьсагч болно.
Static <type name> <variable>;
Хэрэв метод static-р зарлагдсан бол энэ нь классын заалттай хамт хэрэглэгдэх
ба объектод хамаарахгүй оршдог. Static хувьсагчид ба методууд нь классын
хувь үүссэн ч үүсээгүй ч сул чөлөөтэй оршдог. Static метод нь зөвхөн бусад
static метод, хувьсагчдыг чадна, тэд ямар ч тохиолдолд уг эсвэл super-
г зааж чадахгүй.
Static хувьсагч ба методуудаас гадна кодын блок мөн static-р тодорхойлогдож
болно. Түүнийг static блок гэдэг. Энэ блокын онцлог нь класс ачаалагдах үед л
биелдэг кодын бусад хэсэг биелэхээс өмнө. Энэ нь үндсэндээ хийгч дүрэм
байдлаар ажилладаг.
-25-
С.Ууганбаяр
JAVA програмчлал
Class Static_Block
{
Static int a;
Static
{
a=a+10;
}
public static void main (String args [ ])
{
System.out.println (“ a-н утга : ” +a);
}
}
Дээрхи жишээнд main () методоос өмнө static блок биелнэ, ‘a’ хувьсагч эхлээд
ба дараа нь main () метод биелнэ.
3.1.6 Final
Final нь хувьсагч ба методуудтай хамт хэрэглэгдэж болно. Хувьсагч final
байдлаар зарлагдсан үед энэ нь тогтмол байдлаар хэрэглэгддэг, түүний утгыг
өөрчилж чадахгүй. Тогтмол зарлах жишээ:
Final int radias =34
Final float pi =3. 1428f;
Float төрлийн хувьсагчдыг зарлахад ардаас ‘f ’ үсэг тавьж ил
төрөл хувиргалт хийх шаардлагатай байдаг.
Методыг final байдлаар зарлах нь түүнийг байгаагаар нь үлдээхийг хүссэн үед
хэрэглэдэг, ө.х методыг дахин тодорхойлохыг хүсээгүй үед методыг Final
болгосны үр дүнд түүнийг sub класс дарж тодорхойлохоос хамгаалдаг.
3.2 Хийсвэр класс ба методууд
Удамшлын ойлголт нь үндсэндээ классыг гэмтээлгүй дахин байгуулалгүйгээр
түүний боломжийг нэмэгдүүлэхэд хэрэгжүүлдэг. Энэ нь ерөнхийдөө нэг бол
байгаа методуудыг дарж тодорхойлж эсвэл өөр шинийг шинэ хүү классд нэмж
байгаа хэрэг.
Гэхдээ эдгээрээс маш ялгаатай нэгэн тохироо байж болно. Танд үндсэн классд
ердөө байр эзлэн орших метод тааралдаж магадгүй, энэ нь хүү классуудад үл
тохирох бодит хэрэгжүүлэлт юм. Энэ бол run time полиморфизмд хүрэх
шалтгаан юм. Энэ тохиолдолд бид байр эзлэгч методыг суурь классд
абстрактаар тавьж болно., абстрактаар тодорхойлно гэдэг нь уг метод нь ямар
нэг кодтой байж чадахгүй гэсэн утгатай. Абстракт методтой класс нь мөн
абстрактаар тодорхойлогдох ёстой, ийм класс нь хувь үүсгэж чадахгүй гэсэн
утгатай.
Үүнээс гадна, абстракт суурь классаас удамшсан хүү классуд нь энэ методыг
тодорхойгоор дарж тодорхойлох ёстой. Мөн хэрэв энэ нь дарж тодорхойлж
болохгүй бол тэрхүү хүү класс нь өөр нэг хүү класс түүнээс удамшиж
хэрэгжүүлэх хүртэл абстрактаар тодорхойлогдох болно.
-26-
С.Ууганбаяр
JAVA програмчлал
Үйлчлүүлэгч ресторанд төлбөрөө төлж байгаа тохиолдлыг авч үзье. Тэр
төлбөрөө кредит карт, чек, кассаар хийж болно. Нийт төлбөрийг дараах
төлбөрийг тооцоог хийнэ.
• Хэрэв төлбөр кредит картаар хийгдсэн бол түүнийг шалгаад хэрэв хүчинтэй
бол тооцоо хийнэ.
• Хэрэв чек бол чекийн дугаар дахь төлбөрийн дансыг авч тооцоо хийнэ.
• Хэрэв кассар бол төлбөр шууд хийгдэнэ.
Бүх 3 тохиолдлуудын хувьд энгийн төлөх процедур хийхийн оронд get.Payment
() нэртэй ердийн абстракт функц байгуулж энэ функцээ Payment классаас
удамшсан чек төлбөр, кредит төлбөр, класс төлбөр гэсэн ялгаатай 3 классуудад
тус тусад нь хэрэгжүүлнэ.
Abstruct class Payment
{
int file_Number;
String customer_Name;
String customer_Address;
Void accept_ Cust_Details ()
{
…………
…………
}
Payment ()
{
// гишүүн хувьсагчдыг тохирох утгуудаар
}
} abstruct void get_Payment (); // абстракт метод зарлагдана
class CC_Pymt extends Payment
{
void get_Payment ()
{
// кредит картын дугаарыг авах
// банкны нэрийг авах
// нийт төлбөрийг авах
}
}
class Chq_Pymt extends Payment
{
void get_Payment ()
{
// чекийн дугаарыг авах
// төлөгч банк ба төлбөрийг авах
}
}
class Cach_Pymt extends Payment
{
void get Payment ()
{
-27-
С.Ууганбаяр
JAVA програмчлал
// нийт төлбөрийг авах
}
}
public class Restaurant
{
public static void main (string args[ ])
{
payment p.cc=new CC.Pymt ();
p-cc.accept_Cust_Details();
p-cc.get_Payment ();
Payment p.chq=new chq. Pymtc ();
p-chq.accept_Cust_Details ();
p-chq.get_Payment ();
Payment p.cach =new cach_Pymt ();
p-cach.acept_Cust_Details();
p-cach.get_Payment ();
}
}
main ( ) метод дотор Payment суурь классын гурван объект үүссэн байна. Тус
бүр нь төлбөрийн хэлбэрээс хамааран тохирох хүү классыг заасан ба
get.Payment () метод руу хандана.
Лекц № 6
3.3 Интерфэйс
Интерфэйс бол зөвхөн тогтмол ба методуудын prototype- уудаас тогтох классын
нэг тусгай төрөл юм. Энэ нь биегүй метод ба хувьсагчийн хувийг хуулдаггүй.
Интерфэйсийг хэрэгжүүлэх үед та хэрэгжүүлэлтийн мэдээллийн талаар ямар
нэгэн төсөөлөл хийгдэдгүй. Энэ нь интерфэйсийг хэрэгжүүлж байгаа классууд
интерфэйс дэх методуудын үүргийг шийдэх болдог.
Интерфэйсүүд нь практикт Java –гийн нийлмэл удамшлыг орлодог. Хэдийгээр
класс суурь класаас удамшсан боловч энэ нь интерфэйсүүдийг хэрэгжүүлэхийг
зөвшөөрдөг. Интерфэйс нь цэвэр абстракт класстай адилхан. Үүний учир нь,
тэд хэрэгжүүлэлтийг дэлгэрэнгүй мэдэж чадахгүйгээс эрх мэдэл дутуу байдаг.
Гэвч тэдэнд өөр давуу талууд бий.
Энэ нь бүлэг классуудын нийтлэг шинжийг жагсаах боломжтой. Эдгээр
классууд нийтлэг интерфэйсийг хэрэгжүүлж болох үед интерфэйсийн өөрийн
тодорхойлолтоос тэд юу хийх, яаж хийх зэргийн маш тодорхой болгодог.
Тиймээс интерфэйсийг хэрэгжүүлж буй классууд нь зүйлүүдийг судлан тусгай
шинж чанартай болж болно. Жнь: бид radio класс, television гэсэн 2 класс
байгуулъя гэж саная. Эдгээр хоёр классд нийтлэг нэг зүйл байна. Энэ нь дуу.
Тиймээс бид sound control нэртэй интерфэйсийг байгуулъя. Тэгээд үүнийг
дээрхи 2 класс хэрэгжүүлнэ. Цааш нь дуу
ямар чанар байхыг хүсч байгаагаас хамаараад классууд хэрэгжүүлнэ.
-28-
С.Ууганбаяр
JAVA програмчлал
Интерфэйс дэх final ба static хувьсагчид, методууд нь түүнийг хэрэгжүүлэх
классд харагдаж (нээлттэй) байхын тулд public – аар зарлагддаг. Классын
тодорхойлолт нь inplements түлхүүр үгийг хэрэглэнэ. Доор интерфэйс яаж
хэрэглэгдэхийг харуулав.
Interfase < interfase – name >
{
// тогтмолууд
// метод prototypes
{
class <class – name > inplements <interfase - name>
{
// хувьсагчид
// классын методууд
// интерфэйсийн методууд
}
Итерфэйсийг хэрэгжүүлж байгаа класс нь түүн дэх бүх метод prototype- уудыг
дарж тодорхойлох ёстой. Энэ нь ямар нэгэн класс Lettover (өмнөх классаар
дарж тодорхойлогдоогүй методууд) методуудыг дарах хүртэл. Класс нь зөвхөн
дан суурь классаас удамшдаг боловч олон интерфэйсийг хэрэглэж болно. Энэ
тохиолдолд классын тодорхойлолт дараах байдалтай:
Class <class - name> inplements <interfase – name 1>, <interfase – name 2>
{
// хувьсагчид
// классын методууд
// интерфэйс методууд 1
// интерфэйс методууд 2
}
Дараах жишээг авч үзье, ажилчдын цалинг тооцоолох , Товчлоод, цалин нь
дараах хэсгүүдтэй гэж авъя. Үндсэн цалин, ажлын байрны тэтгэлэг, НRA,
татвар шагнал, нэмэгдэл, нийт цалин. Мөн сарын энэ цалин нь шагнал өгөх,
жилийн амралтын шагналыг хэвлэх эсэхийг шалгана. Одоо програмын
зохиомжийн асуудал дээр анхааръя.
2класс байна, худалдагч, менежер кассууд. Энэ хоёр классын хувьд цалин
тооцоолоход зарим нийтлэг шинжүүд байна. Тэдгээр нь HRA, шагнал, нэмэгдэ,
татвар, нийт цалинг тооцоолоход хоёуланд хэрэгтэй методууд. Мөн цалинг
тооцоолох үед эдгээр бүрэлдэхүүнүүдийг тодорхой үзүүлэх хэрэгтэй.
Тиймээс эдгээр методуудын prototype-г тодорхойлсон Calcpay гэж нэрлэгдэх
интерфэйс байгуулъя.
Дараа нь Clerk (худалдагч ) ба Manager (менежер) классууд энэ инэужфэйсийг
хэрэгжүүлнэ.
Хэрэв интерфэйсийн ямар нэг метод классын гадна үлдвэл тэр классын хувьд
цалин тооцоолж чадахгүй, учир нь уг класс абстракт болох бөгөөд абстракт
классын объектын үүсгэж чадахгүй. Мөн худалдагч, менежер кассууд нь
Employes гэсэн ерөнхийлсөн классаас удамшина.
Interfase Calc Pay
{
final status string company_Name = “Supersoft ltd”;
-29-
С.Ууганбаяр
JAVA програмчлал
public int calc_HRA () ;
public float calc_Tax ();
public float calc_Bonus ();
public float calc_Super_Animation ();
public float calc_Gross ();
}
class Employse
{
protected int e_id;
string ename;
protected int basic;
Employse (int meid, String name, int mbasic)
{
e_id = meid;
ename = name;
basic = m basic;
}
}
class Clerk extends Employle implements CalcPay
{
Clerc (int seid, String sname, int sbasic)
{
super (seid, sname, sbasic);
}
public int calc_HRA ()
{
if (basic < 1000)
return (500);
else
return (900);
}
public float calc_Tax ()
{
float ani_sal = basic + calc_HRA () + calc_super_animation();
if (ani_Sal > 60000)
return ((float).10*ani.sal);
else
return 0;
}
public float calc_Bonus()
{
return ((float).08 * basic) ;
}
public float calc_Super.Animation()
{
return (0);
}
public float calc _Gross()
{
return (basic + calc_HRA () + calc_Bonus () – calc_Tax () );
-30-
С.Ууганбаяр
JAVA програмчлал
}
void print.Solary ()
{
System.out.println (“  n ” + Calcpay.companyName);
System.out.println (“ Employse Number :” + e_id)
System.out.println(“EmployseName :” + ename );
System.out.println(“Basicsolary :” + basic);
System.out.println(“HousePentAllowance: ” + calc_HRA());
System.out.println (“Bonus : ” + calc_Bonus() );
System.out.println (“Taxation : ” + calc_Tax () );
System.out.println (“ Cross Solary : ” + calc_Gross () );
System.out.println (“ ………………………………….th “);
}
}
Class Manager extends Employse implements Calc Pay
{
Manager (int seid, String sname, int sbasic)
{
super (seid, sname. sbasic);
}
public int calc_HRA ()
{
if (basic < 6000)
return (3500);
else
return (5500);
}
public float calc_Tax ()
{
float ann_Sol = basic + calc_HRA() + calc_Super_Animation ()
if (ann_sol > 130000)
return ((float).30*ann.sol);
else
return ((float).20*ann.sol);
}
public float calc_Bonus ()
{
return (0);
}
public float calc_super_Annmation ()
{
return ((float).15-basic);
}
public float calc_Gross ()
{
return (basic + calc_HRA () +calc_Super_Annmation () –calc_Tax () );
}
void print_Solary ()
{
System.out.println (“ ” + CalcPay.company Name);
-31-
С.Ууганбаяр
JAVA програмчлал
System.out.println (“ Employse Namber : ” + e_id );
System.out.println (“Employse Name : ” + ename );
System.out.println (“Basic Solary : ” + basic);
System.out.println (“House Rent Allowance : ” +calc_HRA () );
System.out.println (“Taxation : ” + calc_Tax () );
System.out.println (“Superamnation : ” + calc_Super_Amnation ());
System.out.println (“Gross Solary : ” + calc_Gross () );
System.out.println (“……………………………………….n ”);
}
}
public class Payship
{
public static void main (String args [ ] )
{
Clerk c1=new Clerk (3648, “Vinay Sharma” , 800);
c1.print_ Solary ();
Manager m1 =new Manager (2619, “S.K Lal” , 7000);
M1.print_Solary ();
}
}
Интерфэйс нь өөрийн хувийг үүсгэж чадахгүй. Жнь: ifase гэсэн нэртэй
интерфэйс байгаад ‘Ifase ofj 1= new Ifase ()’ гэж хэлж болохгүй. Гэхдээ ‘Ifase
obj1=new Class1’ нь Class 1 Ifase-г хэрэгжүүлсэн класс байх үед зөв болох юм.
Энэ бол runtime полиморфизмийн хамгийн зөв хэрэгжилт юм.
Интерфэйсийн өөр нэг онцлог бий. Дараах жишээг үзье:
Inforfase Ifase
{
public void show ();
}
class A implemens Ifase
{
public void show ()
{
system.out.println (“a”);
}
}
public class B
{
public staic void main (String args [ ])
{
Ifase obj1=new A();
{
public void show ()
{
system.out.println (“c”);
}
}
-32-
С.Ууганбаяр
JAVA програмчлал
obj1.show ();
obj2.show ();
}
}
Дээрх жишээнд Ifase интерфэйс нь show () нэртэй методтой байна. Энэ
интерфэйс дараа нь ‘А’ классаар хэрэгжиж байна, түүний show () методыг дарж
тодорхойлж байна. ‘А’ классд ‘Ifase obj1=newA ()’ бичиглэлийг ашиглан ‘А’
классын объектыг үүсгэж байна. Тэгээд үүнийг интерфэйсээр зааж байна
гэдгийг илэрхийлнэ. Ийм замаар та интерфэйсийн тусламжтай динамик
полимерфизмд хүрнэ.
Дараагийн хэсэгт ‘new Ifase ()’-н ардаас бие бичсэн байна. Дахин хэлэхэд энэ
бичиглэл нь интерфэйсийг хувилаж байгаа бус, гэхдээ энэ интерфэйсийг
хэрэгжүүлэх нэргүй объектыг үүсгээд хаалтан дотор show () методыг дарж
тодорхойлж байна. Хэрэв энэ биеийг авч хаяж цэгтэй таслал тавибал интерфэйс
өөрийн хувийг үүсгэж болохгүй гэсэн алдааны мэдээллийг өгнө.
3.4 Пакет гэж юу вэ? (Package)
Пакет гэдэг нь үндсэндээ классуудыг бүлэглэж нэгтгэсэн нэр юм. Эдгээр
классуд нь тохиромжтой зөв замаар удирдагдана. Энэ нь катологи дотор
хадгалагддагтай бараг адилхан ойлголт юм.
3.4.1 Өөрийн пакет үүсгэх
Пакет үүсгэхийн тулд та пакетэд хамаатай түвшнүүдийг ойлгох хэрэгтэй.
Пакетууд классын гишүүдийн хоорондох үзэгдэх байдлын 4 категорт
хуваагдана.
• Ижил пакет дахь sub классууд
• Ижил пакет дахь sub бус классууд
• Ялгаатай пакет дахь sub классууд
• Sub классууд эсвэл ижил пакет дахь классууд
Энэ хамаарлыг дараах хүснэгтэд үзүүлэв.
private default protected Public
Ижил класс Yes Yes Yes Yes
Ижил пакет
Sub класс No Yes Yes Yes
Ижил пакет
Sub бус класс No Yes Yes Yes
Ондоо пакет
Sub класс No No Yes Yes
Ондоо пакет
Sub бус класс No No no Yes
Ижил классын элементүүдийн бүх хандалтууд байна. ИЖил пакет дахь sub
классуудын хувьд суурь классын зөвхөн private гишүүд л sub классуудад
харагдахгүй. Ижил пакет дахь sub бус классуудын хувьд, классын зөвхөн private
-33-
С.Ууганбаяр
JAVA програмчлал
гишүүд л бусад класст харагдахгүй. Хэрэв та өөр пакет дахь классаас
удамшуулах sub классуудыг үүсгэвэл private ба default гишүүд рүү хандаж
чадахгүй.
Хоёр классын жишээг авъя. Stack класс нь стекийг хэрэгжүүлдэг, Callstack
класс нь Stack классыг дууддаг. Энэ нь дан файлд байж болно, гэхдээ пакет
үүсгэхийн тулд тэдгээрийг тусдаа класс файлууд үүсгэе. Stack класс нь пакет
дотор, CallStack нь ердийн байдлаар. Mypackage нь бидний Stack гэж нэрлэх
пакетын хадгалах каталоги болно. Пакет үүсгэх алхамууд нь:
<drive :javasource filesmypackage> байдалтай бүтцийн каталоги үүсгэнэ. Энэ
тохиолдолд c:javasourcefilesmypackage (бүгд каталогиуд).
Callstack.java эх файл нь c:javasourcefiles каталоги дотор орших ба пакетыг
дуудна.
Stack.java класс файл нь c:javasourcefilesmypackage каталогит байрлана. Класс
файлд файлын нэртэй адил нэртэй, public хандалттай зөвхөн нэг класс байх
ёстой. Үлдсэн бусад классууд private г.м хандлагуудтай байж болно.
Stack.java файлд, хамгийн эхний мөр нь класс ямар пакетад хамаарахыг заах
package оператор байна. Энэ нь дараах байдлаар бичигдэнэ:
Package mypackage;
Энд Stack бол mypackage пакетэд хамаарах пакет (stack.class файлыг хадгалах)
юм. Пакетын зам нь автоматаар каталогын бүтэцтэй ижилээр үүсгэгддэг.
Stack.class файлыг байгуулахын тулд Stack.java-г хөрвүүлнэ. javasourcefiles
каталоги дахь Classtack.java файл руу сэлгэ.
Callstack.java-д импортлох бичлэгийг import.mypackage* байдлаар хий. Одоо
стек public класс нь ашиглагдаж, хуваагдаж болно.
Шинэ пакет нь хараахан Java орчинд харагдахгүй. Үүний тулд, classpath гэж
нэрлэгдэх системийн хувьсагчийг тохируулах хэрэгтэй. Энэ хувьсагчид
стандарт Java классууд мөн пакетуудыг агуулж буй каталогуудыг заадаг.
Үүнийг дараах байдлаар тохируулж болно:
Set classpath=.; c:Javaclasses; c:javasourcefiles
Үүнтэй адилаар, өөр пакетууд хаа нэг газар үүсгэгдэж болох бөгөөд програмдаа
дуудаж болно. Пакетууд дэх гадна харагдах классууд нь public хандалттай байх
ёстой. Default нь public-тэй төстэй байдлаар үйлчилдэг, гэвч пакетын гадна
адилгүй.
Пакет үүсгэх програмыг дор үзүүлэв:
Stack.java
Package mypackage;
Public class Stack
{
private int Stck [ ];
private int Stack_Ptr;
public Stack (int site);
{
Stck=new int [site];
Stack_Ptr=-1;
}
-34-
С.Ууганбаяр
JAVA програмчлал
public void push (int item)
{
if (stack_Ptr==Stck.lenth-1)
system.out.println (“Stack is fule”);
else
Stck [++Stack.Ptr]= item;
}
public int pop ()
{
if (Stack.Ptr <0)
{
system.out.println (“Stack underflow”);
return 0;
}
else
return stck [stack_Ptr--] ;
}
}
CallStack.java
Import mypackage.*;
Public class callstack
{
public static void main (String args [ ])
{
stack s1=new Stack (5);
for (int I=0; I<5; I++)
{
s1.push (i);
}
system.out.Println (“The stack contains”);
for (int I=0; I<5; I++)
{
system.out.println (s1.pop ());
}
}
}
Практик ажил: Оюутны элсэлтийн систем.
Асуудлын тавилт.
-35-
С.Ууганбаяр
JAVA програмчлал
SubjectCourse
Зур. Оюутны элсэлтийн Системийн классын диаграмм
Application Core optional
Applicant
Student
-36-
С.Ууганбаяр
JAVA програмчлал
Энд ОМТ (object Modelling Technique)-н тэмдэглэгээгээр диаграмм байгуулсан,
энд
Классын диаграмм нь систем дэх шаардлагатай классуд, тэдгээрийн хоорондын
хамаарлыг тэмдэглэдэг. Энэ системийг байгуулахын тулд бид тодорхой
байдлаар хялбарчилж үзье:
• Бүх курсын сүүлчийн хугацаа ижил
• Курс болгон дэх оюутны тоо 5 (гэхдээ сүүлд нь ихэсгэж болно)
• Бэлэн курсүүд нь “MDMC”, ”OCO”, ”C++” (өргөтгөж болно)
• Бэлэн хичээлүүд нь “C”, ”C++”, ”OOADS”, ”JAVA”, ”NT”, ”VNIX”, ”VB”,
”VC”, ”ORACLE ”
• 75%-ээс дээш эхний таван оюутан admitted.
Одоо зарим классууд, тэдгээрийн метод, атрибутуудыг тодорхойлъё.
Public class Subject {
String sname;
Subject (String name ){
This.sname=name;
}
}
subject.java код
public class CoreSubject extends Subject {
CoreSubject (String name) {
Super (name);
}
public void setName (String name) {
sname-name;
}
}
CoreSubject.java код. Subject классаас удамшсан
Public class OptSubject extends Subject {
OpmSubject (String name) {
Super (name)
}
public void setName (string name) {
Sname=name;
}
}
OptSubject.java код. Subject классаас удамшсан.
(үргэлжилнэ.)
Одоо классуудыг “college. Student” пакетад багтааж зохион байгуулъя.
Applicant классын методууд:
• Applicant (байгуулагч)
• Apply for course энэ метод нь Applicant классын courseName атрибутад
сонгосон курсын нэрийг онооно.
-37-
С.Ууганбаяр
JAVA програмчлал
• Select Optional Subjects энэ метод нь Applicant классын optional subject
атрибутад сонгосон сонгох хичээлийн нэрийг онооно.
• Get Functions нь шаардлагатай утгуудыг авна.
Класс Course-н методууд:
• Course (байгуулагч)
• Set antrance qualifications элсэх хамгийн бага түвшингийн хувийг тогтоох
• Set maximum students Курс дэх оюутнуудын хамгийн их тоог тогтоох
• Check course availibility Тус курс бэлэн эсэхийг шалгах
• Check entrance qualifications дамжуулсан дүн нь зөв тэнцэх эсэхийг шалгана.
• Set number of students enrolled Элссэн оюутнуудын тоог оноох
• Get number of students enrolled Элссэн оюутнуудын тоог авах
Өгүүлэмж классын методууд:
Receive өгүүлэмж объектын атрибутуудыг дамжуулсан утгуудаар
Approve өгүүлэмж Курс бэлэн эсэхийг шалгаад хэрэв бэлэн бол элсэх шаардлага
хангахыг шалгана, хэрэв зөв бол үнэн, үгүй бол худал утга
Package college. Student;
Import java.util.Date;
Public class Applicant {
String name;
String courseName;
String optSub;
Long result;
String address;
Applicant (String name, String add, Long res) {
This.name=name;
Address=add;
Result=res;
Course Name = name;
Optsub = mull;
}
public void apply forCourse (String selCourse) {
Course Name = selCourse;
}
public void SelectOptSubject (String oSub) {
opt Sub=oSub;
}
public String getCourse () {
return CourseName;
}
public String get OptSub () {
return optSub;
}
public void get AppDet (String sname, String add) {
sname=name;
address= add;
}
-38-
С.Ууганбаяр
JAVA програмчлал
public long getResult () {
return result. Long Value () ;
}
}
Applicant.java код
Package college.student;
Public class Course {
String name;
Static int num of St;
Static int ourr St;
Long qualPere;
CoreSubject cSub [ ];
OptSubject oSub [ ];
Course (String name, CoreSubject cS [ ], OptSubject oS [ ]) {
This.name=name;
CSub=cS;
OSub=oS;
}
public void setEEntranceQual (Long perc) {
qualPerc=perc;
}
public void SetMaxStudents (int uSt) {
numof=uSt;
}
public boolean check Course Avail () {
if ((curSt+1) < numofSt) {
return true;
}
else
return false;
}
public boolean checkEntrance Qual (Long perc) {
if (qualPerc.LongValue () > perc)
return false;
else
return true;
}
public void set CurrSt () {
// оюутан элсэх үед дуудагдана
curr St++;
}
public int getCurrSt() {
// оюутан элсэх үед дуудагдана
return curr St;
}
Course.java код
Package College.student;
-39-
С.Ууганбаяр
JAVA програмчлал
Public class Өгүүлэмж {
Static int apNum;
Applicant aplcnt;
Public void rcvAppl (Applicant a) {
ApNum++;
Aplcnt=a;
}
public boolean appApl(Course c) {
if (c.check CourseAvail () )
if (c. checkEntrancequal (aplcnt.getResult () ) )
return true;
else
return false;
else
return false;
}
}
Өгүүлэмж.java код
Үүнтэй төстэйгээр өмнө тодорхойлогдсон классууд мөн
package college.student;
мөрийг агуулна. Ингэснээр эдгээр классууд College.student пакетын нэг хэсэг
болно. Одоо бид эдгээр бүх классаа ‘College’ каталогын ‘student’ дэд каталогт
байрлуулна.
3.4.3 Зарим Java пакетууд
Програм зохиогч классууд, интерфэйсүүдийг агуулсан пакетуудыг үүсгэдэгтэй
адил Java чухал зорилтуудыг гүйцэтгэх үндсэн пакетуудыг агуулдаг.
JAVA пакет
Long util io applet awt net
Java. Long пакет Security Manager, System, Thrend г.м Java-н суурь классудыг
агуулдаг.
Java.util пакет нь Date г.м утилит классудыг агуулдаг.
Java.io пакет нь оролт/гаралтын үйлдлүүдэд зориулсан классуудыг агуулна.
Java.аплет пакетыг үүсгэх, удирдахад зайлшгүй хэрэгтэй үүргүүдийг бүхий …
-40-
С.Ууганбаяр
JAVA програмчлал
Java.awt : интерфэйс зохиомжлоход зориулсан GUI компонентуудыг агуулна,
Button, Label г.м
Java. Net : алсын сервер рүү холбох зэрэг сүлжээний үйлдлүүдэд зориулсан
классуудыг агуулна.
Лекц №7
Аплет гэж юу вэ?
4.1 Аплет-н тухай.
Аплет бол браузер дээр ажилладаг Java програм юм. Аплет ажиллах браузер нь
Java-н онцлогуудыг дэмжих ёстой. Microsoft IE, Netscape Navigator, Sun-н Hot
Java зэрэг нь хамгийн өргөн тархсан Java-enabled браузерууд юм. Java
програмууд нь нэг бол өгүүлэмж эсвэл аплет буй болдог. Applicatoin эсвэл
аплет-г хэрэгжүүлэх сонголт нь өгөгдсөн асуудлын хувьд бүхэлдээ хөгжүүлэгч
дээр төвлөрдөг. Нэгэн аплет Word wid, web дээр тавигдсан бол түүний хийж
болох зүйлүүдийг хязгаарлан олон хамгаалалт тавьж болно.
4.1.1 Өгүүлэмж –ээс Аплет-ийн ялгагдах нь
1. Аплет нь удамшигчийн (аплет-г үзэж буй хүн) машин дээрхи файлуудыг
дамжуулах, унших, бичих зэрэг үйлдлүүд хийж чадахгүй, хэрэв түүний
ашиглаж байгаа баузер нь хамгаалалтын өндөр хязгаарлалтуудтай бол.
Гэхдээ хамгаалалтын хязгаарлалтууд нь доогуур ба үл таних аплет-уудад
зөвшөөрөл өгсөн үед аплет y, уншигчийн машин дээрхи файлуудыг
ажиллуулж, уншиж, бичиж чадна.
2. Аплет нь ажиллаж байгаа сайтаасаа өөр ямар нэгэн сайттай харилцаж
чадахгүй.
3. Аплет нь уншигчийн машинаас сангууд ба биелэх файлуудыг зэрэг
програмуудыг ачаалж чадахгүй.
4. Аплет нь ажиллахын тулд браузер хэрэгтэй. Тиймээс, энэ нь өгүүлэмж-аас
аплет-г биелүүлэхэд удаан байна. Аплет-д хэрэглэгдэх нийт санах ойн
хэмжээ нь браузерээр шийдэгддэг харин өгүүлэмж-д ийм хязгаарлалт
байхгүй.
4.1.2 Аплет-н амьдралын цикл
Аплет-г яаж үүсгэдэг, яаж ажиллуулдагыг 1-р бүлэгт үзсэн. Аплет нь биелэхийн
тулд HTML бүрхүүлийг шаарддаг. Өгүүлэмж нь main () програмыг агуулдаг.
Аплет-д main () функц байхгүй. Аплет-д ялгаатай хугацаануудад биелж байдаг
хэд хэдэн метод байдаг. Дараах зурагт аплет-н хамгийн чухал 5 методыг
үзүүлэв. – init(), start(), stop (), destroy (), paint (),
Аплет ачаалагдсан
-41-
С.Ууганбаяр
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr
Java programchlal s.uuganbayr

More Related Content

What's hot

What's hot (20)

Лекц 6 - 7
Лекц 6 - 7Лекц 6 - 7
Лекц 6 - 7
 
C++ vndsen oilgolt хичээл 1
C++ vndsen oilgolt хичээл 1C++ vndsen oilgolt хичээл 1
C++ vndsen oilgolt хичээл 1
 
U.cs101 алгоритм программчлал-12
U.cs101   алгоритм программчлал-12U.cs101   алгоритм программчлал-12
U.cs101 алгоритм программчлал-12
 
U.cs101 алгоритм программчлал-3
U.cs101   алгоритм программчлал-3U.cs101   алгоритм программчлал-3
U.cs101 алгоритм программчлал-3
 
SCRUM арга
SCRUM аргаSCRUM арга
SCRUM арга
 
C cons
C consC cons
C cons
 
Lec4 хereglegchiinpunkts
Lec4 хereglegchiinpunktsLec4 хereglegchiinpunkts
Lec4 хereglegchiinpunkts
 
Лекц 9(Заагч)
Лекц 9(Заагч)Лекц 9(Заагч)
Лекц 9(Заагч)
 
Өгөгдлийн бүтэц
Өгөгдлийн бүтэцӨгөгдлийн бүтэц
Өгөгдлийн бүтэц
 
Sw203 Lecture10 Polymorphism
Sw203 Lecture10 PolymorphismSw203 Lecture10 Polymorphism
Sw203 Lecture10 Polymorphism
 
үйлдлийн систем
үйлдлийн системүйлдлийн систем
үйлдлийн систем
 
Java lecture5
Java lecture5Java lecture5
Java lecture5
 
Lec3 c++operator
Lec3 c++operatorLec3 c++operator
Lec3 c++operator
 
It101 1
It101 1It101 1
It101 1
 
Lecture 1
Lecture 1Lecture 1
Lecture 1
 
Presentation1
Presentation1Presentation1
Presentation1
 
Лекц-3
Лекц-3Лекц-3
Лекц-3
 
U.cs101 алгоритм программчлал-5 zasvar badral(1)
U.cs101   алгоритм программчлал-5 zasvar badral(1)U.cs101   алгоритм программчлал-5 zasvar badral(1)
U.cs101 алгоритм программчлал-5 zasvar badral(1)
 
MT101 Lecture 1(Mongolia)
MT101 Lecture 1(Mongolia)MT101 Lecture 1(Mongolia)
MT101 Lecture 1(Mongolia)
 
Web design lecture 1
Web design lecture 1Web design lecture 1
Web design lecture 1
 

Viewers also liked (20)

Java lecture4
Java lecture4Java lecture4
Java lecture4
 
Java лекц8
Java лекц8Java лекц8
Java лекц8
 
Java lecture3
Java lecture3Java lecture3
Java lecture3
 
Жава хэлний сурах бичиг Java helnii surah bichig Mongol
Жава хэлний сурах бичиг Java helnii surah bichig MongolЖава хэлний сурах бичиг Java helnii surah bichig Mongol
Жава хэлний сурах бичиг Java helnii surah bichig Mongol
 
Java лекц1
Java лекц1Java лекц1
Java лекц1
 
C# hicheelin lekts
C# hicheelin lektsC# hicheelin lekts
C# hicheelin lekts
 
CS202 Lab2
CS202 Lab2CS202 Lab2
CS202 Lab2
 
Lecture11 12
Lecture11 12Lecture11 12
Lecture11 12
 
Diplom udirdamj
Diplom udirdamjDiplom udirdamj
Diplom udirdamj
 
SW203 Lab9
SW203  Lab9SW203  Lab9
SW203 Lab9
 
Lecture vcp413
Lecture vcp413Lecture vcp413
Lecture vcp413
 
Sw203 Lecture3 Advanced Java Program
Sw203 Lecture3 Advanced Java ProgramSw203 Lecture3 Advanced Java Program
Sw203 Lecture3 Advanced Java Program
 
Java laboratoriin udirdamj 2
 Java laboratoriin udirdamj 2 Java laboratoriin udirdamj 2
Java laboratoriin udirdamj 2
 
Java лекц2
Java лекц2Java лекц2
Java лекц2
 
Sw203 Lecture4 Class Object
Sw203 Lecture4  Class ObjectSw203 Lecture4  Class Object
Sw203 Lecture4 Class Object
 
Database design & Normalization (1NF, 2NF, 3NF)
Database design & Normalization (1NF, 2NF, 3NF)Database design & Normalization (1NF, 2NF, 3NF)
Database design & Normalization (1NF, 2NF, 3NF)
 
Lecture tread
Lecture treadLecture tread
Lecture tread
 
Triander: A new program for visual analysis of nucleotide sequences
Triander: A new program for visual analysis of nucleotide sequencesTriander: A new program for visual analysis of nucleotide sequences
Triander: A new program for visual analysis of nucleotide sequences
 
Installation 1
Installation 1Installation 1
Installation 1
 
Web design -_lecture_1
Web design -_lecture_1Web design -_lecture_1
Web design -_lecture_1
 

Similar to Java programchlal s.uuganbayr

Java Programming Жава Програмчлалын тухай Лекц
Java Programming Жава Програмчлалын тухай ЛекцJava Programming Жава Програмчлалын тухай Лекц
Java Programming Жава Програмчлалын тухай Лекцbatbayr buyandelger
 
жаваскрипт сангууд
жаваскрипт сангууджаваскрипт сангууд
жаваскрипт сангуудUguudei Erdenebileg
 
Андройд үйлдлийн системийн аппликейшний суурь ухагдахуунууд
Андройд үйлдлийн системийн аппликейшний суурь ухагдахуунуудАндройд үйлдлийн системийн аппликейшний суурь ухагдахуунууд
Андройд үйлдлийн системийн аппликейшний суурь ухагдахуунуудBatjargal Batbold
 
Lecture data base programming part1
Lecture data base programming part1Lecture data base programming part1
Lecture data base programming part1ganzorigb
 
си хэлний ойлголт
си хэлний ойлголтси хэлний ойлголт
си хэлний ойлголтbadral_0430
 

Similar to Java programchlal s.uuganbayr (20)

Lecture2
Lecture2Lecture2
Lecture2
 
PL Lecture2
PL Lecture2PL Lecture2
PL Lecture2
 
Android
AndroidAndroid
Android
 
Java lecture2
Java lecture2Java lecture2
Java lecture2
 
Pl lecture2
Pl lecture2Pl lecture2
Pl lecture2
 
PL Lecture1
PL Lecture1PL Lecture1
PL Lecture1
 
Lecture1
Lecture1Lecture1
Lecture1
 
Delphi7 oyutnii garin awlaga 2006 muis
Delphi7 oyutnii garin awlaga 2006 muisDelphi7 oyutnii garin awlaga 2006 muis
Delphi7 oyutnii garin awlaga 2006 muis
 
Java Programming Жава Програмчлалын тухай Лекц
Java Programming Жава Програмчлалын тухай ЛекцJava Programming Жава Програмчлалын тухай Лекц
Java Programming Жава Програмчлалын тухай Лекц
 
Pl lecture3
Pl lecture3Pl lecture3
Pl lecture3
 
жаваскрипт сангууд
жаваскрипт сангууджаваскрипт сангууд
жаваскрипт сангууд
 
Lec1
Lec1Lec1
Lec1
 
PL Lecture3
PL Lecture3PL Lecture3
PL Lecture3
 
Андройд үйлдлийн системийн аппликейшний суурь ухагдахуунууд
Андройд үйлдлийн системийн аппликейшний суурь ухагдахуунуудАндройд үйлдлийн системийн аппликейшний суурь ухагдахуунууд
Андройд үйлдлийн системийн аппликейшний суурь ухагдахуунууд
 
Lecture data base programming part1
Lecture data base programming part1Lecture data base programming part1
Lecture data base programming part1
 
Lab1
Lab1Lab1
Lab1
 
lecture Maker NS
lecture Maker NSlecture Maker NS
lecture Maker NS
 
Pl lecture1
Pl lecture1Pl lecture1
Pl lecture1
 
Lecture1
Lecture1Lecture1
Lecture1
 
си хэлний ойлголт
си хэлний ойлголтси хэлний ойлголт
си хэлний ойлголт
 

More from E-Gazarchin Online University

More from E-Gazarchin Online University (20)

ESON101-Хичээл 11 /20190325/
ESON101-Хичээл 11 /20190325/ESON101-Хичээл 11 /20190325/
ESON101-Хичээл 11 /20190325/
 
ECON302-хичээл 10 /20190319/
ECON302-хичээл 10 /20190319/ECON302-хичээл 10 /20190319/
ECON302-хичээл 10 /20190319/
 
ECON302-хичээл 9 /20190312/
ECON302-хичээл 9 /20190312/ECON302-хичээл 9 /20190312/
ECON302-хичээл 9 /20190312/
 
ESON101-Хичээл 8 /20190306/
ESON101-Хичээл 8 /20190306/ESON101-Хичээл 8 /20190306/
ESON101-Хичээл 8 /20190306/
 
ESON101-Хичээл 9 /20190313/
ESON101-Хичээл 9 /20190313/ESON101-Хичээл 9 /20190313/
ESON101-Хичээл 9 /20190313/
 
ECON303-Хичээл 9 /20190311/
ECON303-Хичээл 9 /20190311/ECON303-Хичээл 9 /20190311/
ECON303-Хичээл 9 /20190311/
 
ECON303-Хичээл 8 /20190304/
ECON303-Хичээл 8 /20190304/ECON303-Хичээл 8 /20190304/
ECON303-Хичээл 8 /20190304/
 
ECON303-Хичээл 6 /20190218/
ECON303-Хичээл 6 /20190218/ ECON303-Хичээл 6 /20190218/
ECON303-Хичээл 6 /20190218/
 
ECON303-Хичээл 10 /20190318/
ECON303-Хичээл 10 /20190318/ECON303-Хичээл 10 /20190318/
ECON303-Хичээл 10 /20190318/
 
ESON101-Хичээл 7 /20190227/
ESON101-Хичээл 7 /20190227/ESON101-Хичээл 7 /20190227/
ESON101-Хичээл 7 /20190227/
 
ESON101-Хичээл 6-1 /20190220/
 ESON101-Хичээл 6-1 /20190220/ ESON101-Хичээл 6-1 /20190220/
ESON101-Хичээл 6-1 /20190220/
 
ECON303-Хичээл 7 /20190225/
ECON303-Хичээл 7 /20190225/ECON303-Хичээл 7 /20190225/
ECON303-Хичээл 7 /20190225/
 
ESON101-Хичээл 5 /20190213/
ESON101-Хичээл 5 /20190213/ESON101-Хичээл 5 /20190213/
ESON101-Хичээл 5 /20190213/
 
KLON103-Хичээл-2 /20190125/
KLON103-Хичээл-2 /20190125/KLON103-Хичээл-2 /20190125/
KLON103-Хичээл-2 /20190125/
 
ECON302-хичээл 4 /20190129/
ECON302-хичээл 4 /20190129/ECON302-хичээл 4 /20190129/
ECON302-хичээл 4 /20190129/
 
ESON101-Хичээл 4 /20190130/
ESON101-Хичээл 4 /20190130/ESON101-Хичээл 4 /20190130/
ESON101-Хичээл 4 /20190130/
 
KLON102-Хичээл 3/20190122/
KLON102-Хичээл 3/20190122/KLON102-Хичээл 3/20190122/
KLON102-Хичээл 3/20190122/
 
ESON101-Хичээл 3 /20190123/
ESON101-Хичээл 3 /20190123/ ESON101-Хичээл 3 /20190123/
ESON101-Хичээл 3 /20190123/
 
CPON411-Хичээл-2-1 /20190122/
CPON411-Хичээл-2-1 /20190122/ CPON411-Хичээл-2-1 /20190122/
CPON411-Хичээл-2-1 /20190122/
 
KLON102-Хичээл 2 /2019015/
KLON102-Хичээл 2 /2019015/ KLON102-Хичээл 2 /2019015/
KLON102-Хичээл 2 /2019015/
 

Java programchlal s.uuganbayr

  • 2. JAVA програмчлал Лекц №1 1. Java танилцуулга 1.1. Java гэж юу вэ ? Java хэлийг 1991 онд “Green” төслийн нэг хэсгээр Sun Microsystems хөгжүүлж бий болгосон. Энэ төслийн групп нь хэрэглэгчдийн элетрон төхөөрөмжийг удирдах програм хангамжийг хөгжүүлэхээр ажиллаж байв. Энэ хугацаанд тэд Start гэж нэрлэгдэх төхөөрөмжийг бүтээсэн бөгөөд түүнийг удирдахаар төлөвлөж байсан үйлдлийн систем нь С++ дээр бүтээгдэх байв. Гэвч багын нэг гишүүн James Gosling нь С++-ийн бүтээмжийг төдийлөн өндөр үнэлэхгүй байв. Тиймээс тэрээр Start-д зориулж шинэ хэлийг бий болгосон. Тэрээр энэ хэлээ Oak гэж нэрлэсэн, энэ нь түүний offise-ийн гадаа харагдаж байдаг Oak модны нэрийг хэрэглэсэн хэрэг. Сүүлд нь Oak гэдэг нэр нь зарим өөр хэлэнд ашиглагддаг болохыг мэдээд Sun энэ хэлийг Java гэж нэрлэсэн. Java бол платформоос хараат бус объект хандлагат програмчлалын хэл юм. Програм бичих үедээ та энэ програм эцэст нь хаана ажиллахад үргэлж анхаарч байдаг. Жишээлбэл, хэрэв програм Windows платформ дээр ажиллах бол та MFC (Microsoft Foundation Classes)-ийг ашиглана. Хэрэв энэ нь Mac машин бол Mac OS Toolbox-г ашиглана. Түүнчлэн төгсгөлд нь програмаа хэрэгжүүлэх /турших/-дээ програмынхаа эх кодыг янз бүрийн процессортой машин бүрд тохиргоог нь хийж хөрвүүлэх болно, тэгээд энэ нь зайлшгүй програмыг ажиллах машины процессорт тохируулж зайлшгүй хөрвүүлэх хэрэгтэй болно. Үнэ хэрэгтээ энэ нь програмууд Internet-д хэрэгжүүлэх боломжгүй болох юм. Хэрэв бид адилхан сценартай гэж бодвол учир нь та програм тань эцэстээ хаана татагдаж ажиллахыг мэдэж чадахгүй. Энэ асуудлыг эсэргүүцэхийн тулд Java нь JVM /Java Virtaal Machine/ гэж нэрлэгдэх in-built механизмтай байдаг. JVM нь таны програмыг клиентийн машинтай зохицохоор болгодог бөгөөд таны програм интернет дэх дурын машин дээр ажиллаж чадна. С++-тай адилгүй нь, Java бол бүхэлдээ объект хандлагат хэл. Java дахь бүх зүйлс зөвхөн классын дотор бичигдэх ёстой. Классууд дотор бүх зүйлүүдийг хийж хязгаарласнаар програмууд зарим талаар хатуу чанга болно гэж та бодож магадгүй, гэвч энэ нь бүрэн дүүрэн эргэлзээгүй програмчлалын хэв маяг юм. С++-д объект хандлагат ба бүтцийн програмчлалын хэв маягуудыг хослуулан програмаа бичихэд хангалттай уян хатан байдаг. Гэвч энэ хольсон арга нь тийм ач холбогдолтой бус юм. Ингээд зохиомжлогчдийн хувьд бүхэлдээ объект хандлагат аргыг ашиглан зохиомжлоход хялбар болжээ. 1.2. Java хувилбарууд ба хөгжүүлэлтийн хэрэгслүүд Өдий хүртэл Java нь ердөө л 3 чухал хувилбараар өөрчлөгдсөн. Java нь эхлээд Java 1.0 гэж гарч ирсэн, энэ нь одоо хүртэл олонхи brokser-уудын хувьд тохирч байна. Дараа нь Java 1.1 гарсан, энэ нь сайжруулсан хэрэглэгчийн итеррэйс, үзэгдэл боловсруулалттай сайжирсан хэл байв. Энэ хүртэл Java олон өөрчлөлт хийгдсээр эцэст нь Sun сүүлчийн хувилбар “Java 2” гэж нэрлэгдэх Java 1.2.2-г гаргасан. -2- С.Ууганбаяр
  • 3. JAVA програмчлал Java нь олон хөгжүүлэлтийн орчинд бичигддэг. Хамгийн хялбархан Java програм хангамж бол JDK /Java Devolepment Kotekit/ 1.0, 1.1, 1.2 юм. JDK-г интернет дэх http://java.sun.com/products/jdk сайтаас үнэгүй татаж авч болно. Java-гийн хувьд олон өөр хөгжүүлэлтийн хэрэгслүүд байдаг: Java Workshop, Borland Jduilder, Symantec Visul Case, Visual Java /VJ++/, SuperCede г.м 1.3. Java-гийн онцлог Java нь объект хандлагат байхаас гадна интернет програмчлалын хувьд чухал онцлогуудаар хангадаг. Архитектур ба Цөм Бодит шинжтэй байсан учраас Java гарч ирсэн цагаасаа л өргөн ашиглагдаж эхэлсэн. Платформ хэлний эсрэг өндөр үр бүтээмжтэй болгон Java өөрийгөө баталгаажуулж чадсан. Java програмууд нь эх кодод ямар нэгэн өөрчлөлт хийлгүйгээр интернет дэх ямарч төрлийн клиент машин дээр ажиллаж чадна. Өмнө хэлснээр энэ бол JVM буюу Java Virtual Machine-д хүрсэн явдал юм. JVM нь таны програмыг шууд техник хэсгүүдтэй харьцахыг зөвшөөрдөггүй бөгөөд код ба техник хангамж хоёрын хоорондох интерфэйс байдлаар ажилладаг. Иймээс Java програм нь клиент тал болдог, энэ нь програмын биелэлтийг локаль процессорт зохицоход тусалдаг. Доорхи тодорхойлолт бол Java програм яаж ажилладаг тухай юм. Java програм нь 2 үе шатанд биелдэг. Java програм хөгжүүлэгчээр хөрвүүлэгдэж дуусаад интернэт сервер рүү ачаалагдана, дараа нь дахин interpret хийгдэж тэгээд ажилладаг. Java програмууд байт код /.class file/ гэж нэрлэгдэх зүйл рүү хөрвүүлэгддэг. Байт код бол байт хэлбэрийн командуудын дараалал юм. Эдгээр командууд нь ямар нэгэн машинд зориулагдсан зүйл биш, харин JVM-д зориулан бичигдсэн. JVM бол виртуаль машинд зориулсан програм юм, ө.х бодит машин биш боловч үнэндээ бол төстэй орчин юм. Байт код буюу class файл өөрөө ажиллах боломжгүй ба түүнийг веб хуудсанд суулгадаг. Та веб хуудсаа HTML-ээр байгуулаад түүний дотроос .class файлыг дуудна. Байт кодыг агуулсан веб хуудас нь түүнийг веб сайт дээр тавигдсанаар интернэтээр тардаг. Веб хуудсын клиент талд браузер ашиглан ханддаг. Браузер нь дотроо Java компонентыг агуулсан байх ёстой, ө.х Java-г зөвшөөрсөн байх ёстой, эсрэг тохиолдолд байт кодыг HTML текст гэж хүлээн авна. Веб хуудас клиентээр дуудагдах үед Java програм HTML документ дотор сууж ажиллаж эхэлдэг. Хамгийн эхний алхам болох хамгаалалтын шалгалт Java код үнэхээр мөн эсвэл биш гэдгийг тодорхойлохын тулд Java кодыг оруулж ирж байх үед хийгддэг. Дараа нь энэ нь холбогдоно, эцэст нь тухайн машины архитектур руу орчуулагдана, энэ хооронд ямар нэг алдаа эсвэл тасралт тохиолдвол тэдгээр нь боловсруулалт хийгдэх ба програм ажиллана. -3- С.Ууганбаяр
  • 4. JAVA програмчлал Эх код- - - - - - - Хамгаалалтын - - - - - - - Зур 1.1 Аплет яаж ажилладаг вэ. Хүчтэй Ихэнхи програмууд гэмтлийн тохиолдлуудад бууж өгдөг, учир нь товлосон байдал бүрдээгүй шинжүүд нь байхгүй, эсвэл санах ойн зохион байгуулалт буюу програмын алдаа боловсруулах байдал нь ялгаатай байдлуудад байдаг. Энэ бол санах ойн зохион байгуулалтын дараа авч үзэх маш чухал зүйл юм. Заримдаа тодорхой алдааны нөхцөлүүд, “File not found” зэрэг, тулгардаг. Эцэст нь програм мухардалд ордог! Эдгээр асуудлууд нь Java-д “garbage collection” ба “ exception handling” гэж нэрлэгдэх технологиудаар онцгойлон шийдэгдсэн. “Garbage collection” – “Хог хаягдал цуглуулах” “Хог цуглуулах” технологид daemon /буг чөтгөр, догшин сахиус/ thread заагдаагүй объектуудыг чөлөөлж байдаг. Daemon thread - / систем харьцангуй чөлөөтэй болох үед амьтай болдог thread/ Тиймээс програм зохиогч heap муж дүүрэгийн тухайд зовох хэрэггүй. “Exception handling” – “алдаа боловсруулах”: “Exception handling” механизмд массивын доод хязгаарын элементэд хандахыг оролдох зэрэг програмыг сүйрүүлэхэд хүргэдэг тохиолдлуудыг түүнийг ажиллаж байх үед нь засаж шийддэг. Найдвартай, Аюулгүй Java програм нь интернэтээр зөөвөрлөгдөн хэн нэгний машин дээр ажиллах чадвартай, гэвч хүлээн авагч ирсэн програмыг ямар нэг сүйтгэх ажиллагаа хийхгүй гэдэгт яаж үнэмшиж, итгэх вэ? Та үргэлж мэддэг эх сурвалжаас - - - - - - - шалгалт Java хөрвүүлэгч 00110100 01000100 01000010 (.java файл) Орчуулалт 01011000 Алдаа боловсруулалт Код интернэтээр зөөвөрлөгдөнө Байт код (.class файл) Биелэх код Хөгжүүлэлтийн төгсгөл Интернэт Клиент -4- С.Ууганбаяр
  • 5. JAVA програмчлал мэдээллийг татдаггүй, мөн энэ нь татсан програмуд файл систем рүү хандах, тодорхой файлуудыг устгаж болно. Тиймээс Java програмыг найдвартай байлгахын тулд Java нь интернэтээс ирээд браузер дээр ажиллаж байгаа аплет гэж нэрлэгдэх програмудад локаль системийн файл систем рүү хандахыг зөвшөөрдөггүй. Хэдий тийм боловч заагч нь үнэхээр уян хатан, програм бичихэд хүчтэй, Java нь заагчийг бүрэн ашиглахыг хягаарласан. Энэ нь Java програмуудыг маш аюулгүй болгоно, энэ нь дур зоргоороо дурын санах ойн байрлалд бичилт хийх эсвэл системийн нөөцүүдийг онгичих боомжгүй болгоно. Аплет өөрийн зорьсон газраа ирэхэд түүнийг орчуулахын өмнө хамгаалалтын шалгалт түүн дээр явагдана. Энэ нь ирсэн Java кодыг үнэхээр Java код мөн эсэхийг баталгаажуулна. ө.х энэ нь ямар нэгэн вирустай төстэй тодорхойгүй элементүүдийг агуулах ёсгүй. Та мөн өөрийн Java кодоо илгээхийн өмнө тэмдэг хийж болох ба хүлээн авагч түүнийг авахын тэмдгийг /шошго, хаяг/ тааруулж болно. Үүнийг таны кодын цифрэн тэмдэг /digital sign/ гэх ба хэрэв тэмдэг тохирохгүй бол та хэн нэгэн гуравдагч хүн кодыг онгичсон /hack/ гэж мэдэж болно. Энгийн, хялбар Нэгэн объект хандлагат програмчлалын үндсэн ойлголтууд тодорхой болсон бол та үр бүтээлтэй Java праграммуудыг маш хялбархан бичиж чадна. Олон хэлүүд тодорхой тооны онцлогуудаар тодорхой зорилгын хэрэгжүүлэх боломжуудаар хангадаг. Энэ нь эргээд хэнийг эмх цэгцгүй, сурахад хэцүү болгодог. Java нь энэ аргыг хэрэглээгүй бөгөөд үндсэн чухал онцлогуудыг үлдээхийг зорьсон, мөн нийлмэл төвөгтэй байдлуудаас зайлсхийсэн. Java классын сан дахь классуудын тусламжтайгаар асар их чадал бий болсон. Distributed Java объектууд нь интернэт дэх чухал серверүүдээр тархаж чаддаг. Тэдгээр объектууд нь дурын Java програм дотор агуулагдах, мөн тэдгээр нь түүний өөрийнх нь компонентууд бол ажиллуулдаг. Лекц№2 1.4. Java дахь програмын төрлүүд Java хэл нь үндсэндээ програмын 2 төрөлтэй байдаг, аплет ба програм / өгүүлэмж/ Аплет бол браузераар интернэтэд ажиллах чадвартай програм юм, өгүүлэмж –д ийм боломж байхгүй. Браузер нь апплетыг ажиллуулж чадахын тулд өөр дотроо Java компонентийг агуулсан байх ёстой. Internet Explorer 3.1 ба түүнээс дээшхи хувилбарууд аплет-г амжилттай ажиллуулж чадна. Энэ хоёрын хоорондох өөр нэг гол ялгаа бол өгүүлэмж бол локаль файл систем ба нөөцүүд рүү хандаж -5- С.Ууганбаяр
  • 6. JAVA програмчлал чадна, харин аплет үүнийг хийх хориотой. Програм бол та түүний функцүүдийг /үүргүүдийг/ маш сайн мэдэж байдаг бүрэн дүүрэн итгэлтэй, мөн та програмаар хэн тань руу хандсаныг мэддэг. Апплетын хувьд програмыг зохиогч нь хэн болох тухай мэдэхгүй, эсвэл програм хангалттай аюулгүй эсэх талаар. Үүнийг толгойдоо хадгалж, аплетууд ирсэн зөвхөн тэр машиныхаа файл систем эсвэл бусад хэсэг рүү хандах боломж локаль буюу клиент машинуудаас / дэдний ажиллах/ илүү байдаг. 1.4.1 Өгүүлэмж Өгүүлэмж ба аплетууд нь Java дахь бүх зүйлтэй адилхан классууд хэлбэрээр бүхэлдээ бичигддэг. Классын гадна бичигдэх ямар нэгэн зүйл байж болохгүй, С++-тай адил классын гадна функцүүдийг тодорхойлох г.м зүйлс боломжгүй. Классыг нэр нь нэрлэх ёсыг дагах ёстой бөгөөд том жижиг үсгүүд ялгаатай. Өгүүлэмж биелүүлэх үед JVM нь файлын нэртэй ижил нэртэй класс байгаа эсэхийг хайдаг. Энэ класс нь эхлэх класс /initrating class/ гэж нэрлэгддэг. Pullic хандалттай класс нь түүнийг гадна харагдана гэдгийг тодорхойлдог, ө.х JVM-д харагдана. Энэ нь “main” гэж нэрлэгдэх методтой байдаг ба энэ нь compiler-аар автоматаар хамгийн эхэлж ажиллах метод юм. Энэ методоос бусад бүх классууд ба тэдний методууд холбогддог. Өгүүлэмжийн энгийн жишээг үзье. public class SimpleApp { public static void main(String args[ ]) { System.out.println(“Та өөрийн анхны програмаа үүсгэлээ”); } } JDK-д өөрийн гэсэн хөгжүүлэлтийн орчин байдаггүй. Програмууд DOS editor, notepad дээр бичигдэж болно. Файл нь эхлэн классын нэртэй адилхан нэртэй .java өргөтгөлтэй хадгалагдах ёстой, дээрхи тохиолдолд энэ нь ‘SimpleApp.java’ байна. Одоо main() методын тодорхойлолт дахь чухал хэсгүүдийг авч үзье. public түлхүүр үг нь main() методыг програмын гадна харагдахаар болгодог, ө.х main() методыг хөрвүүлэгч харах болно. Static түлхүүр үг нь main()–г агуулах классын хувийг үүсгэлгүйгээр JVM шууд main ( ) метод руу хандаж чадна. void түлхүүр үг нь main () метод ямар нэгэн утга буцаахгүй гэдгийг заана. System.ont.println() нь гаралтын стандарт урсгал руу өгөгдөл хэвлэх метод юм. Энэ нь агуулгыг хэвлэсний дараа шинэ мөрөнд шилжинэ. Програм дараа нь хөрвүүлэгчээр (javac) хөрвүүлэгдэнэ. Өмнө path=;c:javabi;c:javalib;c:java2include гэж Java 2-н Java програмуудыг агуулж байгаа замыг хаах хэрэгтэй. C:> javac SimplApp.java Хөрвүүлэлтийн дараа byte кодыг агуулах .class файл үүснэ. Үүнийг дараа нь C: > java SimpleApp -6- С.Ууганбаяр
  • 7. JAVA програмчлал 1.4.2 Аплет Програмтай адилхнаар файлын нэртэй адилхан нэртэй класстай аплет-г бичнэ. Програмтай адилгүй нь main метод байхгүй. Бусад чухал методууд аплет-д байдаг. Import java.аплет.*; Import java.awt.*; Public class Apple extuds Аплет { public veid paint (graphics) { g.drawstring C” An apple a Day Keeps the Doctor Away”, 50,50); } } Эхний 2 бичиглэл нь аплет-д пакетуудыг багтаах буюу импортлох үүрэгтэй. Пакет бол тусгай нэрийн дор категорчлогдсон классудын олонлог бөгөөд санд (librory) хадгалагддаг. Энэ програм java. Пакетыг paint () методыг ашиглахын тулд, java.аплет-г main классыг Аплет классаас урамшуулахын тулд include хийж болно. ‘ extends’ түлхүүр үг нь удамшилд хэрэглэгддэг. Paint (Graphics-д) метод нь аплет-д зураг, текстийг зурахад ашиглагддаг. Энэ нь аплет-н график колтекстыг автоматаар параметр болгон авдаг. График колтекст бол ямар нэгэн зүйл зурах бичих муж юм. Тиймээс paint() функц дэх ‘Graphics- д’ нь аплет-н график колтекстыг өгдөг. Аплет-д текст бичихийн тулд бид drawString (String text, int posx, int posy) функцийг ашиглана. Дээрхи аплет нь классын нэртэй адил Аплет.java гэсэн нэртэй хадгалагдаж, дараах байдлаар хөрвүүлэгдэнэ. Javac Apple.java Энэ нь byte кодыг агуулах .class файлыг үүсгэнэ. Энэ нь аплет учраас .class файл нь HTML документ дотор суулгагдах ба браузерээр ажиллана. Хамгийн энгийн HTML документ дараах байдалтай бичигдэж болно: <html> <head> <title> “The Аплет is Rumming” </title> </hend> <body> <аплет code=”Apple” heigt=200_width=200> </аплет> </html> 1.5. Java хэлний элементүүд 1.5.1 Операторууд Төрөл Зорилго Тэмдэглэгээ Хэрэглэх байдал -7- С.Ууганбаяр
  • 8. JAVA програмчлал Арифметик Нэмэх + Int no =1+1 Хасах - Int no =1-1 үржих * Int no =1*1 хуваах / Int no =1/1 үлдэгдэл % Int no =1%1 нэмэгдүүлэх ++ no++ буюу ++no нийлбэр олгох += no+=4 ялгавар олгох -= no- =4 үржвэр олгох *= no* =4 ногдвор олгох /= no/ =4 үлдэгдэл олгох %= no%=4 хорогдуулах - - no- - буюу - - no Бит үгүйсгэл ~ ~a ба & a&b буюу ab xor ^ баруун шилжилт >> баруун >>> тэгээр дүүргэх зүүн шилжилт << Хөрвүүлэх Тэнцүү == Тэнцүү биш != Их > Бага < Их буюу тэнцүү >= Бага буюу тэнцүү <= 1.5.2 Өгөгдлийн төрлүүд Java-д 8 үндсэн өгөгдлийн байдаг. Эдгээрээс чадал класс, интерфейс, массив зэрэг өгөгдлийн төрлүүд байдаг. Класс ба интерфейсийн тухай сүүлд гүнзгий үзнэ. Өгөгдлийн төрөл Урт Хэмжээ Хэрэглэнэ Byte 8 -128 127 Short 16 -32768 32767 Int 32 -2147483647 2147483647 - 263 263 -1Long 64 Double 64 1.7e – 308 1.7e + 308 Илүү нарийвчлалтай fleat 32 3.4e – 038 3.4e +038 Бага нарийвчлалтай char 16 0- ээс 65536 Java нь тэмдэгтийг дүрслэхэд Unicode –г ашигладаг. Тэмдэгт нь кодоор эсвэл тэмдэгтээр олгогдож болно. Char choice=1y 1; Char trop = 27; -8- С.Ууганбаяр
  • 9. JAVA програмчлал boolean True/false Boolean flag=true; 1.5.3 Бүтцүүд ба илэрхийлэл (Statemant and Expressions ) Бүтэц гэдэг нь тодорхой зориулалттай хэсэг дэх командууд юм. Java дахь зарим бүтцийн бүтцийг авч үзье. Dear reply = ‘y’; Int book –no; System.ont.println(” resulting statemant g”) Java дахь бүх бүтцүүд цэгтэй таслалаар (semicolon) төгсдөг. Бүтцүүдийг бүлэглэхэд нээх, хаах “{}” хаатлтуудыг хэрэглэдэг. Нээх, хаах хаалтуудтай тодорхойлогдсон бүтцүүдийг олонлогын блок гэж нэрлэдэг. ---------------------------------- { int count=0; ---------------- ---------------- { count=count+1; ---------------- ---------------- } } Илэрхийлэл гэдэг нь операторууд ба операидуудаас бүрддэг, эдгээр нь утгыг гаргадаг. 1.5.4 Хувьсагчид ба утгууд (тогтмолууд) (Variables and Literals) Хувьсагч бол хамгийн үндсэн хадгалах нэгж юм. Энэ нь дараахь байдлаар тодорхойлогдоно: Type identifier=value; Жишээлбэл, boolean status=true; int heigt=60; Утгын жишээ, “lilly”, “tulip”, 100, 5179, 79 г.м 1.5.5 Тайлбар Тайлбар нь хоёр байдлаар бичигддэг: ‘// ’ ба ‘ / * * / ‘. // нь дан мөр тайлбарт хэрэглэгдэнэ. Энэ нь хаа ч бичигдэж болох бөгөөд compiler түүний ардаас бичигдсэнийг үл хэрэгсдэг. / * * / нь блок тайлбар оруулахад хэрэглэгддэг. Хэд хэдэн тайлбар хийхэд хэрэглэнэ. 1.5.6 Хувьсагчийн үйлчлэх хүрээ (Scope) -9- С.Ууганбаяр
  • 10. JAVA програмчлал Хувьсагчийн үйлчлэх хүрээ нь түүний тодорхойлогдсон блокоор тодорхойлогддог. Хувьсагч нь түүний тодорхойлогдсон блок болон түүн доторхи бүх дэд блокуудад харагдана. Дараахь жишээг үзье: Public class Visibility { public Static void main (String args [ ] ) { block 1 : // энэ бол label { int gvar = 100; block 2: { int lvar = 200; system.out.println (“Глобаль хувьсагч” + gvar); system.out,println (“Локаль хувьсагч” + lvar); } } gvar=gvar+1; System.out.println (“Глобаль хувьсагч” + gvar); Lvar =lvar+1; // алдаа } } } Тэнд: Java-д өөр блокуудад боловч ижил нэртэй хувьсагчид зарлахыг зөвшөөрдөггүй. Жишээлбэл, gvar хувьсагчийг block2 дотор дахин зарлавал алдаа өгнө. 1.6 Програмчлалын элементүүд Програмчлалын элементүүд нь програмын биелэх дарааллыг удирддаг. Java дахь програмчлалын элементүүд нь С++ -аас авсан бөгөөд нэмсэн зүйл байхгүй. 1.7 Массив Массив бол нэгэн ижил нэрийн дор заагдах ижил төрлийн хувьсагчдын бүлэг юм. Массив нь дурын хэмжээст байж болно. Дараах жишээг үзье. Public class EnyBenus { public static void main (String args [ ]) { String ebonus[ ] [ ] =new String [2][5]; Ebonus [0][0]= “P.K.Roy” ; ‘ ‘ ‘ ‘ ebonus [1][4]= “5500”; for (int I=ө; i < 5; I ++) { System.out.println (“Emplorgee name:” + ebonus [0] [ i]); -10- С.Ууганбаяр
  • 11. JAVA програмчлал System.out.println (“Bonus Receved:” + ebonus[1][i]); } } } Java-д массивтай ажиллах нь бусад хэлэн дэхтэй ижил, гэхдээ массив үүсгэх нь нэлээд өөр: Type name[ ] = new type [no.of elements]; Жишээ нь: int item_code [ ] = new int [10]; String week Days [ ]= new String [7]; New түлхүүр үг нь заалт төрлийн хувьсагчдад санах ой хувиарлахад ашиглагддаг. Java-д тэмдэгттэй ажиллахад ‘String класс’-ийн тусламжтай хийгддэг. Энэ класс нь зөвхөн тэмдэгт мөр үүсгэхийг зөвшөөрдөггүй, гэхдээ тэмдэгтийг боловсруулах олон функцүүдтэй. Хоёр буюу олон хэмжээст массив: Float twoP_Array[ ] [ ]= new float [5][10]; байдлаар үүсгэдэг. Мөн 2 хэмжээст массивын ялгаатай тооны багануудтайгаар үүсгэж болдог. Int list+[ ] [ ] = new int [2][ ]; List[0] = new int [6]; List[1] =new int [15] Лекц№3 2. Java дахь ОХП 2.1. ОХП-н ухагдахуунууд Объект хандлага бол програмчлалын технологи дахь шилжилт юм. Одоог хүртэл програм зохиогчид процедур програмчлалын уламжлалт аргыг хэрэглэж байна. Процедур програмчлалд програм зохиогч заавруудын дарааллыг компьютерийн системд өгдөг. Код том хэмжээтэй болоход кодыг процедур ба функцүүд гэж нэрлэгдэх блокуудад хуваах хэрэгтэйг мэдсэн. Үүнийг бүтцийн програмчлал гэдэг байв. Бүтцийн програмчлал нь кодын удирдаж болох хэсгүүдийг байгуулахад туслана, гэхдээ ижил хугацаанд энэ олон дутагдалтай. Ихэнхи тохиолдолд функц ба процедурууд тэднээс гадуурхи өгөгдлийг ашиглаж байдаг. Үүний үр дүнд модулыг шалгахад маш хүнд болдог., модул бүр зөв ажиллаж байгаа эсэхийг нь мэдэхийн тулд шалгагдаж байдаг, тэр утгыг өөрчилсний дараа гэмтсэнийг мэдэхийн тулд. Энэ асуудал нь програмын хэмжээг нэмэгдүүлэн хүндрүүлдэг. Процедур програмчлал дахь өөр нэг асуудал бол өгөдөлд хоёрдугаарт ач холбогдол өгдөг. Өгөгдөл бол ямар ч програмчлал дахь хамгийн чухал зүйл. Үнэн хэрэгтээ өгөгдөл бол програм яагаад оршиж байгаагын анхдагч учир шалтгаан. Гэвч процедур програмчлалд өөр нэг цохон тэмдэглэх -11- С.Ууганбаяр
  • 12. JAVA програмчлал зүйл бол функц, процедуруудын тусламжтайгаар өгөгдөл яаж удирдагдах вэ гэдэгт байдаг. Эдгээр асуудал нь объект хандлагат технологиор шийдэгддэг. Объект хандлагат технологид өгөгдөл нь анхдагч чухалчлал болдог. Объект хандлагат технологийн цөм бол объект. Объект бол өгөгдөл ба тэдгээр өгөгдөлтэй ажилладаг методуудын нэгдэл юм. Үүнийг сайн ойлгохын тулд, ямар нэгэн бодит амьдралын объектод анхаарлаа хандуул, жишээлбэл үзгийг авч үзье. Үзэг бол шинж чанар (өнгө, бие, үзгэн эсвэл бөөрөнхий хошуутай г.м) ба ааш авиртай (үзэг бичдэг) объект юм. Үүнтэй төстэйгээр объект хандлагат технологид объект нь шинж чанар (өгөдөл)ба ааш авирыг (өгөгдөл дээр боловсруулалт хийх методууд) агуулж байдаг. Энэ ойлголт нь процедур програмчлалаас эрс ялгаатай болгодог. Бид объект хандлагын тухай ярих үед объект, класс, хийсвэрлэл, удамшил, полимор , битүүмжлэх зэргийг олон ухагдхуунууд бодит толгойд бууна. Бид объект гэж юу болох тухай ярилцсан, одоо үндсэн ухагдхуунуудыг нэг нэгээр нь тайлбарлая. 2.1.1 Класс Класс нь төстэй объектуудбн цуглуулга. Эдгээр объектууд нь ижилхэн өгөгдлийн бүтэц ба методуудтай байх ёстой 2.1.2 Хийсвэрлэл Хийсвэрлэл бол програмын үндсэн зорилгоос өөрийн сонирхож байгаа зүйлсээ илрүүлэх процесс бөгөөд өөрт хамаагүй нарийвчлалуудын гадна орхидог. Жишээлбэл, Order Processing System-г авч үзье, зүйл бүр нь түүнийг адилтгасан үл давтагдах дугаартай. Энэ зүйл (item) нь тодорхойлолт, үнэ, тоо ширхэг, дахин дугаарлах эрэмблэлтэй байна. Бид мөн өөр өнгө, хэмжээс зэрэг атрибутыг авч болно. Гэхдээ эдгээр атрибутууд ь Order Processing System-д төдийлөн ач холбогдолгүй, тиймээс бид тэднийг өөрсдийн зохиомжоосоо орхиё. Энэхүү таарахыг нь үлдээгээд үл таарахыг нь орхиж байгаа процессыг хийсвэрлэл гэдэг. 2.1.3 Битүүмжлэл Өмнөх хэлснээр объект нь өгөгдөл ба түүнтэй ажилладаг методуудын нэгдэл юм. Өгөгдөл ба методуудыг хамтад нь багцалж байгаа энэ аргыг битүүмжлэл гэдэг. Order Processing System-с адил хэмжээг дахин авъя. Бид өгөгдлийн тал дээр аль хэдийн шийдчихсэн, одоо объектын методуудыг олж тогтооё. Методууд нь: a) Зүйлийн тодорхойлолтуудыг хэвлэх b) Зүйлийн өгөгдлүүдийг оруулах /хүлээн авах/ c) Тоо хэмжээг өөрчлөх d) Материалын утгыг хэвлэх e) Зүйл дахин дугаарлагдах эсэхийг тодорхойлох төвийг хэвлэх. -12- С.Ууганбаяр
  • 13. JAVA програмчлал Объект Өгөгдөл Методууд ItemNo Print Details Description Accept Details Rate Change QOH Quantity on hand Display Value Reorder Level Reorder Status Өгөгдөл ба методуудыг хамтад нь багцалж байгаа энэ арга нь битүүмжлэл бөгөөд энэ нь өгөгдлийн далдлатад хүргэдэг, учир нь гадна талыг интефэйсүүд төлөөлнө харин дотор атрибутууд далдлагдана. 2.1.4 Удамшил Удамшил бол шатлан захирах хамаарал дээр тулгуурласан классуудын хооронд атрибут ба үйлдлүүдийн эзэмшилт юм. Удамшигч нь мөн үндсэн классын бүх атрибутууд ба зан байдлыг түүний sub-класст бэлэн болгож дахин ашиглаж төлөвшдөг. Жишээлбэл, бид order Processing System-д Item гэж нэрлэгдэх объектыг авсан. Компани компьютерийн төхөөрөмж худалддаг гэж бодъё. Тэгвэл энэ Item нь Printer, Stationery, Floppy disk sub-классуудад тохирно. Эдгээр бүх sub-классуд нь нийтлэг itemno, description, rate, qurantity on hand, reorder level атрибуудтай, бид эдгээрийг super класс item-н дор оруулсан. Printer sub класс нь эдгээр бүх атрибут дээр өөрийн хоёр атрибутыг нэмнэ- хэвлэлийн төрөл /laserjet эсвэл Inkjet/, минутад хэвлэх хуудасны тоо. Stationory класс нь мөн Super классын атрибуттуд дээр өөрийн нэг атрибутыг нэмнэ- хуудсын хэмжээ. Floppy disk класс мөн super классын атрибутууд дээр нэмээд өөрийн 2 атрибутуудтай-багтаамж ба хэмжээ. Энэ удамшлыг зургаар үзүүлбэл. Item Item No Description Rate Quantity on hand Reorder level -13- С.Ууганбаяр
  • 14. JAVA програмчлал Printer Stationery Floppy disk 2.1.5 Полиморфизм Полифермизм бол өөр өөр объектуудтай ялгаатай байх метод эсвэл үйлдлийн чадвар юм. Жишээлбэл, show функц нь Printer ба Floppydisk классуудын хувьд ялгаатай байна. SiteType Capacity Pages Per Minute Site 2.2 Класс ба объект үүсгэх Бид одоо объект ханлагат програмтай танил боллоо. Одоо Item class-г үүсгэх Java програм бичье. Class Item { Private int itemno; Private string description; Private float rate; Private int goh; Private int roe; Public void display () < System.out.println (“Item Details”); Sistem.out.println (“. . . . . .. . . . ”); Sistem.out.println (“Item number : ” + itemno); Sistem.out.println (“Description : ” + description); Sistem.out.println (“Rate : ” + rate ); Sistem.out.println (“Quantityon hand : ” + ); Sistem.out.println (“Reoder level : ” + roe); Public void change QOH ( int qty, char Status) { If (Status == ‘A’) Qch=qch+qty; Else If (status = = ‘S’) Qoh=qoh-qty; } public void accep+Details ( int ino, String desc, float rt, int qty, int reorder) { itemno=ino; description=desc; rate=rt; qoh=qty; rol=roerder; } 2.3 Санах ойн менежмент (Memory Management) -14- С.Ууганбаяр
  • 15. JAVA програмчлал Та Java –д шинэ объект үүсгэхэд пек операторыг ашигладгыг үзсэн. Энэ оператор нь объектын өгөгдөл бүрт тохирох хэмжээтэй бүхэл санах ойг хувиарладаг. Java-д санах ойг удирдах нь динамик ба автомат. Энэ нь зүгээр л объектын шууд заагчийг үүсгэх боломжтой ба сүүлд нь түүнд пек операторын тусламжтай ой хувиарлана гэсэн үг. …………. Item I; ………… ………… I= пеw Item () ; ………. Одоо классын объектын классуудад ой яаж хувиарлагддагыг үзье. Классын объект бүр түүний тусдаа атрибутуудынхаа хувьд ой хувиарлагдсан байдаг. Гэвч нэгэн ижил классын бүх объектууд ижил методуудыг эзэмшинэ. Энэ нь зүгээр л классын объект пек операторын тусламжтай үүсгэгддэг, ой нь түүний атрибутуудад хувиарлагддаг боловч методуудад хувиарлагддаггүй гэсэн үг. Санах ой Item классын методууд Assept Details Display Change QOH Item A Item B Java -д санах ойн удирдлага нь автомат учраас та объектын хэрэглэсэн санах ойг чөлөөлөх хэрэггүй. Java нь хэрэглэгдэхгүй болсон объектуудыг хайдаг хог цуглуулагчтай байдаг ба тэдгээр объектуудаар ашиглагдсан ойг буцаан сэргээдэг. Олон тохиолдолд объект нь түүнийг устгах үед тодорхой үйлдлүүдийг хийдэг. Жишээлбэл, програм файл handl, цонхны тэмдэгтийн файл зэрэг объект устахынхаа өмнө суллах хэрэгтэй болно. Энэ метод нь объект хог цуглуулагчаар чөлөөлөгдөхийн өмнө дуудагддаг. Finalite() методын 1 2 Nuts & Botts Hammer 23.56 75.89 100 156 23 50 -15- С.Ууганбаяр
  • 16. JAVA програмчлал тодорхойлж буй энэ процессыг finalitation гэж хэлдэг. Finalite() методын ерөнхий хэлбэр: Protected void finalite () { ……. ……. } Ямар ч гэсэн та нэг зүйлийг тэмдэглэх ёстой. Хэзээ хог цуглуулагч идэвхждэг мөн Finalite() дуудагддаг болохыг мэдэх боломжгүй. Иймээс та хэзээ Finalite() дуудагдах, эсвэл дуудагдсаныг хэзээ ч баттай хэлж чадахгүй. Та пек оператын тусламжтай объектод санах ойг ил тодорхой хувиарладаг, гэвч түүнийг тодорхойгоор чөлөөлж чадахгүй. Runtime класс Runtime класс нь run-time орчныг битүүмжилдэг. Run-time орчин нь аль хэдийн оршиж байгаа бол та Runtime объектыг үүсгэж чадахгүй. Гэхдээ та getRuntime() методын тусламжтай идэвхтэт run-time орчны заалтыг авч чадна. Та ил тодорхой байдлаар gc() методыг ашиглан хог цуглуулагчыг дуудаж болно. Дараах кодыг хэсэг хог цуглуулагчийг дуудна. ………. ………. Runtime r=Runtime, getRuntime(); r.gc(); 2.4 Төрөл хувиргалт Java програмд олон удаа нэг төрлийн өгөгдөл утгыг өөр төрлийн утга руу хөрвүүлдэг. Жнь: int-с float руу, float-c double руу. Casting бол утгыг түүний анхны төрлөөс өөр төрөлтэй шинэ утга болгох процесс юм. Төрөл хувиргалт нь үндсэн өгөгдлийн төрлүүд (int8 flout8 boolean г.м) хооронд, эсвэл объектуудын хооронд (String, Point, Integer г.м) эсвэл үндсэн төрөл ба объектын хооронд хийгддэг. 2.4.1 Үндсэн өгөгдлийн төрлүүдийн хувиргалт Энэ нь үндсэн өгөгдлийн төрөлтэй нэг утгыг өөр нэг үндсэн өгөгдлийн төрөлтэй болгож хувиргах. Гэхдээ boolean утгууд true эсвэл false гэсэн хоёрхон утга авдаг учраас хувиргалт хийгдэж болохгүй. Хувиргалт нь ихэвчлэн тоон утгуудад хийгддэг. Энэ тохиолдолд дүр утга нь эх утгаасаа том байх хэрэгтэй, жнь: int-г long руу. Учир нь бага утга их утга руу хувиргахад их утгад алдаа гарахгүй. Ийм төрлийн хувиргалт нь автоматаар хийгддэг. Харин, хэрэв дүр утга нь эхээс том байж чадахгүй бол ил төрөл хувиргалтыг хийдэг. Ил төрөл хувиргалт нь дараах байдлаар хийгдэнэ. (data type)value Дараах кодын хэсэг float утгыг int утга руу хөрвүүлж байна. …….. int i ; -16- С.Ууганбаяр
  • 17. JAVA програмчлал float f=6.7; I=(int)f; ………. Ямар ч гэсэн энэ тохиолдолд өгөгдөл гэмтэнэ. I хувьсагч нь 6 утгатай байж болно, зөвхөн бүтэн утга авна. Өөр нэг бүтэн тоог бодит руу хөрвүүлсэн жишээ үзье. ………. Int i =1078; Double d;; ………… 2.4.2 Объектуудын төрөл хувиргалт Нэг классын объект нь өөр нэг классын объект руу хөрвөж болно. Гэхдээ энэ 2 класс нь хоёул хоорондоо удамшлаар холбогдсон байх ёстой, ө.х нэг класс нь нөгөөгийн sub класс байх ёстой. Энд мөн далд эсвэл ил төрөл хувиргалт хийгдэнэ. Далд хувиргалт нь бага төрлийн объект том төрлийн объект руу хувиргагдаж байгаа үед явагдана. Энэ нь ил хувиргалтгүйгээр sub классын объект нь super классын объект болн ашиглагдаж болно гэсэн үг. Учир нь супер классын бүх атрибут, методууд автоматаар түүний sub классд байдаг. Хэрэв sub классын объект super класс руу хувиргагдаж байгаа бол ил хувиргалт явагдана. Энд бодох ёстой нэг зүйл бит-ын хувиргалтын үр дүнд мэдээлэл гэмтэж болно. Учир нь sub класс бол түүний super классын илүү үүргүүдийг агуулдаг. Объектыг доорхи байдлаар төрөл хувиргана. (class name) object Ж.нь: Item new Item (); Printer P= new Printer(); I=P; // зөв, далд хувиргалт хийгдэнэ. P=I; // буруу, ил хувиргалт хэрэгтэй P=(printer) I;// зөв 2.4.3 Үндсэн төрлөөс объект руу эсвэл объектоос үндсэн төрөл рүү хувиргах Объектын үндсэн төрөл рүү хувиргах буюу vice – versee нь Java-д зөвшөөрөгддөггүй. Учир нь ердийн үндсэн төрлүүд нь класстай адилгүй бөгөөд тэдгээр нь объектоос ялгаатай. Хэдийгээр объектын үндсэн төрөл рүү хувиргах нь зөвшөөрөгдөөгүй боловч Java үүнийг өөр байдлаар бий болгосон. Java.long пакет нь үндсэн өгөгдлийн төрлүүдтэй тохирох классуудыг агуулдаг. Жнь: Integer класс нь int үндсэн төрлийн оронд, үүнтэй төстэйгээр Boolean, Byte8 Character, Long, Void, Double, Float г.м классууд байдаг. Объектын үндсэн төрөл рүү хувиргахын тулд уг классын методуудыг ашиглаж болно. Жнь: String объектыг int рүү хувиргах дараах кодыг харъя: String str = nek String (“4578”); Int i = Integer.Parse Int (str); Дээрхи кодод String-н str объектын бүхэл утгыг авахад Integer классын parse Int методыг ашиглаж болно. Лекц№4 2.5 Байгуулагчид -17- С.Ууганбаяр
  • 18. JAVA програмчлал Байгуулагч бол объектын анхан утгуудыг тогтооход ашиглагддаг классын нэг метод юм. Байгуулагч нь бусад классын методуудтай адилхан зарлагддаг. Гэхдээ байгуулагч нь буурах утга байдаггүй ба түүний нэр нь классын нэртэй ижил байдаг. Дараах кодын хэсэг нь Item классын байгуулагчыг тодорхойлж байна. Item() 1 Itemno=0; Description = nek String (); Rate = 0.0 f; Goh = 0; Rol =0; } Энэ байгууллага нь дуудагдсан үедээ объектын өгөгдлүүдэд утга онооно. Байгуулагч дараах байдлаар дуудагддаг: Item I= new Item (); Java нь default байгуулагчийг класс болгонд үүсгэдэг. Хэрэв хэрэглэгч тодорхойлогч бол. Хэрэв хэрэглэгч классын байгуулагч методыг тодорхойлсон бол энэ нь уг классын объект үүсэх үед дуудагддаг. 2.5.1 Олон байгуулагч үүсгэх Класс нь олон байгуулагчтай байж болно. Гэвч яагаад класст олон байгуулагч хэрэгтэй болдог юм бэ? Байгуулагч бол объектын эхний төлвийг байгуулах арга, объектыг олон замуудаар үүсгэхийг хүсч болно. Програмд дуудагдах байгуулагч нь объект үүсч байх үед тодорхой болно. Дараах жишээнд Item-ийн 2 байгуулагчыг тодорхойлж, объектууд хэрхэн ялгаатай замаар үүсгэгддэгийг үзүүдэв. Class Item { Private int itemno; Private String description; Private float rate; Private int goh; Private int rol; Public void display () { System. out. println (“Item details”); System. out. println (“Item details”); System. out. println (“Item number : ‘’ + itemno); System. out. println (“Description : ” + description); System. out. println (“Rate :” + rate); System. out. println (“Quantity on hand :” + qoh); System. out. println (“Reoder level :” + rol); } public void change QOH (int, qty, char status) { if (Status == ‘A’) qoh = qoh + qty; -18- С.Ууганбаяр
  • 19. JAVA програмчлал else if (status == ‘s’) qoh=goh – qty; } public void accapt Details ( int ino, string dese, float rt, int qty, int reorder); { itemno = ino; description = desc; rate = rt qoh = qty; rol = reorder; } Item () { // байгуулагч 1 Itemno = 0; Deseription = Rate = 0. 0 f; Roh = 0; Roe = 0; } Item (string str) { // байгуулагч 2 Itemno = 0 Description = str; Rate = 0.0 f; Roh = 0; Roe = 0; } } Item.Java файл Import Item; Class Try Item { Public void (string args [ ] ) { Item I=new Item (); // байгуулагч 1-г дуудна i. display; string d=new string (“Nuts 2 Bolts”); Item I=new Item (d); // байгуулагч 2-г дуудна i. display; /* буруу, классд тохирох байгуулаа тодорхойлогдоогүй */ item k=new Item (1, d); k.display(); } } Try Item.java файл Энд импортлогдож байгаа Item класс нь нэгэн ижил каталогт байх ёстой. Default байгуулагч объектын өгөгдлүүдийг яаж Ижил нэртэй боловч ялгаатай тодорхойлолттой 2 функц байвал үүнийг функцийг дахин тодорхойлолт гэдэг. 2.5 Объектуудыг харьцуулах Үндсэн өгөгдлийн төрлүүдийг харьцуулахад == (тэнцүү) операторыг ашигладаг. Доорхи жишээг харъя: -19- С.Ууганбаяр
  • 20. JAVA програмчлал Class Compint { Public strtic void main (string args [ ] ) { Int x= 33; Int y=33; If ( x==y) System.out.println (“Equal”); Else System.out.println (“Not Equal”); Энэ програмын үр дүн нь х, у хоёул тэнцүү учраас “Equal” байна. Одоо Integer классын объектыг ашиглаж ижил програм бичьев Class CompInteger { Public static void main (String args [ ]){ Integer x= new Integer (33); Integer y= new Integer (33); If (x==y) System.out.println (“Equal”); Else System.out.println (“ Not Equal”); } Энэ програмын үр дүн нь хоёр объект хоёул 33 утгатай байхад “Not Equal” байна. Учир нь == оператор нь 2 объектыг харьцуулдаг. Харин объектын утгуудыг харьцуулдаггүй, х бау нь объектууд, тиймээс үр дүн нь “Not Equal”. Ялгаатай объектуудын хувьд ой хувиргалт Санах ой х у 33 33 Дараах байдлаар объектуудыг зарласан үед дээрхи програм нь “Equal” үр дүн гарна. Integer y; y = x; Учир нь зөвхөн ганц объект 33 гэсэн утгатайгаар үүссэн. у объектод санах ой хувиарлагдахгүй учир нь энд байгуулагч метод ашиглагдахгүй. Тиймээс у бол зүгээр л Integer төрлийн объектын заалт, гэвч одоохондоо энэ нь ямар нэг зөв объект заахгүй байна. у=х –н дараа у нь х-н зааж байгаатай адил объектыг заана. Ижил объектыг заах хувьсагчдын санах ой хувиарлалт Санах ой х у -20- С.Ууганбаяр33
  • 21. JAVA програмчлал Ингэхлээр, 2 объект тэдгээрийн утгын хувьд харьцуулагдах үед == операторыг ашиглаж болохгүй. Хоёр объектод ашиглагдах утгуудыг харьцуулахад equals () методыг хэрэглэж болно. Жнь: Class CompInteger { Public static void main (string args [ ]) { Integer x= new Integer (33); Integer y= new Integer (33); If (x.equals (y)) System.out.println (“Equal”); Else System.out.println (“ Not Equal”); 2.6 Удамшил Бид өмнө удамшлын тухай бяцхан оршил хийсэн. Одоо яаж хэрэгжүүлэхийг авч үзье. Бид Item классыг 5 атритурт, 3 метод, 2 байгуулагчтай тодорхойлсон. Одоо Item классын дэд класс Printer-г нэмэлт атрибутуудтайгаар үүсгэе. Import Item; Class Printer extends Item { String type; Int ppm; Printer () { // байгуулагч 1 Super () ; Type ; Ppm=0; } Printer (int ino8 string desc, float rt, int qty, int reorder, string type, int ppm){ Super (ino, desc,rt, qty, reorder); // байгуулагч 2 This.type = type; -21- С.Ууганбаяр
  • 22. JAVA програмчлал This.ppm = ppm; } public void display () { super.display (); // super классын display методыг дуудах system.out.println (“Printer-н төрөл : ” + type); system.out.println (“Минут дахь хуудас : ” + ppm); Printer.java файл Import java.lang.*; Import Printer; Class Try In herit { Public static void main (String args [ ]){ Item I=new Item (1, “Mouse”, 500.89f 1200, 200); i. display (); Printer p=new Printer (2, “Inkjet Printer”, 10000.75f, 200.35, “6P”, 6); P. display () ; } } Try Inherit.java файл Super түлхүүр үг нь super классыг заахад хэрэглэгддэг. Printer классын байгуулагч 1-д Super () бичиглэл нь Item super классын байгуулагч 2-д super (ino, desc, rt, qty, reorder) бичиглэл нь Item super классын байгуулагч методыг (дугаар 1) шууд дуудаж байна. Төстэйгээр Printer классын байгуулагч 2-д super (ino, desc, rt, qty, reorder) бичиглэл нь Item super классын байгуулагч методыг (дугаар 2) дуудаж байна. Printer классын display метод супер классын display методыг дуудагч эхний 5 атрибутыг хэвлээд дараа нь нэмэлт 2 атрибутыг хэвлэж байна. Энэ нь Sub класс супер класс хоёул ижил нэртэй функцүүдтэй байж болно гэдгийг харуулж байна. Printer-н байгуулагч 2 нь мөн this түлхүүр үгийг ашиглаж байна. this түлхүүр үг нь тухайн идэвхтэй объектыг заахад хэрэглэгддэг. Байгуулагч 2 методын аргументуудын нэг нь объектын атрибуттай адилхан нэртэй (type) байгааг ашиглаххэрэгтэй. Энэ нь ямар хувьсагч нь утга өгч, ямар нь утга авч байгаа нь тодорхой байх ёстой. Иймээс this.type = type бичиглэл өгөгдөж байна. 2.7 Полиморфизм Өмнө хэлснээр полиморфизм бол ялгаатай объектуудад ялгаатайгаар харш үйлдэл хийх функцийн чадвар юм. Полиморфизмын 2 төрөл байгаа, static ба динамик полиморфизм. Static полиморфизмд дуудагдах функц нь компиляц хийх үед өөрөө мэдэгддэг. Жнь: Дараах хоёр тодорхойлолттой 2 функц програмд зарлагдсан байдаг: Change QOH (int, char) Change QOH (int) тэгээд програмд дараах команд өгөгдсөн: Change QOH (30); -22- С.Ууганбаяр
  • 23. JAVA програмчлал Хоёр дахь функц дуудагдах бөгөөд энэ нь хөрвүүлэлтийн үед өөрөө тодорно. Хоёрдугаар функц дуудагдах нь энэ тохиолдолд функцэд өгөгдөх аргументын тоо ба төрлөөр тодорно. Зөвхөн нэг аргумент өгөгдсөн учраас 2 дахь функц дуудагдана. Хэрэв хоёр аргумент (нэг нь int нөгөө нь char) өгөгдсөн бол эхний функц дуудагдах байсан. Энэ онцлогыг мөн Функцийн тодорхойлолт буюу Эрт Холболт гэдэг. Dynamic полиморизм бол Хожуу холболт гэж мөн нэрлэгддэг. Динамик полиморизмд дуудагдах функцийн шийдэл нь ажиллаж байх үед шийдэгддэг. Илүү тодорхой болгохын тулд жишээ авъя. Бид өмнө Item ба Printer класс файлууд тодорхойлсон. Printer бол Item классын sub класс. Энэ нь супер классын (Item) заалтыг задлах боломжтой ба тэгээд ажиллаж байх үед нь хэрэглэгчийн оролтоос хамааруулан Item эсвэл Ptinter объект тодорхойлогдож болно. Import Ptinter; Import java.io.*; Class Try Poly { Public static void main (string args [ ]) { Item I; Int ch =0; While ( ch ! = ‘P’ && ch! = ‘N’) { System.out.println(“ердийн Item нэмэхэд N, Printer нэмэхэд P дар”); Try { Ch=System.in.read(); }Catch (I 0 Exception e) { System.out.println (“Error”); } } if (ch==’p’) I=new Println (1, “Laser jet”, 20000f, 100,25. “III plus”, 8); Else I=new Item (1, “Mouse Logitech”, 300f, 100, 20); i. display (); } } Динамик полиморфизмын хэрэгжүүлэх (TryPoly.java) 2.8 Командын мөрийн аргументууд Командын мөрийн аргументууд бол командын мөрнөөс Java програмд дамжигдах аргументууд юм. Java програм нь дараах командыг өгч ажилладаг: Java { class file name} Жишээ нь: TryPoly.class файлыг ажиллуулахад java TryPoly Програмд аргументууд дамжуулахад дараахь команд өгөгдөж болно: Java TryPoly c1 c2 c3 c4 c5 Энд с1 нь эхний аргумент, с2 нь хоёрдох аргумент г.м. Хоёр аргументын хооронд заавал сул зай байх ёстойг анхаараарай. Командын мөрөн дээр аргументыг хүлээн авахын давуу тал нь програм илүү ерөнхий шинжтэй болно. -23- С.Ууганбаяр
  • 24. JAVA програмчлал TryPoly.java програмд анхаарлаа хандуулъя. Ямар төрлийн объект үүсгэхийг ажиллаж байх үед асуухын оронд командын мөрнөөс аргументаар дамжуулж програмд өгье. Одоо Java яаж командын мөрийн аргументуудыг боловсруулдагыг үзье. Хэрэв програм командын мөрнөөс аргумент хүлээн авсан бол Java эдгээр аргументуудыг тэмдэгт мөрийн массивт хадгалан main() функцэд дамжуулдаг. Дараа нь програм үүнийг хүссэн цагтаа боловсруулж болно. Жишээ нь: Public class TryMain Arguments { Public static void main (string [ ] args) { int I =0; for ( I=0; I < args.lugth; I ++) { System.out.println (“Аргумент ” + (I+1) + “ ; “ + args [i]) ; } } } Командын мөрийн аргументуудыг хэвлэх. Одоо TryPoly.java програмыг дээр хэлснээр өөрчилье: Class TryPoly 1 { Public static void main (String args [ ]) { Item :; If (args. Length !=1) { System.out.println (“Аргументын тоо буруу ”); System.exit (0); } If (args [0]. Equals (“P”)) { I=new Println (1, “Laserjet”, 20000 f, 100, 25, “III plus”, 8); i.display () ; } else if (args [0]. Equals (“N”)) { I=new Item (1, “Mouse logitech”, 300f, 100, 20); i. display (); } else { System.out.println (“Буруу утга ….”); System.exit (0); } } } Лекц №5 3.1 Хандалт ба хандалтын удирдлага -24- С.Ууганбаяр
  • 25. JAVA програмчлал Өмнө хэлснээр битүүмжлэл нь классын өгөгдөл ба методуудын хамтад нь нэгтгэж дан бүхэл болгодог. Битүүмжлэл дэх хамгийн чухал зүйл бол класс дотрхи компонентуудын хамгаалалт юм. Энэ бол классын рүү хандалтыг чангатгахад маш чухал бөгөөд өгөгдөл буруу ашиглагдахгүй. Ийм шалтгаанаар хандалт тодорхойлогчид, public, private, protected, өгөгдөл рүү ялгаатай замаар хандахыг удирдахын тулд тодорхойлогдсон. Хандалт тодорхойлогчид нь өгөгдлүүдийн харагдах байдалд нөлөөлдөг ба мөн классын гадна методуудын харагдах байдалд нөлөөлнө. Эдгээр методуудад классын гадна талаас нэг бол удаанаар эсвэл классын объектыг үүсгэж хандахад Хандалт тодорхойлогчид нь дан класс эсвэл пакетын түвшинд бүлэг классуудтай ажилладаг. Бид одоохондоо хандалт хувиргагчдыг нэг класс хэрэглэнэ. Сүүлд удахгүы пакетын тухай үзнэ. 3.1.1 Default Ямар нэгэн хандалт хувиргагчтай зарлагдаагүй хувьсагч буюу метод нь ижил пакет дотроо бусад классуудад бэлэн байна. Нэгэн пакет дахь классууд public гишүүдтэй адил default хувьсагчдад хандаж чадна. 3.1.2 Public Public хандалт нь классын гаднаас гишүүн өгөгдөл, функцүүд рүү нээлттэй хандахыг зөвшөөрдөг. 3.1.3 Privite Ийм өгөгдөл, функцүүд рүү зөвхөн public гишүүн функцүүдээр дамжин ханддаг. 3.1.4 Protected Protected гишүүд нь уг классаас удамшсан классд дотроос хандахыг зөвшөөрдөг. 3.1.5 Static Класс дотор хувьсагч static-р тодорхойлогдсон үед түүний зөвхөн нэг хувийг классын объектуудын гадна үлдээдэг. Энэ нь мөн кодын дурын бусад хэсгээс хандаж болох глобаль хувьсагч болно. Static <type name> <variable>; Хэрэв метод static-р зарлагдсан бол энэ нь классын заалттай хамт хэрэглэгдэх ба объектод хамаарахгүй оршдог. Static хувьсагчид ба методууд нь классын хувь үүссэн ч үүсээгүй ч сул чөлөөтэй оршдог. Static метод нь зөвхөн бусад static метод, хувьсагчдыг чадна, тэд ямар ч тохиолдолд уг эсвэл super- г зааж чадахгүй. Static хувьсагч ба методуудаас гадна кодын блок мөн static-р тодорхойлогдож болно. Түүнийг static блок гэдэг. Энэ блокын онцлог нь класс ачаалагдах үед л биелдэг кодын бусад хэсэг биелэхээс өмнө. Энэ нь үндсэндээ хийгч дүрэм байдлаар ажилладаг. -25- С.Ууганбаяр
  • 26. JAVA програмчлал Class Static_Block { Static int a; Static { a=a+10; } public static void main (String args [ ]) { System.out.println (“ a-н утга : ” +a); } } Дээрхи жишээнд main () методоос өмнө static блок биелнэ, ‘a’ хувьсагч эхлээд ба дараа нь main () метод биелнэ. 3.1.6 Final Final нь хувьсагч ба методуудтай хамт хэрэглэгдэж болно. Хувьсагч final байдлаар зарлагдсан үед энэ нь тогтмол байдлаар хэрэглэгддэг, түүний утгыг өөрчилж чадахгүй. Тогтмол зарлах жишээ: Final int radias =34 Final float pi =3. 1428f; Float төрлийн хувьсагчдыг зарлахад ардаас ‘f ’ үсэг тавьж ил төрөл хувиргалт хийх шаардлагатай байдаг. Методыг final байдлаар зарлах нь түүнийг байгаагаар нь үлдээхийг хүссэн үед хэрэглэдэг, ө.х методыг дахин тодорхойлохыг хүсээгүй үед методыг Final болгосны үр дүнд түүнийг sub класс дарж тодорхойлохоос хамгаалдаг. 3.2 Хийсвэр класс ба методууд Удамшлын ойлголт нь үндсэндээ классыг гэмтээлгүй дахин байгуулалгүйгээр түүний боломжийг нэмэгдүүлэхэд хэрэгжүүлдэг. Энэ нь ерөнхийдөө нэг бол байгаа методуудыг дарж тодорхойлж эсвэл өөр шинийг шинэ хүү классд нэмж байгаа хэрэг. Гэхдээ эдгээрээс маш ялгаатай нэгэн тохироо байж болно. Танд үндсэн классд ердөө байр эзлэн орших метод тааралдаж магадгүй, энэ нь хүү классуудад үл тохирох бодит хэрэгжүүлэлт юм. Энэ бол run time полиморфизмд хүрэх шалтгаан юм. Энэ тохиолдолд бид байр эзлэгч методыг суурь классд абстрактаар тавьж болно., абстрактаар тодорхойлно гэдэг нь уг метод нь ямар нэг кодтой байж чадахгүй гэсэн утгатай. Абстракт методтой класс нь мөн абстрактаар тодорхойлогдох ёстой, ийм класс нь хувь үүсгэж чадахгүй гэсэн утгатай. Үүнээс гадна, абстракт суурь классаас удамшсан хүү классуд нь энэ методыг тодорхойгоор дарж тодорхойлох ёстой. Мөн хэрэв энэ нь дарж тодорхойлж болохгүй бол тэрхүү хүү класс нь өөр нэг хүү класс түүнээс удамшиж хэрэгжүүлэх хүртэл абстрактаар тодорхойлогдох болно. -26- С.Ууганбаяр
  • 27. JAVA програмчлал Үйлчлүүлэгч ресторанд төлбөрөө төлж байгаа тохиолдлыг авч үзье. Тэр төлбөрөө кредит карт, чек, кассаар хийж болно. Нийт төлбөрийг дараах төлбөрийг тооцоог хийнэ. • Хэрэв төлбөр кредит картаар хийгдсэн бол түүнийг шалгаад хэрэв хүчинтэй бол тооцоо хийнэ. • Хэрэв чек бол чекийн дугаар дахь төлбөрийн дансыг авч тооцоо хийнэ. • Хэрэв кассар бол төлбөр шууд хийгдэнэ. Бүх 3 тохиолдлуудын хувьд энгийн төлөх процедур хийхийн оронд get.Payment () нэртэй ердийн абстракт функц байгуулж энэ функцээ Payment классаас удамшсан чек төлбөр, кредит төлбөр, класс төлбөр гэсэн ялгаатай 3 классуудад тус тусад нь хэрэгжүүлнэ. Abstruct class Payment { int file_Number; String customer_Name; String customer_Address; Void accept_ Cust_Details () { ………… ………… } Payment () { // гишүүн хувьсагчдыг тохирох утгуудаар } } abstruct void get_Payment (); // абстракт метод зарлагдана class CC_Pymt extends Payment { void get_Payment () { // кредит картын дугаарыг авах // банкны нэрийг авах // нийт төлбөрийг авах } } class Chq_Pymt extends Payment { void get_Payment () { // чекийн дугаарыг авах // төлөгч банк ба төлбөрийг авах } } class Cach_Pymt extends Payment { void get Payment () { -27- С.Ууганбаяр
  • 28. JAVA програмчлал // нийт төлбөрийг авах } } public class Restaurant { public static void main (string args[ ]) { payment p.cc=new CC.Pymt (); p-cc.accept_Cust_Details(); p-cc.get_Payment (); Payment p.chq=new chq. Pymtc (); p-chq.accept_Cust_Details (); p-chq.get_Payment (); Payment p.cach =new cach_Pymt (); p-cach.acept_Cust_Details(); p-cach.get_Payment (); } } main ( ) метод дотор Payment суурь классын гурван объект үүссэн байна. Тус бүр нь төлбөрийн хэлбэрээс хамааран тохирох хүү классыг заасан ба get.Payment () метод руу хандана. Лекц № 6 3.3 Интерфэйс Интерфэйс бол зөвхөн тогтмол ба методуудын prototype- уудаас тогтох классын нэг тусгай төрөл юм. Энэ нь биегүй метод ба хувьсагчийн хувийг хуулдаггүй. Интерфэйсийг хэрэгжүүлэх үед та хэрэгжүүлэлтийн мэдээллийн талаар ямар нэгэн төсөөлөл хийгдэдгүй. Энэ нь интерфэйсийг хэрэгжүүлж байгаа классууд интерфэйс дэх методуудын үүргийг шийдэх болдог. Интерфэйсүүд нь практикт Java –гийн нийлмэл удамшлыг орлодог. Хэдийгээр класс суурь класаас удамшсан боловч энэ нь интерфэйсүүдийг хэрэгжүүлэхийг зөвшөөрдөг. Интерфэйс нь цэвэр абстракт класстай адилхан. Үүний учир нь, тэд хэрэгжүүлэлтийг дэлгэрэнгүй мэдэж чадахгүйгээс эрх мэдэл дутуу байдаг. Гэвч тэдэнд өөр давуу талууд бий. Энэ нь бүлэг классуудын нийтлэг шинжийг жагсаах боломжтой. Эдгээр классууд нийтлэг интерфэйсийг хэрэгжүүлж болох үед интерфэйсийн өөрийн тодорхойлолтоос тэд юу хийх, яаж хийх зэргийн маш тодорхой болгодог. Тиймээс интерфэйсийг хэрэгжүүлж буй классууд нь зүйлүүдийг судлан тусгай шинж чанартай болж болно. Жнь: бид radio класс, television гэсэн 2 класс байгуулъя гэж саная. Эдгээр хоёр классд нийтлэг нэг зүйл байна. Энэ нь дуу. Тиймээс бид sound control нэртэй интерфэйсийг байгуулъя. Тэгээд үүнийг дээрхи 2 класс хэрэгжүүлнэ. Цааш нь дуу ямар чанар байхыг хүсч байгаагаас хамаараад классууд хэрэгжүүлнэ. -28- С.Ууганбаяр
  • 29. JAVA програмчлал Интерфэйс дэх final ба static хувьсагчид, методууд нь түүнийг хэрэгжүүлэх классд харагдаж (нээлттэй) байхын тулд public – аар зарлагддаг. Классын тодорхойлолт нь inplements түлхүүр үгийг хэрэглэнэ. Доор интерфэйс яаж хэрэглэгдэхийг харуулав. Interfase < interfase – name > { // тогтмолууд // метод prototypes { class <class – name > inplements <interfase - name> { // хувьсагчид // классын методууд // интерфэйсийн методууд } Итерфэйсийг хэрэгжүүлж байгаа класс нь түүн дэх бүх метод prototype- уудыг дарж тодорхойлох ёстой. Энэ нь ямар нэгэн класс Lettover (өмнөх классаар дарж тодорхойлогдоогүй методууд) методуудыг дарах хүртэл. Класс нь зөвхөн дан суурь классаас удамшдаг боловч олон интерфэйсийг хэрэглэж болно. Энэ тохиолдолд классын тодорхойлолт дараах байдалтай: Class <class - name> inplements <interfase – name 1>, <interfase – name 2> { // хувьсагчид // классын методууд // интерфэйс методууд 1 // интерфэйс методууд 2 } Дараах жишээг авч үзье, ажилчдын цалинг тооцоолох , Товчлоод, цалин нь дараах хэсгүүдтэй гэж авъя. Үндсэн цалин, ажлын байрны тэтгэлэг, НRA, татвар шагнал, нэмэгдэл, нийт цалин. Мөн сарын энэ цалин нь шагнал өгөх, жилийн амралтын шагналыг хэвлэх эсэхийг шалгана. Одоо програмын зохиомжийн асуудал дээр анхааръя. 2класс байна, худалдагч, менежер кассууд. Энэ хоёр классын хувьд цалин тооцоолоход зарим нийтлэг шинжүүд байна. Тэдгээр нь HRA, шагнал, нэмэгдэ, татвар, нийт цалинг тооцоолоход хоёуланд хэрэгтэй методууд. Мөн цалинг тооцоолох үед эдгээр бүрэлдэхүүнүүдийг тодорхой үзүүлэх хэрэгтэй. Тиймээс эдгээр методуудын prototype-г тодорхойлсон Calcpay гэж нэрлэгдэх интерфэйс байгуулъя. Дараа нь Clerk (худалдагч ) ба Manager (менежер) классууд энэ инэужфэйсийг хэрэгжүүлнэ. Хэрэв интерфэйсийн ямар нэг метод классын гадна үлдвэл тэр классын хувьд цалин тооцоолж чадахгүй, учир нь уг класс абстракт болох бөгөөд абстракт классын объектын үүсгэж чадахгүй. Мөн худалдагч, менежер кассууд нь Employes гэсэн ерөнхийлсөн классаас удамшина. Interfase Calc Pay { final status string company_Name = “Supersoft ltd”; -29- С.Ууганбаяр
  • 30. JAVA програмчлал public int calc_HRA () ; public float calc_Tax (); public float calc_Bonus (); public float calc_Super_Animation (); public float calc_Gross (); } class Employse { protected int e_id; string ename; protected int basic; Employse (int meid, String name, int mbasic) { e_id = meid; ename = name; basic = m basic; } } class Clerk extends Employle implements CalcPay { Clerc (int seid, String sname, int sbasic) { super (seid, sname, sbasic); } public int calc_HRA () { if (basic < 1000) return (500); else return (900); } public float calc_Tax () { float ani_sal = basic + calc_HRA () + calc_super_animation(); if (ani_Sal > 60000) return ((float).10*ani.sal); else return 0; } public float calc_Bonus() { return ((float).08 * basic) ; } public float calc_Super.Animation() { return (0); } public float calc _Gross() { return (basic + calc_HRA () + calc_Bonus () – calc_Tax () ); -30- С.Ууганбаяр
  • 31. JAVA програмчлал } void print.Solary () { System.out.println (“ n ” + Calcpay.companyName); System.out.println (“ Employse Number :” + e_id) System.out.println(“EmployseName :” + ename ); System.out.println(“Basicsolary :” + basic); System.out.println(“HousePentAllowance: ” + calc_HRA()); System.out.println (“Bonus : ” + calc_Bonus() ); System.out.println (“Taxation : ” + calc_Tax () ); System.out.println (“ Cross Solary : ” + calc_Gross () ); System.out.println (“ ………………………………….th “); } } Class Manager extends Employse implements Calc Pay { Manager (int seid, String sname, int sbasic) { super (seid, sname. sbasic); } public int calc_HRA () { if (basic < 6000) return (3500); else return (5500); } public float calc_Tax () { float ann_Sol = basic + calc_HRA() + calc_Super_Animation () if (ann_sol > 130000) return ((float).30*ann.sol); else return ((float).20*ann.sol); } public float calc_Bonus () { return (0); } public float calc_super_Annmation () { return ((float).15-basic); } public float calc_Gross () { return (basic + calc_HRA () +calc_Super_Annmation () –calc_Tax () ); } void print_Solary () { System.out.println (“ ” + CalcPay.company Name); -31- С.Ууганбаяр
  • 32. JAVA програмчлал System.out.println (“ Employse Namber : ” + e_id ); System.out.println (“Employse Name : ” + ename ); System.out.println (“Basic Solary : ” + basic); System.out.println (“House Rent Allowance : ” +calc_HRA () ); System.out.println (“Taxation : ” + calc_Tax () ); System.out.println (“Superamnation : ” + calc_Super_Amnation ()); System.out.println (“Gross Solary : ” + calc_Gross () ); System.out.println (“……………………………………….n ”); } } public class Payship { public static void main (String args [ ] ) { Clerk c1=new Clerk (3648, “Vinay Sharma” , 800); c1.print_ Solary (); Manager m1 =new Manager (2619, “S.K Lal” , 7000); M1.print_Solary (); } } Интерфэйс нь өөрийн хувийг үүсгэж чадахгүй. Жнь: ifase гэсэн нэртэй интерфэйс байгаад ‘Ifase ofj 1= new Ifase ()’ гэж хэлж болохгүй. Гэхдээ ‘Ifase obj1=new Class1’ нь Class 1 Ifase-г хэрэгжүүлсэн класс байх үед зөв болох юм. Энэ бол runtime полиморфизмийн хамгийн зөв хэрэгжилт юм. Интерфэйсийн өөр нэг онцлог бий. Дараах жишээг үзье: Inforfase Ifase { public void show (); } class A implemens Ifase { public void show () { system.out.println (“a”); } } public class B { public staic void main (String args [ ]) { Ifase obj1=new A(); { public void show () { system.out.println (“c”); } } -32- С.Ууганбаяр
  • 33. JAVA програмчлал obj1.show (); obj2.show (); } } Дээрх жишээнд Ifase интерфэйс нь show () нэртэй методтой байна. Энэ интерфэйс дараа нь ‘А’ классаар хэрэгжиж байна, түүний show () методыг дарж тодорхойлж байна. ‘А’ классд ‘Ifase obj1=newA ()’ бичиглэлийг ашиглан ‘А’ классын объектыг үүсгэж байна. Тэгээд үүнийг интерфэйсээр зааж байна гэдгийг илэрхийлнэ. Ийм замаар та интерфэйсийн тусламжтай динамик полимерфизмд хүрнэ. Дараагийн хэсэгт ‘new Ifase ()’-н ардаас бие бичсэн байна. Дахин хэлэхэд энэ бичиглэл нь интерфэйсийг хувилаж байгаа бус, гэхдээ энэ интерфэйсийг хэрэгжүүлэх нэргүй объектыг үүсгээд хаалтан дотор show () методыг дарж тодорхойлж байна. Хэрэв энэ биеийг авч хаяж цэгтэй таслал тавибал интерфэйс өөрийн хувийг үүсгэж болохгүй гэсэн алдааны мэдээллийг өгнө. 3.4 Пакет гэж юу вэ? (Package) Пакет гэдэг нь үндсэндээ классуудыг бүлэглэж нэгтгэсэн нэр юм. Эдгээр классуд нь тохиромжтой зөв замаар удирдагдана. Энэ нь катологи дотор хадгалагддагтай бараг адилхан ойлголт юм. 3.4.1 Өөрийн пакет үүсгэх Пакет үүсгэхийн тулд та пакетэд хамаатай түвшнүүдийг ойлгох хэрэгтэй. Пакетууд классын гишүүдийн хоорондох үзэгдэх байдлын 4 категорт хуваагдана. • Ижил пакет дахь sub классууд • Ижил пакет дахь sub бус классууд • Ялгаатай пакет дахь sub классууд • Sub классууд эсвэл ижил пакет дахь классууд Энэ хамаарлыг дараах хүснэгтэд үзүүлэв. private default protected Public Ижил класс Yes Yes Yes Yes Ижил пакет Sub класс No Yes Yes Yes Ижил пакет Sub бус класс No Yes Yes Yes Ондоо пакет Sub класс No No Yes Yes Ондоо пакет Sub бус класс No No no Yes Ижил классын элементүүдийн бүх хандалтууд байна. ИЖил пакет дахь sub классуудын хувьд суурь классын зөвхөн private гишүүд л sub классуудад харагдахгүй. Ижил пакет дахь sub бус классуудын хувьд, классын зөвхөн private -33- С.Ууганбаяр
  • 34. JAVA програмчлал гишүүд л бусад класст харагдахгүй. Хэрэв та өөр пакет дахь классаас удамшуулах sub классуудыг үүсгэвэл private ба default гишүүд рүү хандаж чадахгүй. Хоёр классын жишээг авъя. Stack класс нь стекийг хэрэгжүүлдэг, Callstack класс нь Stack классыг дууддаг. Энэ нь дан файлд байж болно, гэхдээ пакет үүсгэхийн тулд тэдгээрийг тусдаа класс файлууд үүсгэе. Stack класс нь пакет дотор, CallStack нь ердийн байдлаар. Mypackage нь бидний Stack гэж нэрлэх пакетын хадгалах каталоги болно. Пакет үүсгэх алхамууд нь: <drive :javasource filesmypackage> байдалтай бүтцийн каталоги үүсгэнэ. Энэ тохиолдолд c:javasourcefilesmypackage (бүгд каталогиуд). Callstack.java эх файл нь c:javasourcefiles каталоги дотор орших ба пакетыг дуудна. Stack.java класс файл нь c:javasourcefilesmypackage каталогит байрлана. Класс файлд файлын нэртэй адил нэртэй, public хандалттай зөвхөн нэг класс байх ёстой. Үлдсэн бусад классууд private г.м хандлагуудтай байж болно. Stack.java файлд, хамгийн эхний мөр нь класс ямар пакетад хамаарахыг заах package оператор байна. Энэ нь дараах байдлаар бичигдэнэ: Package mypackage; Энд Stack бол mypackage пакетэд хамаарах пакет (stack.class файлыг хадгалах) юм. Пакетын зам нь автоматаар каталогын бүтэцтэй ижилээр үүсгэгддэг. Stack.class файлыг байгуулахын тулд Stack.java-г хөрвүүлнэ. javasourcefiles каталоги дахь Classtack.java файл руу сэлгэ. Callstack.java-д импортлох бичлэгийг import.mypackage* байдлаар хий. Одоо стек public класс нь ашиглагдаж, хуваагдаж болно. Шинэ пакет нь хараахан Java орчинд харагдахгүй. Үүний тулд, classpath гэж нэрлэгдэх системийн хувьсагчийг тохируулах хэрэгтэй. Энэ хувьсагчид стандарт Java классууд мөн пакетуудыг агуулж буй каталогуудыг заадаг. Үүнийг дараах байдлаар тохируулж болно: Set classpath=.; c:Javaclasses; c:javasourcefiles Үүнтэй адилаар, өөр пакетууд хаа нэг газар үүсгэгдэж болох бөгөөд програмдаа дуудаж болно. Пакетууд дэх гадна харагдах классууд нь public хандалттай байх ёстой. Default нь public-тэй төстэй байдлаар үйлчилдэг, гэвч пакетын гадна адилгүй. Пакет үүсгэх програмыг дор үзүүлэв: Stack.java Package mypackage; Public class Stack { private int Stck [ ]; private int Stack_Ptr; public Stack (int site); { Stck=new int [site]; Stack_Ptr=-1; } -34- С.Ууганбаяр
  • 35. JAVA програмчлал public void push (int item) { if (stack_Ptr==Stck.lenth-1) system.out.println (“Stack is fule”); else Stck [++Stack.Ptr]= item; } public int pop () { if (Stack.Ptr <0) { system.out.println (“Stack underflow”); return 0; } else return stck [stack_Ptr--] ; } } CallStack.java Import mypackage.*; Public class callstack { public static void main (String args [ ]) { stack s1=new Stack (5); for (int I=0; I<5; I++) { s1.push (i); } system.out.Println (“The stack contains”); for (int I=0; I<5; I++) { system.out.println (s1.pop ()); } } } Практик ажил: Оюутны элсэлтийн систем. Асуудлын тавилт. -35- С.Ууганбаяр
  • 36. JAVA програмчлал SubjectCourse Зур. Оюутны элсэлтийн Системийн классын диаграмм Application Core optional Applicant Student -36- С.Ууганбаяр
  • 37. JAVA програмчлал Энд ОМТ (object Modelling Technique)-н тэмдэглэгээгээр диаграмм байгуулсан, энд Классын диаграмм нь систем дэх шаардлагатай классуд, тэдгээрийн хоорондын хамаарлыг тэмдэглэдэг. Энэ системийг байгуулахын тулд бид тодорхой байдлаар хялбарчилж үзье: • Бүх курсын сүүлчийн хугацаа ижил • Курс болгон дэх оюутны тоо 5 (гэхдээ сүүлд нь ихэсгэж болно) • Бэлэн курсүүд нь “MDMC”, ”OCO”, ”C++” (өргөтгөж болно) • Бэлэн хичээлүүд нь “C”, ”C++”, ”OOADS”, ”JAVA”, ”NT”, ”VNIX”, ”VB”, ”VC”, ”ORACLE ” • 75%-ээс дээш эхний таван оюутан admitted. Одоо зарим классууд, тэдгээрийн метод, атрибутуудыг тодорхойлъё. Public class Subject { String sname; Subject (String name ){ This.sname=name; } } subject.java код public class CoreSubject extends Subject { CoreSubject (String name) { Super (name); } public void setName (String name) { sname-name; } } CoreSubject.java код. Subject классаас удамшсан Public class OptSubject extends Subject { OpmSubject (String name) { Super (name) } public void setName (string name) { Sname=name; } } OptSubject.java код. Subject классаас удамшсан. (үргэлжилнэ.) Одоо классуудыг “college. Student” пакетад багтааж зохион байгуулъя. Applicant классын методууд: • Applicant (байгуулагч) • Apply for course энэ метод нь Applicant классын courseName атрибутад сонгосон курсын нэрийг онооно. -37- С.Ууганбаяр
  • 38. JAVA програмчлал • Select Optional Subjects энэ метод нь Applicant классын optional subject атрибутад сонгосон сонгох хичээлийн нэрийг онооно. • Get Functions нь шаардлагатай утгуудыг авна. Класс Course-н методууд: • Course (байгуулагч) • Set antrance qualifications элсэх хамгийн бага түвшингийн хувийг тогтоох • Set maximum students Курс дэх оюутнуудын хамгийн их тоог тогтоох • Check course availibility Тус курс бэлэн эсэхийг шалгах • Check entrance qualifications дамжуулсан дүн нь зөв тэнцэх эсэхийг шалгана. • Set number of students enrolled Элссэн оюутнуудын тоог оноох • Get number of students enrolled Элссэн оюутнуудын тоог авах Өгүүлэмж классын методууд: Receive өгүүлэмж объектын атрибутуудыг дамжуулсан утгуудаар Approve өгүүлэмж Курс бэлэн эсэхийг шалгаад хэрэв бэлэн бол элсэх шаардлага хангахыг шалгана, хэрэв зөв бол үнэн, үгүй бол худал утга Package college. Student; Import java.util.Date; Public class Applicant { String name; String courseName; String optSub; Long result; String address; Applicant (String name, String add, Long res) { This.name=name; Address=add; Result=res; Course Name = name; Optsub = mull; } public void apply forCourse (String selCourse) { Course Name = selCourse; } public void SelectOptSubject (String oSub) { opt Sub=oSub; } public String getCourse () { return CourseName; } public String get OptSub () { return optSub; } public void get AppDet (String sname, String add) { sname=name; address= add; } -38- С.Ууганбаяр
  • 39. JAVA програмчлал public long getResult () { return result. Long Value () ; } } Applicant.java код Package college.student; Public class Course { String name; Static int num of St; Static int ourr St; Long qualPere; CoreSubject cSub [ ]; OptSubject oSub [ ]; Course (String name, CoreSubject cS [ ], OptSubject oS [ ]) { This.name=name; CSub=cS; OSub=oS; } public void setEEntranceQual (Long perc) { qualPerc=perc; } public void SetMaxStudents (int uSt) { numof=uSt; } public boolean check Course Avail () { if ((curSt+1) < numofSt) { return true; } else return false; } public boolean checkEntrance Qual (Long perc) { if (qualPerc.LongValue () > perc) return false; else return true; } public void set CurrSt () { // оюутан элсэх үед дуудагдана curr St++; } public int getCurrSt() { // оюутан элсэх үед дуудагдана return curr St; } Course.java код Package College.student; -39- С.Ууганбаяр
  • 40. JAVA програмчлал Public class Өгүүлэмж { Static int apNum; Applicant aplcnt; Public void rcvAppl (Applicant a) { ApNum++; Aplcnt=a; } public boolean appApl(Course c) { if (c.check CourseAvail () ) if (c. checkEntrancequal (aplcnt.getResult () ) ) return true; else return false; else return false; } } Өгүүлэмж.java код Үүнтэй төстэйгээр өмнө тодорхойлогдсон классууд мөн package college.student; мөрийг агуулна. Ингэснээр эдгээр классууд College.student пакетын нэг хэсэг болно. Одоо бид эдгээр бүх классаа ‘College’ каталогын ‘student’ дэд каталогт байрлуулна. 3.4.3 Зарим Java пакетууд Програм зохиогч классууд, интерфэйсүүдийг агуулсан пакетуудыг үүсгэдэгтэй адил Java чухал зорилтуудыг гүйцэтгэх үндсэн пакетуудыг агуулдаг. JAVA пакет Long util io applet awt net Java. Long пакет Security Manager, System, Thrend г.м Java-н суурь классудыг агуулдаг. Java.util пакет нь Date г.м утилит классудыг агуулдаг. Java.io пакет нь оролт/гаралтын үйлдлүүдэд зориулсан классуудыг агуулна. Java.аплет пакетыг үүсгэх, удирдахад зайлшгүй хэрэгтэй үүргүүдийг бүхий … -40- С.Ууганбаяр
  • 41. JAVA програмчлал Java.awt : интерфэйс зохиомжлоход зориулсан GUI компонентуудыг агуулна, Button, Label г.м Java. Net : алсын сервер рүү холбох зэрэг сүлжээний үйлдлүүдэд зориулсан классуудыг агуулна. Лекц №7 Аплет гэж юу вэ? 4.1 Аплет-н тухай. Аплет бол браузер дээр ажилладаг Java програм юм. Аплет ажиллах браузер нь Java-н онцлогуудыг дэмжих ёстой. Microsoft IE, Netscape Navigator, Sun-н Hot Java зэрэг нь хамгийн өргөн тархсан Java-enabled браузерууд юм. Java програмууд нь нэг бол өгүүлэмж эсвэл аплет буй болдог. Applicatoin эсвэл аплет-г хэрэгжүүлэх сонголт нь өгөгдсөн асуудлын хувьд бүхэлдээ хөгжүүлэгч дээр төвлөрдөг. Нэгэн аплет Word wid, web дээр тавигдсан бол түүний хийж болох зүйлүүдийг хязгаарлан олон хамгаалалт тавьж болно. 4.1.1 Өгүүлэмж –ээс Аплет-ийн ялгагдах нь 1. Аплет нь удамшигчийн (аплет-г үзэж буй хүн) машин дээрхи файлуудыг дамжуулах, унших, бичих зэрэг үйлдлүүд хийж чадахгүй, хэрэв түүний ашиглаж байгаа баузер нь хамгаалалтын өндөр хязгаарлалтуудтай бол. Гэхдээ хамгаалалтын хязгаарлалтууд нь доогуур ба үл таних аплет-уудад зөвшөөрөл өгсөн үед аплет y, уншигчийн машин дээрхи файлуудыг ажиллуулж, уншиж, бичиж чадна. 2. Аплет нь ажиллаж байгаа сайтаасаа өөр ямар нэгэн сайттай харилцаж чадахгүй. 3. Аплет нь уншигчийн машинаас сангууд ба биелэх файлуудыг зэрэг програмуудыг ачаалж чадахгүй. 4. Аплет нь ажиллахын тулд браузер хэрэгтэй. Тиймээс, энэ нь өгүүлэмж-аас аплет-г биелүүлэхэд удаан байна. Аплет-д хэрэглэгдэх нийт санах ойн хэмжээ нь браузерээр шийдэгддэг харин өгүүлэмж-д ийм хязгаарлалт байхгүй. 4.1.2 Аплет-н амьдралын цикл Аплет-г яаж үүсгэдэг, яаж ажиллуулдагыг 1-р бүлэгт үзсэн. Аплет нь биелэхийн тулд HTML бүрхүүлийг шаарддаг. Өгүүлэмж нь main () програмыг агуулдаг. Аплет-д main () функц байхгүй. Аплет-д ялгаатай хугацаануудад биелж байдаг хэд хэдэн метод байдаг. Дараах зурагт аплет-н хамгийн чухал 5 методыг үзүүлэв. – init(), start(), stop (), destroy (), paint (), Аплет ачаалагдсан -41- С.Ууганбаяр