SlideShare uma empresa Scribd logo
1 de 25
1
Объект хандлагатОбъект хандлагат
програмчлалын хэлпрограмчлалын хэл JavaJava
ХичээлХичээл:: SW203SW203
УлиралУлирал:: 20092009 оны хавароны хавар
БагшБагш:: Д.ЭнхжаргалД.Энхжаргал
Төрөл хувиргалт: автомат ба механик төрөл хувиргалт
Mongolia University of Science & TechnologyMongolia University of Science & Technology
2
JavaJava хэлний өгөгдлийн үндсэн төрлүүдхэлний өгөгдлийн үндсэн төрлүүд
3
 Аливаа програмчлалын хэлний хувьд төрөл хувиргалтын асуудал
яригддаг. Иймд ямар нэг програмчлалын хэл дээр амжилттай
програм бичихийн тулд тухайн хэлний төрөл хувиргах зарчмын
талаар тодорхой ойлголттой байх нь чухал.
 Java компилятор нь төрлүүдийг хооронд нь хөрвүүлэх дараах
2 хэлбэрээр хангагдсан. Үүнд:
 Автоматаар (Automathic): Хэрэв тухайн 2 төрөл нэг бүлэгт
багтаж байвал тэдгээрийг хоорондоо нийцтэй төрлүүд
(compatible types) гэж үзээд Java компилятор нь түүнийг
автоматаар хөрвүүлдэг.
 Гар аргаар (Manual): Хэрэв тухайн 2 төрөл хоорондоо
нийцгүй (incompatible) байвал төрлийг автоматаар
хөрвүүлэх боломжгүй тул хөрвүүлэлтийг гар аргаар (төрөл
хувиргалт /type cast/-ыг) хийх шаардлагатай. Мөн нийцтэй
төрлүүдийн зарим онцгой тохиолдолд мөн төрөл
хувиргалтыг гүйцэтгэнэ.
JavaJava хэлний Төрөл хөрвүүлэх зарчимхэлний Төрөл хөрвүүлэх зарчим
4
 Java хэлэнд дараах 2 хэлбэрийн өгөгдлийг тодорхойлж ашигладаг болохыг
бид мэднэ. Үүнд:
 Primitive data type энгийн буюу Өгөгдлийн Үндсэн Төрөл (ӨҮТ)
ТайлбарТайлбар:: Java хэлний ӨҮТ-д byte, short, int, long, char, float, double болон
boolean гэсэн найман үндсэн төрөл багтдаг. Эдгээр энгийн буюу үндсэн
өгөгдлийн төрлүүд нь дандан хувьсагчийг тодорхойлдог. Өгөгдлийн бүх
төрлүүд нь ашиглаж байгаа битээсээ хамааран тодорхой интервалд утга нь
хэлбэлздэг.
 Object reference data type заалт буюу Өгөгдлийн Хийсвэр Төрөл (ӨХТ)
Тайлбар:Тайлбар: Java хэл нь объект хандлагат програмчлалын хэл учраас түүнд
class, interface гэх мэтийн үүссэнүүссэн буюу ӨХТ-үүдийг өргөн ашигладаг.
 Иймд төрлийн хөрвүүлэлтийн тухай авч үзэхийн тулд бид дараах 4
хэлбэрийг ярих шаардлагатай. Үүнд:
 ӨҮТ-ийг хөрвүүлэх (conversion)
 ӨҮТ-ийг хувиргах (casting)
 ӨXТ-ийг хөрвүүлэх (conversion)
 ӨXТ-ийг хувиргах (casting)
JavaJava хэлний өгөгдлийн төрлүүдхэлний өгөгдлийн төрлүүд
((Үндсэн ойлголт сэргээх нь)
5
ӨҮТ-ийн хөрвүүлэлтӨҮТ-ийн хөрвүүлэлт (Conversion of primitives(Conversion of primitives))
 ӨҮТ-ийн хувьд хөрвүүлэлт хийхдээ дараах 3 тохиолдлыг авч
үзнэ. Үүнд:
 Утга олголт (Assignment)
 Функц дуудалт (Method call)
 Арифметик үйлдэл (Arithmetic promotion)
 ӨҮТ-ийн хувьд хийгдэх аливаа төрөл хөрвүүлэлт нь
компиляцын үед хийгддэг. Учир нь компиляцын үед тухайн
төрөл хөрвүүлэлтийг дүрмийн дагуу эсвэл дүрэм зөрчсөн
эсэхийг тогтоох бөгөөд хэрэв дүрмийн дагуу зөв хийгдээгүй
бол алдааны мэдээлэл өгнө.
 Санамж: Булийн төрлөөс бусад төрөл рүү, бусад төрлөөс
булийн төрөл рүү хөрвүүлэлт хэзээ ч хийгдэхгүй
6
Энгийн т рлийн х рв лэлт: Утга олголтө ө үүЭнгийн т рлийн х рв лэлт: Утга олголтө ө үү
 Одоо Утга олголт (Assignment)-ийг авч зье.ү
 Жишээ 1:
 int i;
 double d;
 i=10;
 d=i;
 Дээрх жишээний d=i; гэсэн мөрөнд i гэсэн int хувьсагчийн утгыг
double төрлийн d хувьсагчид олгож байна. int төрлийн өргөн нь
double төрлийн өргөнөөс ихгүй тул Java компилятор int төрлийг
double төрөл рүү автоматаар хөрвүүлнэ.
 Жишээ 2:
 double d;
 short s;
 d=1.2345;
 s=d;
 Дээрх жишээний s=d; гэсэн мөрөнд d гэсэн double хувьсагчийн
утгыг short төрлийн s хувьсагчид олгож байна. double төрлийн
өргөн нь short төрлийн өргөнөөс их тул Java компилятор алдаа
заана.
7
Компилятор энд алдаа заана !!!
double төрлийн утгыг short төрөл рүү хөрвүүлж dайна
 Т-ийн хувьд утга олгох ед х рв лэлт хийхдээ дараах д рмийгӨҮ ү ө үү ү
баримтална.
 Буллийн хувьсагчийн утгыг бусад т рлийн хувьсагчид оноохө
боломжг й.ү
 Буллийн бус хувьсагчийн утгыг р буллийн бус хувьсагчийн утгаөө
руу х рв лэх боломжтойө үү бол т нийгүү рг тг с н х рв лэлтө ө ө ө ө үүрг тг с н х рв лэлтө ө ө ө ө үү
(widening conversion)(widening conversion) гэнэ.
Жич: Энд утга олгох гэж буй т рлийн рг н нь утга олгогдох гэж буйө ө ө
т рлийн рг н с ихг й байнаө ө ө өө ү
 int i;
 double d;
 i=10;
 d=i;
 Буллийн бус хувьсагчийн утгыг өөр буллийн бус хувьсагчийн
утга руу хөрвүүлэх боломжгүй бол явцуу хөрвүүлэлтявцуу хөрвүүлэлт (narrow(narrow
conversion)conversion) гэнэ.
Жич: Энд утга олгох гэж буй төрлийн өргөн нь утга олгогдох гэж
буй төрлийн өргөнөөс их байна
 double d;
 short s;
 d=1.2345;
 s=d;
Энгийн т рлийн х рв лэлт: Утга олголтө ө үүЭнгийн т рлийн х рв лэлт: Утга олголтө ө үү
int төрлийн утгыг double төрөл рүү хөрвүүлж байна
8
 “Өргөтгөсөн хөрвүүлэлтийн үед утга олгох гэж буй төрлийн өргөн нь утга
олгогдох гэж буй төрлийн өргөнөөс ихгүй байна” гэсэн мөрдлөгийг
дэлгэрэнгүй тайлбарлъя.
 Дээрх зурагт java хэлний өгөгдлийн үндсэн төрлүүдийг битийн хэмжээнээс
нь хамааруулан зүүнээс баруун тийш жагсааж байрлуулан сумтай
шугамаар холбосон байна.
Тухайлбал: int төрөл нь byte, short, char гэсэн 3 төрлөөс том төрөл гэсэн
үг. Иймд byte, short, char төрлийн хувьсагчдыг int төрөл рүү автоматаар
хөрвүүлэх боломжтой. Иймд утга олгогдох төрлийн өргөн нь эх
төрлийнхөөс багагүй байх тохиолдолд хөрвүүлэлтийг автоматаар хийх
боломжтой болох нь харагдаж байна.
Энгийн т рлийн х рв лэлт: Утга олголтө ө үүЭнгийн т рлийн х рв лэлт: Утга олголтө ө үү
char
shortbyte
int long float double
9
 Эндээс дараах дүрмийг гаргаж болно.
 Өргөтгөсөн хөрвүүлэлтӨргөтгөсөн хөрвүүлэлт (widening conversion)(widening conversion)-ийн үед-ийн үед
 byte төрлөөс short, int, long, float, double төрөл рүү
 short төрлөөс int, long, float, double төрөл рүү
 int төрлөөс long, float, double төрөл рүү
 long төрлөөс float, double төрөл рүү
 float төрлөөс double төрөл рүү тус тус автоматаар х рв лэхө үүтус тус автоматаар х рв лэхө үү
боломжтойболомжтой
 Иймд өргөтгөсөн хөрвүүлэлтИймд өргөтгөсөн хөрвүүлэлт (widening conversion)(widening conversion)-ийн үед-ийн үед
мэдээллийн алдагдал гарахгүй гэсэн дүгнэлтэнд хүрч байна.мэдээллийн алдагдал гарахгүй гэсэн дүгнэлтэнд хүрч байна.
Энгийн т рлийн х рв лэлт: Утга олголтө ө үүЭнгийн т рлийн х рв лэлт: Утга олголтө ө үү
10
 Харин сумны эсрэг чиглэлд бол боломжгүй. Өх: int төрлийн
хувьсагчийн byte төрөл рүү хөрвүүлвэх боломжгүй. Учир нь byte
төрөл нь 1 байт, int төрөл 4 байтын хэмжээтэй тул өргөн нь бага
хэмжээтэй төрөл рүү хөрвүүлэхэд зарим орон хаягдахад хүрнэ.
Эндээс дээрх зурагны сумтай шугамны зүүн гар талд орших
төрлийг түүний баруун гар талд орших ямар ч төрөл рүү хөрвүүлэх
боломжтой. Харин эсрэгээр өгөгдлийн төрлийг түүний зүүн гар
талд орших ямарч төрөл рүү хөрвүүлэх боломжгүй байдаг тул
компилятор түүнийг алдаанд тооцдог. Алдааг засахыг тулд төрөл
хувиргалт буюу “type casting” хийнэ.
char
shortbyte
int long float double
Энгийн төрлийн хөрвүүлэлт: Утга олголтЭнгийн төрлийн хөрвүүлэлт: Утга олголт
11
 Эндээс дараах д рмийг гаргаж болно.ү
 Явцуу хөрвүүлэлтЯвцуу хөрвүүлэлт (narrow conversion)(narrow conversion)-ийн үед-ийн үед
 byte төрлөөс char төрөл рүү
 short төрлөөс byte, char төрөл рүү
 char төрлөөс byte, short төрөл рүү
 int төрлөөс byte, short, char төрөл рүү
 long төрлөөс byte, short, char, int төрөл рүү
 float төрлөөс byte, short, char, int, long төрөл рүү
 double төрлөөс byte, short, char, int, long, float төрөл рүү тус тустус тус
автоматаар хөрвүүлэх боломжгүй. Учир нь мэдээллийнавтоматаар хөрвүүлэх боломжгүй. Учир нь мэдээллийн
алдагдалд орох аюултай тул Явцуу хөрвүүлэлталдагдалд орох аюултай тул Явцуу хөрвүүлэлт (narrow(narrow
conversion)conversion)-ийн үед-ийн үед төрөл хувиргалттөрөл хувиргалт (type cast)(type cast)-ыг хийнэ.-ыг хийнэ.
 CastingCasting гэдэг нь нэг ёсондоогэдэг нь нэг ёсондоо явцуу хөрвүүлэлтийн үед мэдээллийнявцуу хөрвүүлэлтийн үед мэдээллийн
алдагдалд орох эрсдлээс сэргийлэхийг компиляторт анхааруулжалдагдалд орох эрсдлээс сэргийлэхийг компиляторт анхааруулж
буй хэрэг юм.буй хэрэг юм.
Энгийн т рлийн х рв лэлт: Утга олголтө ө үүЭнгийн т рлийн х рв лэлт: Утга олголтө ө үү
12
 Явцуу х рв лэлтө үүЯвцуу х рв лэлтө үү (narrow conversion)(narrow conversion)–ийн жишээ–ийн жишээ
short s=259;
byte b= s; // Энд компилятор алдаа заана
System.out.println(“s=”+s+”, b=”+b);
 Алдааг засахдаа т р л хувиргах йлдэл хийнэ.ө ө үАлдааг засахдаа т р л хувиргах йлдэл хийнэ.ө ө ү
short s=259;
byte b=(byte) s; // Т р л хувиргалтө ө
System.out.println(“b=”+b);
 Ийнх т р л хувиргалтыг хийхдээ дугуй хос хаалт ашиглана.үү ө өИйнх т р л хувиргалтыг хийхдээ дугуй хос хаалт ашиглана.үү ө ө
 Одоо b хувьсагч ямар утга авах вэ?Одоо b хувьсагч ямар утга авах вэ? хэрэв s хувьсагчийн утга
byte төрлийн тодорхойлогдох мужаас (256) хэтэрсэн байвал
тодорхойлогдох мужийн хамгийн их утгыг модулиар жишиж
авна. s хувьсагчийн утга 259 (хоёртоор 100000011) бөгөөд
түүнийг 256 модулиар жишихэд 3 тул b=3; болно.
Төрөл хувиргалтТөрөл хувиргалт (Casting)(Casting)
13
Зураг: short төрлийг
byte төрөлд хувиргах
Төрөл хувиргалтТөрөл хувиргалт (Casting)(Casting)
 Эндээс харахад тоо нь х рв хө ө
т рлийнх тодорхойлогдох мужаасө өө
хэтэрвэл х рв х т рлийнө ө ө
тодорхойлогдох мужийн хамгийн их
утгыг модулиар жишиж авна.
 Харин бодит тоог б хэл тоо рууү
х рв лэхдээ хэрчигдсэнө үү (transaction)
хувиргалтыг хийнэ. Х: бодит тоогӨ
б хэл тоо руу х рв лэхдээ т нийү ө үү үү
бутархай хэсгийг хэрчин хаяж б хэлү
хэсгийг нь авч ашиглах б г д угө өө
бодит тоо нь х рв х т рлийнхө ө ө өө
тодорхойлогдох мужаас хэтэрвэл м нө
л х рв х т рлийн тодорхойлогдохө ө ө
мужийн хамгийн их утгыг модулиар
жишиж авна.
14
Т-ийн х рв лэлт: Функц дуудалтӨҮ ө үүТ-ийн х рв лэлт: Функц дуудалтӨҮ ө үү
 Т р л х рв лэлтийн р нэг хэрэглээ бол функц дуудалт юм.ө ө ө үү өөТ р л х рв лэлтийн р нэг хэрэглээ бол функц дуудалт юм.ө ө ө үү өө
Энэ нь функцыг дуудахдаа зарлагдсан т рл с нь р т рлийнө өө өө өЭнэ нь функцыг дуудахдаа зарлагдсан т рл с нь р т рлийнө өө өө ө
аргументтай дуудах ед яригдана.үаргументтай дуудах ед яригдана.ү
 Дараах н хц лд функцыг дуудахдаа т ний аргументынө ө үүДараах н хц лд функцыг дуудахдаа т ний аргументынө ө үү
т рл с р т рлийн аргументтай дуудаж болдог. нд:ө өө өө ө Үүт рл с р т рлийн аргументтай дуудаж болдог. нд:ө өө өө ө Үү
дуудаж буй аргументын т р л нь уул функцын аргументынө өдуудаж буй аргументын т р л нь уул функцын аргументынө ө
т рл с рг н р ихг й байх ёстой.ө өө ө ө өө өө үт рл с рг н р ихг й байх ёстой.ө өө ө ө өө өө ү
 Жишээ нь:Жишээ нь:
 float frads=2.34567f;
 double d;
 d= Math.cos(frads);
 System.out.println("d="+d);
Math.cos() нь double төрлийн 1
аргументтай стандарт функц билээ .
Энд түүнийг float төрлийн аргументтай
дуудаж байна. float төрлийн өргөн
double төрлийн өргөнөөс ихгүй тул
төрлийг автоматаар хөрвүүлэх учраас
компилятор алдаа заахгүй
15
Энгийн т рлийн х рв лэлт: Функц дуудалтө ө үүЭнгийн т рлийн х рв лэлт: Функц дуудалтө ө үү
 Харин функцыг дуудаж буй аргументын т р л нь уул функцынө өХарин функцыг дуудаж буй аргументын т р л нь уул функцынө ө
аргументын т рл с рг н р их байвал компилятор алдаа заахө өө ө ө өө өөаргументын т рл с рг н р их байвал компилятор алдаа заахө өө ө ө өө өө
б г д энэ тохиолдолд т р л хувиргалтө өө ө өб г д энэ тохиолдолд т р л хувиргалтө өө ө ө (casting)(casting) хийнэ.хийнэ. Жишээ:Жишээ:
 class A{
 public int inc(int i){
 return i+1;
 }
 }
 public class test2{
 public static void main(String args[]){
 double d=12.0;
 int k;
 A a= new A();
 k=a.inc(d);
 System.out.println("K="+k);
 }
 }
int төрлийн 1 аргументтай
double төрлийн 1 аргументтай дуудахад
компилятор алдаа заана.
k=a.inc((int)d); болгож өөрчлөх замаар Casting хийх
16
 Т р л х рв лэлтийн р нэг хэрэглээ бол арифметикө ө ө үү өөТ р л х рв лэлтийн р нэг хэрэглээ бол арифметикө ө ө үү өө
илэрхийлэл юм. Ямар нэг илэрхийллийн р д нг хувьсагчид олгохү үилэрхийлэл юм. Ямар нэг илэрхийллийн р д нг хувьсагчид олгохү ү
ед т р л таарахг й бол хувиргалт хийдэг. нийгү ө ө ү Үүед т р л таарахг й бол хувиргалт хийдэг. нийгү ө ө ү Үү
илэрхийллийн т р л хувиргалт гэнэ.ө өилэрхийллийн т р л хувиргалт гэнэ.ө ө
 Илэрхийлэлд орсон үйлдлээс хамааран гахах утгынИлэрхийлэлд орсон үйлдлээс хамааран гахах утгын
. .нарийвчлал янз бүр айдаг Жишээ нь. .нарийвчлал янз бүр айдаг Жишээ нь
 byte a=60;
 byte b=50;
 byte c=100;
 int d=a*b/c;
 a*ba*b гэсэн завсрын үйлдлийн үр дүнгэсэн завсрын үйлдлийн үр дүн bytebyte төрлийн мужаастөрлийн мужаас
хэтэрнэ. Иймдхэтэрнэ. Иймд JavaJava хэлэнд бүххэлэнд бүх bytebyte болонболон shortshort төрлийнтөрлийн
хувьсагчид орсон операндын үр дүнг автоматаар өргөтгөнхувьсагчид орсон операндын үр дүнг автоматаар өргөтгөн
intint төрөлд хөрвүүлэн үр дүн болох 3000 гэсэн утгыг завсрынтөрөлд хөрвүүлэн үр дүн болох 3000 гэсэн утгыг завсрын
intint төрлийн хувьсагчид хадгална. Ийнхүү автомат төрөлтөрлийн хувьсагчид хадгална. Ийнхүү автомат төрөл
хувиргалтыг дээрх илэрхийллийн хувьд хэрэгжүүлж байна.хувиргалтыг дээрх илэрхийллийн хувьд хэрэгжүүлж байна.
Энгийн т рлийн х рв лэлт:ө ө үүЭнгийн т рлийн х рв лэлт:ө ө үү
ИлэрхийлэлИлэрхийлэл
17
 Java хэлэнд илэрхийллийн төрлийг өргөтгөхдөө илэрхийлэл
дэх оператор нь унар оператор уу, бинар оператор уу гэдгээс
хамаардаг.
 Byte болон short операнд орсон илэрхийллийн үр дүнг
автоматаар өргөтгөн int төрөлд хөрвүүлэхдээ дараах хэдэн
зарчмыг баримтална. Үүнд:
 Õýðýâ 2 òûí îïåðàòîð á¿õèé èëýðõèéëëèéí àëü íýã îïåðàíä íü
double áîë íºãºº îïåðàíäûã íü double òºðºë ð¿¿ ºðãºòãºíº.
 ¯ã¿é áîë õýðýâ 2 òûí îïåðàòîð á¿õèé èëýðõèéëëèéí àëü íýã
îïåðàíä íü float áîë íºãºº îïåðàíäûã íü float òºðºë ð¿¿ ºðãºòãºíº.
 ¯ã¿é áîë õýðýâ 2 òûí îïåðàòîð á¿õèé èëýðõèéëëèéí àëü
íýã îïåðàíä íü long áîë íºãºº îïåðàíäûã íü long òºðºë
ð¿¿ ºðãºòãºíº.

¯ã¿é áîë 2 îïåðàòîðûã õî¸óëàíãèé íü int òºðºë
ð¿¿ ºðãºòãºíº.
Энгийн т рлийн х рв лэлт:ө ө үүЭнгийн т рлийн х рв лэлт:ө ө үү
ИлэрхийлэлИлэрхийлэл
18
Ïðîãðàìûí double result=((f* b)+(i/c)-(d* s)); ãýñýí ìºðºíä òàéëáàð õèéå.
 (f* b) èëýðõèéëýëä b îïåðàíäûí òºðëèéã float òºð뺺ð ºðãºòãºí ¿ð ä¿í íü
float òºðºë ãàðíà.
 (i/c) èëýðõèéëýëä c îïåðàíäûí òºðëèéã int òºð뺺ð ºðãºòãºí ¿ð ä¿í íü int
òºðºë ãàðíà.
 (d* s) èëýðõèéëýëä s îïåðàíäûí òºðëèéã double òºð뺺ð ºðãºòãºí ¿ð ä¿í íü
double òºðºë ãàðíà.
Энгийн т рлийн х рв лэлт:ө ө үүЭнгийн т рлийн х рв лэлт:ө ө үү
ИлэрхийлэлИлэрхийлэл
19
Äýýðõ äýä èëýðõèéëëèéí ¿ð ä¿í áîëîõ float, int áîëîí double òºðëèéí îïåðàíäóóä
äýýð ¿éëäýë õèéõäýý float, int îïåàðàíäóóäûí íèéëáýðèéí ¿ð ä¿í float òºðºë
ãàðíà.
float, double îïåàðàíäóóäûí íèéëáýðèéí ¿ð ä¿í double òºðºë ãàðíà.
Èéíõ¿¿ result õóâüñàãч íü èëýðõèéëëèéí ýöñèéí ¿ð ä¿í áîëîõ double òºðºë
õ¿ðòýë ºðãºòãºãäàí ãàðч áàéíà.
Энгийн т рлийн х рв лэлт:ө ө үүЭнгийн т рлийн х рв лэлт:ө ө үү
ИлэрхийлэлИлэрхийлэл
20
 Заалт т рлийн дараах хэлбэр д байдаг. нд:ө үү ҮүЗаалт т рлийн дараах хэлбэр д байдаг. нд:ө үү Үү
 Клас
 Интерфейс
 Массив
 Утга олгохУтга олгох
1. Oldtype x= new Oldtype;
2. Newtype y=x; // Заалт т рлийн хувьсагчдын утга олголтө
 OldtypeOldtype нь Класс ,Интерфейс, Массив байх боломжтойгооснь Класс ,Интерфейс, Массив байх боломжтойгоос
гаднагадна NewtypeNewtype нь мөн Класс ,Интерфейс, Массив байхнь мөн Класс ,Интерфейс, Массив байх
боломжтой бөгөөд энд тэдгээрийн комбинаци болох 3*3боломжтой бөгөөд энд тэдгээрийн комбинаци болох 3*3=9=9
тохиолдлыг авч үзэх шаардлагатай.тохиолдлыг авч үзэх шаардлагатай.
Заалт т рлийн х рв лэлтө ө үүЗаалт т рлийн х рв лэлтө ө үү
Заалт т рлийн х рв лэлтө ө үүЗаалт т рлийн х рв лэлтө ө үү
OldtypeOldtype ньнь класскласс
болбол
OldtypeOldtype ньнь
интерфейсинтерфейс болбол
OldtypeOldtype ньнь
массивмассив болбол
NewtypeNewtype ньнь
класскласс болбол
OldtypeOldtype ньнь NewtypeNewtype-
ийнхаа хүү класс
байна
NewtypeNewtype ньнь ObjectObject
байх ёстойбайх ёстой
NewtypeNewtype ньнь
ObjectObject байхбайх
ёстойёстой
NewtypeNewtype ньнь
интерфейсинтерфейс
болбол
OldtypeOldtype ньнь NewtypeNewtype
интерфейсийгинтерфейсийг
хэрэгжүүлэгч байнахэрэгжүүлэгч байна
Oldtype нь Newtype
интерфейсийн дэд
интерфейс байна
NewtypeNewtype ньнь
Cloneable байхбайх
ёстойёстой
NewtypeNewtype ньнь
массивмассив болбол
Компилятор алдаа
заана
Компилятор алдаа
заана
Newtype нь
Oldtype- руугаа
автоматаар
хөрвүүлэгдэх
боломжтой.
Хуучин төрлийг шинэ төрөл рүү хөрвүүлэх нь
22
Заалт т рлийн х рв лэлтө ө үүЗаалт т рлийн х рв лэлтө ө үү
 Дээрх х снэгтээс дараах д гнэлтийг хийж болно.ү үДээрх х снэгтээс дараах д гнэлтийг хийж болно.ү ү
 Интерфейсийг
1. интерфейс рүү
2. Object класс руу хөрвүүлэх боломжтой
 Классыг
1. Класс руу автоматаар х рв лж болно. Гэхдээ хуучин т р л нь шинэө үү ө ө
т рлийнхээ х класс байна. Эндээс “Эх классын заалтаар х классынө үү үү
объектыг заалгаж болно. Харин эсрэгээр х классын заалтаар эх классынүү
объектыг заалгавал компилятор алдаа заах б г д энд т р л хувиргалтө өө ө ө
(cast)-ыг хийх шаардлагатай” гэсэн д гнэлтийг хийж болно.ү
2. Интерфейс автоматаар рүү х рв лж болно. Гэхдээ хуучин т р л нь шинэө үү ө ө
т рлийн интерфейсийг хэрэгж лэгч класс байнаө үү
 Массивыг
1. Object класс руу хөрвүүлэх боломжтой
2. Cloneable эсвэл Serialazable интерфейс рүү хөрвүүлэх боломжтой
3. Массив руу хөрвүүлэх боломжтой. Гэхдээ хуучин төрөл нь шинэ төрөл
рүүгээ автоматаар хөрвөгдөх үед л энэ нь боломжтой.
 Жишээ болгож дараах иерархийг авч зье.үЖишээ болгож дараах иерархийг авч зье.ү
Заалт т рлийн х рв лэлтө ө үүЗаалт т рлийн х рв лэлтө ө үү
Object
Animal
Bird
Implements
Flyable
Tagtaa Boljmor Haraatsai
Хуучин төрөл Tagtaa нь Bird гэсэн шинэ
төрлийнхөө хүү класс нь тул
хөрвүүлэлтийг автоматаар хийнэ
 Жишээ болгож дараах иерархийг авч зье.үЖишээ болгож дараах иерархийг авч зье.ү
Заалт т рлийн х рв лэлтө ө үүЗаалт т рлийн х рв лэлтө ө үү
Object
Animal
Bird
Implements
Flyable
Tagtaa Boljmor Haraatsai
Хуучин төрөл Bird нь Tagtaa гэсэн шинэ
төрлийнхөө хүү нь биш эх класс нь тул
компилятор алдаа заана
Асуудлыг хэрхэн шийдэх вэ???
Мөрийг tagtaa = (Tagtaa)bird; мөрөөр солих.
Ингэснээр compiletime алдаа заахгүй
боловч runtime алдаа заана
25
 мн х хуудсанд дурдагдсанӨ өмн х хуудсанд дурдагдсанӨ ө runtime errorruntime error яагаад сч байна вэ?үүяагаад сч байна вэ?үү
гэсэн асуулт тавигдана. нийг тайлбарлахын тулд дараахҮүгэсэн асуулт тавигдана. нийг тайлбарлахын тулд дараахҮү
жишээг авч зье.үжишээг авч зье.ү
ClassCastExceptionClassCastException
No error in CompileTime
RunTime Error

Mais conteúdo relacionado

Destaque

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by HubspotMarius Sescu
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 

Destaque (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

Lecture10 1239357245

  • 1. 1 Объект хандлагатОбъект хандлагат програмчлалын хэлпрограмчлалын хэл JavaJava ХичээлХичээл:: SW203SW203 УлиралУлирал:: 20092009 оны хавароны хавар БагшБагш:: Д.ЭнхжаргалД.Энхжаргал Төрөл хувиргалт: автомат ба механик төрөл хувиргалт Mongolia University of Science & TechnologyMongolia University of Science & Technology
  • 2. 2 JavaJava хэлний өгөгдлийн үндсэн төрлүүдхэлний өгөгдлийн үндсэн төрлүүд
  • 3. 3  Аливаа програмчлалын хэлний хувьд төрөл хувиргалтын асуудал яригддаг. Иймд ямар нэг програмчлалын хэл дээр амжилттай програм бичихийн тулд тухайн хэлний төрөл хувиргах зарчмын талаар тодорхой ойлголттой байх нь чухал.  Java компилятор нь төрлүүдийг хооронд нь хөрвүүлэх дараах 2 хэлбэрээр хангагдсан. Үүнд:  Автоматаар (Automathic): Хэрэв тухайн 2 төрөл нэг бүлэгт багтаж байвал тэдгээрийг хоорондоо нийцтэй төрлүүд (compatible types) гэж үзээд Java компилятор нь түүнийг автоматаар хөрвүүлдэг.  Гар аргаар (Manual): Хэрэв тухайн 2 төрөл хоорондоо нийцгүй (incompatible) байвал төрлийг автоматаар хөрвүүлэх боломжгүй тул хөрвүүлэлтийг гар аргаар (төрөл хувиргалт /type cast/-ыг) хийх шаардлагатай. Мөн нийцтэй төрлүүдийн зарим онцгой тохиолдолд мөн төрөл хувиргалтыг гүйцэтгэнэ. JavaJava хэлний Төрөл хөрвүүлэх зарчимхэлний Төрөл хөрвүүлэх зарчим
  • 4. 4  Java хэлэнд дараах 2 хэлбэрийн өгөгдлийг тодорхойлж ашигладаг болохыг бид мэднэ. Үүнд:  Primitive data type энгийн буюу Өгөгдлийн Үндсэн Төрөл (ӨҮТ) ТайлбарТайлбар:: Java хэлний ӨҮТ-д byte, short, int, long, char, float, double болон boolean гэсэн найман үндсэн төрөл багтдаг. Эдгээр энгийн буюу үндсэн өгөгдлийн төрлүүд нь дандан хувьсагчийг тодорхойлдог. Өгөгдлийн бүх төрлүүд нь ашиглаж байгаа битээсээ хамааран тодорхой интервалд утга нь хэлбэлздэг.  Object reference data type заалт буюу Өгөгдлийн Хийсвэр Төрөл (ӨХТ) Тайлбар:Тайлбар: Java хэл нь объект хандлагат програмчлалын хэл учраас түүнд class, interface гэх мэтийн үүссэнүүссэн буюу ӨХТ-үүдийг өргөн ашигладаг.  Иймд төрлийн хөрвүүлэлтийн тухай авч үзэхийн тулд бид дараах 4 хэлбэрийг ярих шаардлагатай. Үүнд:  ӨҮТ-ийг хөрвүүлэх (conversion)  ӨҮТ-ийг хувиргах (casting)  ӨXТ-ийг хөрвүүлэх (conversion)  ӨXТ-ийг хувиргах (casting) JavaJava хэлний өгөгдлийн төрлүүдхэлний өгөгдлийн төрлүүд ((Үндсэн ойлголт сэргээх нь)
  • 5. 5 ӨҮТ-ийн хөрвүүлэлтӨҮТ-ийн хөрвүүлэлт (Conversion of primitives(Conversion of primitives))  ӨҮТ-ийн хувьд хөрвүүлэлт хийхдээ дараах 3 тохиолдлыг авч үзнэ. Үүнд:  Утга олголт (Assignment)  Функц дуудалт (Method call)  Арифметик үйлдэл (Arithmetic promotion)  ӨҮТ-ийн хувьд хийгдэх аливаа төрөл хөрвүүлэлт нь компиляцын үед хийгддэг. Учир нь компиляцын үед тухайн төрөл хөрвүүлэлтийг дүрмийн дагуу эсвэл дүрэм зөрчсөн эсэхийг тогтоох бөгөөд хэрэв дүрмийн дагуу зөв хийгдээгүй бол алдааны мэдээлэл өгнө.  Санамж: Булийн төрлөөс бусад төрөл рүү, бусад төрлөөс булийн төрөл рүү хөрвүүлэлт хэзээ ч хийгдэхгүй
  • 6. 6 Энгийн т рлийн х рв лэлт: Утга олголтө ө үүЭнгийн т рлийн х рв лэлт: Утга олголтө ө үү  Одоо Утга олголт (Assignment)-ийг авч зье.ү  Жишээ 1:  int i;  double d;  i=10;  d=i;  Дээрх жишээний d=i; гэсэн мөрөнд i гэсэн int хувьсагчийн утгыг double төрлийн d хувьсагчид олгож байна. int төрлийн өргөн нь double төрлийн өргөнөөс ихгүй тул Java компилятор int төрлийг double төрөл рүү автоматаар хөрвүүлнэ.  Жишээ 2:  double d;  short s;  d=1.2345;  s=d;  Дээрх жишээний s=d; гэсэн мөрөнд d гэсэн double хувьсагчийн утгыг short төрлийн s хувьсагчид олгож байна. double төрлийн өргөн нь short төрлийн өргөнөөс их тул Java компилятор алдаа заана.
  • 7. 7 Компилятор энд алдаа заана !!! double төрлийн утгыг short төрөл рүү хөрвүүлж dайна  Т-ийн хувьд утга олгох ед х рв лэлт хийхдээ дараах д рмийгӨҮ ү ө үү ү баримтална.  Буллийн хувьсагчийн утгыг бусад т рлийн хувьсагчид оноохө боломжг й.ү  Буллийн бус хувьсагчийн утгыг р буллийн бус хувьсагчийн утгаөө руу х рв лэх боломжтойө үү бол т нийгүү рг тг с н х рв лэлтө ө ө ө ө үүрг тг с н х рв лэлтө ө ө ө ө үү (widening conversion)(widening conversion) гэнэ. Жич: Энд утга олгох гэж буй т рлийн рг н нь утга олгогдох гэж буйө ө ө т рлийн рг н с ихг й байнаө ө ө өө ү  int i;  double d;  i=10;  d=i;  Буллийн бус хувьсагчийн утгыг өөр буллийн бус хувьсагчийн утга руу хөрвүүлэх боломжгүй бол явцуу хөрвүүлэлтявцуу хөрвүүлэлт (narrow(narrow conversion)conversion) гэнэ. Жич: Энд утга олгох гэж буй төрлийн өргөн нь утга олгогдох гэж буй төрлийн өргөнөөс их байна  double d;  short s;  d=1.2345;  s=d; Энгийн т рлийн х рв лэлт: Утга олголтө ө үүЭнгийн т рлийн х рв лэлт: Утга олголтө ө үү int төрлийн утгыг double төрөл рүү хөрвүүлж байна
  • 8. 8  “Өргөтгөсөн хөрвүүлэлтийн үед утга олгох гэж буй төрлийн өргөн нь утга олгогдох гэж буй төрлийн өргөнөөс ихгүй байна” гэсэн мөрдлөгийг дэлгэрэнгүй тайлбарлъя.  Дээрх зурагт java хэлний өгөгдлийн үндсэн төрлүүдийг битийн хэмжээнээс нь хамааруулан зүүнээс баруун тийш жагсааж байрлуулан сумтай шугамаар холбосон байна. Тухайлбал: int төрөл нь byte, short, char гэсэн 3 төрлөөс том төрөл гэсэн үг. Иймд byte, short, char төрлийн хувьсагчдыг int төрөл рүү автоматаар хөрвүүлэх боломжтой. Иймд утга олгогдох төрлийн өргөн нь эх төрлийнхөөс багагүй байх тохиолдолд хөрвүүлэлтийг автоматаар хийх боломжтой болох нь харагдаж байна. Энгийн т рлийн х рв лэлт: Утга олголтө ө үүЭнгийн т рлийн х рв лэлт: Утга олголтө ө үү char shortbyte int long float double
  • 9. 9  Эндээс дараах дүрмийг гаргаж болно.  Өргөтгөсөн хөрвүүлэлтӨргөтгөсөн хөрвүүлэлт (widening conversion)(widening conversion)-ийн үед-ийн үед  byte төрлөөс short, int, long, float, double төрөл рүү  short төрлөөс int, long, float, double төрөл рүү  int төрлөөс long, float, double төрөл рүү  long төрлөөс float, double төрөл рүү  float төрлөөс double төрөл рүү тус тус автоматаар х рв лэхө үүтус тус автоматаар х рв лэхө үү боломжтойболомжтой  Иймд өргөтгөсөн хөрвүүлэлтИймд өргөтгөсөн хөрвүүлэлт (widening conversion)(widening conversion)-ийн үед-ийн үед мэдээллийн алдагдал гарахгүй гэсэн дүгнэлтэнд хүрч байна.мэдээллийн алдагдал гарахгүй гэсэн дүгнэлтэнд хүрч байна. Энгийн т рлийн х рв лэлт: Утга олголтө ө үүЭнгийн т рлийн х рв лэлт: Утга олголтө ө үү
  • 10. 10  Харин сумны эсрэг чиглэлд бол боломжгүй. Өх: int төрлийн хувьсагчийн byte төрөл рүү хөрвүүлвэх боломжгүй. Учир нь byte төрөл нь 1 байт, int төрөл 4 байтын хэмжээтэй тул өргөн нь бага хэмжээтэй төрөл рүү хөрвүүлэхэд зарим орон хаягдахад хүрнэ. Эндээс дээрх зурагны сумтай шугамны зүүн гар талд орших төрлийг түүний баруун гар талд орших ямар ч төрөл рүү хөрвүүлэх боломжтой. Харин эсрэгээр өгөгдлийн төрлийг түүний зүүн гар талд орших ямарч төрөл рүү хөрвүүлэх боломжгүй байдаг тул компилятор түүнийг алдаанд тооцдог. Алдааг засахыг тулд төрөл хувиргалт буюу “type casting” хийнэ. char shortbyte int long float double Энгийн төрлийн хөрвүүлэлт: Утга олголтЭнгийн төрлийн хөрвүүлэлт: Утга олголт
  • 11. 11  Эндээс дараах д рмийг гаргаж болно.ү  Явцуу хөрвүүлэлтЯвцуу хөрвүүлэлт (narrow conversion)(narrow conversion)-ийн үед-ийн үед  byte төрлөөс char төрөл рүү  short төрлөөс byte, char төрөл рүү  char төрлөөс byte, short төрөл рүү  int төрлөөс byte, short, char төрөл рүү  long төрлөөс byte, short, char, int төрөл рүү  float төрлөөс byte, short, char, int, long төрөл рүү  double төрлөөс byte, short, char, int, long, float төрөл рүү тус тустус тус автоматаар хөрвүүлэх боломжгүй. Учир нь мэдээллийнавтоматаар хөрвүүлэх боломжгүй. Учир нь мэдээллийн алдагдалд орох аюултай тул Явцуу хөрвүүлэлталдагдалд орох аюултай тул Явцуу хөрвүүлэлт (narrow(narrow conversion)conversion)-ийн үед-ийн үед төрөл хувиргалттөрөл хувиргалт (type cast)(type cast)-ыг хийнэ.-ыг хийнэ.  CastingCasting гэдэг нь нэг ёсондоогэдэг нь нэг ёсондоо явцуу хөрвүүлэлтийн үед мэдээллийнявцуу хөрвүүлэлтийн үед мэдээллийн алдагдалд орох эрсдлээс сэргийлэхийг компиляторт анхааруулжалдагдалд орох эрсдлээс сэргийлэхийг компиляторт анхааруулж буй хэрэг юм.буй хэрэг юм. Энгийн т рлийн х рв лэлт: Утга олголтө ө үүЭнгийн т рлийн х рв лэлт: Утга олголтө ө үү
  • 12. 12  Явцуу х рв лэлтө үүЯвцуу х рв лэлтө үү (narrow conversion)(narrow conversion)–ийн жишээ–ийн жишээ short s=259; byte b= s; // Энд компилятор алдаа заана System.out.println(“s=”+s+”, b=”+b);  Алдааг засахдаа т р л хувиргах йлдэл хийнэ.ө ө үАлдааг засахдаа т р л хувиргах йлдэл хийнэ.ө ө ү short s=259; byte b=(byte) s; // Т р л хувиргалтө ө System.out.println(“b=”+b);  Ийнх т р л хувиргалтыг хийхдээ дугуй хос хаалт ашиглана.үү ө өИйнх т р л хувиргалтыг хийхдээ дугуй хос хаалт ашиглана.үү ө ө  Одоо b хувьсагч ямар утга авах вэ?Одоо b хувьсагч ямар утга авах вэ? хэрэв s хувьсагчийн утга byte төрлийн тодорхойлогдох мужаас (256) хэтэрсэн байвал тодорхойлогдох мужийн хамгийн их утгыг модулиар жишиж авна. s хувьсагчийн утга 259 (хоёртоор 100000011) бөгөөд түүнийг 256 модулиар жишихэд 3 тул b=3; болно. Төрөл хувиргалтТөрөл хувиргалт (Casting)(Casting)
  • 13. 13 Зураг: short төрлийг byte төрөлд хувиргах Төрөл хувиргалтТөрөл хувиргалт (Casting)(Casting)  Эндээс харахад тоо нь х рв хө ө т рлийнх тодорхойлогдох мужаасө өө хэтэрвэл х рв х т рлийнө ө ө тодорхойлогдох мужийн хамгийн их утгыг модулиар жишиж авна.  Харин бодит тоог б хэл тоо рууү х рв лэхдээ хэрчигдсэнө үү (transaction) хувиргалтыг хийнэ. Х: бодит тоогӨ б хэл тоо руу х рв лэхдээ т нийү ө үү үү бутархай хэсгийг хэрчин хаяж б хэлү хэсгийг нь авч ашиглах б г д угө өө бодит тоо нь х рв х т рлийнхө ө ө өө тодорхойлогдох мужаас хэтэрвэл м нө л х рв х т рлийн тодорхойлогдохө ө ө мужийн хамгийн их утгыг модулиар жишиж авна.
  • 14. 14 Т-ийн х рв лэлт: Функц дуудалтӨҮ ө үүТ-ийн х рв лэлт: Функц дуудалтӨҮ ө үү  Т р л х рв лэлтийн р нэг хэрэглээ бол функц дуудалт юм.ө ө ө үү өөТ р л х рв лэлтийн р нэг хэрэглээ бол функц дуудалт юм.ө ө ө үү өө Энэ нь функцыг дуудахдаа зарлагдсан т рл с нь р т рлийнө өө өө өЭнэ нь функцыг дуудахдаа зарлагдсан т рл с нь р т рлийнө өө өө ө аргументтай дуудах ед яригдана.үаргументтай дуудах ед яригдана.ү  Дараах н хц лд функцыг дуудахдаа т ний аргументынө ө үүДараах н хц лд функцыг дуудахдаа т ний аргументынө ө үү т рл с р т рлийн аргументтай дуудаж болдог. нд:ө өө өө ө Үүт рл с р т рлийн аргументтай дуудаж болдог. нд:ө өө өө ө Үү дуудаж буй аргументын т р л нь уул функцын аргументынө өдуудаж буй аргументын т р л нь уул функцын аргументынө ө т рл с рг н р ихг й байх ёстой.ө өө ө ө өө өө үт рл с рг н р ихг й байх ёстой.ө өө ө ө өө өө ү  Жишээ нь:Жишээ нь:  float frads=2.34567f;  double d;  d= Math.cos(frads);  System.out.println("d="+d); Math.cos() нь double төрлийн 1 аргументтай стандарт функц билээ . Энд түүнийг float төрлийн аргументтай дуудаж байна. float төрлийн өргөн double төрлийн өргөнөөс ихгүй тул төрлийг автоматаар хөрвүүлэх учраас компилятор алдаа заахгүй
  • 15. 15 Энгийн т рлийн х рв лэлт: Функц дуудалтө ө үүЭнгийн т рлийн х рв лэлт: Функц дуудалтө ө үү  Харин функцыг дуудаж буй аргументын т р л нь уул функцынө өХарин функцыг дуудаж буй аргументын т р л нь уул функцынө ө аргументын т рл с рг н р их байвал компилятор алдаа заахө өө ө ө өө өөаргументын т рл с рг н р их байвал компилятор алдаа заахө өө ө ө өө өө б г д энэ тохиолдолд т р л хувиргалтө өө ө өб г д энэ тохиолдолд т р л хувиргалтө өө ө ө (casting)(casting) хийнэ.хийнэ. Жишээ:Жишээ:  class A{  public int inc(int i){  return i+1;  }  }  public class test2{  public static void main(String args[]){  double d=12.0;  int k;  A a= new A();  k=a.inc(d);  System.out.println("K="+k);  }  } int төрлийн 1 аргументтай double төрлийн 1 аргументтай дуудахад компилятор алдаа заана. k=a.inc((int)d); болгож өөрчлөх замаар Casting хийх
  • 16. 16  Т р л х рв лэлтийн р нэг хэрэглээ бол арифметикө ө ө үү өөТ р л х рв лэлтийн р нэг хэрэглээ бол арифметикө ө ө үү өө илэрхийлэл юм. Ямар нэг илэрхийллийн р д нг хувьсагчид олгохү үилэрхийлэл юм. Ямар нэг илэрхийллийн р д нг хувьсагчид олгохү ү ед т р л таарахг й бол хувиргалт хийдэг. нийгү ө ө ү Үүед т р л таарахг й бол хувиргалт хийдэг. нийгү ө ө ү Үү илэрхийллийн т р л хувиргалт гэнэ.ө өилэрхийллийн т р л хувиргалт гэнэ.ө ө  Илэрхийлэлд орсон үйлдлээс хамааран гахах утгынИлэрхийлэлд орсон үйлдлээс хамааран гахах утгын . .нарийвчлал янз бүр айдаг Жишээ нь. .нарийвчлал янз бүр айдаг Жишээ нь  byte a=60;  byte b=50;  byte c=100;  int d=a*b/c;  a*ba*b гэсэн завсрын үйлдлийн үр дүнгэсэн завсрын үйлдлийн үр дүн bytebyte төрлийн мужаастөрлийн мужаас хэтэрнэ. Иймдхэтэрнэ. Иймд JavaJava хэлэнд бүххэлэнд бүх bytebyte болонболон shortshort төрлийнтөрлийн хувьсагчид орсон операндын үр дүнг автоматаар өргөтгөнхувьсагчид орсон операндын үр дүнг автоматаар өргөтгөн intint төрөлд хөрвүүлэн үр дүн болох 3000 гэсэн утгыг завсрынтөрөлд хөрвүүлэн үр дүн болох 3000 гэсэн утгыг завсрын intint төрлийн хувьсагчид хадгална. Ийнхүү автомат төрөлтөрлийн хувьсагчид хадгална. Ийнхүү автомат төрөл хувиргалтыг дээрх илэрхийллийн хувьд хэрэгжүүлж байна.хувиргалтыг дээрх илэрхийллийн хувьд хэрэгжүүлж байна. Энгийн т рлийн х рв лэлт:ө ө үүЭнгийн т рлийн х рв лэлт:ө ө үү ИлэрхийлэлИлэрхийлэл
  • 17. 17  Java хэлэнд илэрхийллийн төрлийг өргөтгөхдөө илэрхийлэл дэх оператор нь унар оператор уу, бинар оператор уу гэдгээс хамаардаг.  Byte болон short операнд орсон илэрхийллийн үр дүнг автоматаар өргөтгөн int төрөлд хөрвүүлэхдээ дараах хэдэн зарчмыг баримтална. Үүнд:  Õýðýâ 2 òûí îïåðàòîð á¿õèé èëýðõèéëëèéí àëü íýã îïåðàíä íü double áîë íºãºº îïåðàíäûã íü double òºðºë ð¿¿ ºðãºòãºíº.  ¯ã¿é áîë õýðýâ 2 òûí îïåðàòîð á¿õèé èëýðõèéëëèéí àëü íýã îïåðàíä íü float áîë íºãºº îïåðàíäûã íü float òºðºë ð¿¿ ºðãºòãºíº.  ¯ã¿é áîë õýðýâ 2 òûí îïåðàòîð á¿õèé èëýðõèéëëèéí àëü íýã îïåðàíä íü long áîë íºãºº îïåðàíäûã íü long òºðºë ð¿¿ ºðãºòãºíº.  ¯ã¿é áîë 2 îïåðàòîðûã õî¸óëàíãèé íü int òºðºë ð¿¿ ºðãºòãºíº. Энгийн т рлийн х рв лэлт:ө ө үүЭнгийн т рлийн х рв лэлт:ө ө үү ИлэрхийлэлИлэрхийлэл
  • 18. 18 Ïðîãðàìûí double result=((f* b)+(i/c)-(d* s)); ãýñýí ìºðºíä òàéëáàð õèéå.  (f* b) èëýðõèéëýëä b îïåðàíäûí òºðëèéã float òºð뺺ð ºðãºòãºí ¿ð ä¿í íü float òºðºë ãàðíà.  (i/c) èëýðõèéëýëä c îïåðàíäûí òºðëèéã int òºð뺺ð ºðãºòãºí ¿ð ä¿í íü int òºðºë ãàðíà.  (d* s) èëýðõèéëýëä s îïåðàíäûí òºðëèéã double òºð뺺ð ºðãºòãºí ¿ð ä¿í íü double òºðºë ãàðíà. Энгийн т рлийн х рв лэлт:ө ө үүЭнгийн т рлийн х рв лэлт:ө ө үү ИлэрхийлэлИлэрхийлэл
  • 19. 19 Äýýðõ äýä èëýðõèéëëèéí ¿ð ä¿í áîëîõ float, int áîëîí double òºðëèéí îïåðàíäóóä äýýð ¿éëäýë õèéõäýý float, int îïåàðàíäóóäûí íèéëáýðèéí ¿ð ä¿í float òºðºë ãàðíà. float, double îïåàðàíäóóäûí íèéëáýðèéí ¿ð ä¿í double òºðºë ãàðíà. Èéíõ¿¿ result õóâüñàãч íü èëýðõèéëëèéí ýöñèéí ¿ð ä¿í áîëîõ double òºðºë õ¿ðòýë ºðãºòãºãäàí ãàðч áàéíà. Энгийн т рлийн х рв лэлт:ө ө үүЭнгийн т рлийн х рв лэлт:ө ө үү ИлэрхийлэлИлэрхийлэл
  • 20. 20  Заалт т рлийн дараах хэлбэр д байдаг. нд:ө үү ҮүЗаалт т рлийн дараах хэлбэр д байдаг. нд:ө үү Үү  Клас  Интерфейс  Массив  Утга олгохУтга олгох 1. Oldtype x= new Oldtype; 2. Newtype y=x; // Заалт т рлийн хувьсагчдын утга олголтө  OldtypeOldtype нь Класс ,Интерфейс, Массив байх боломжтойгооснь Класс ,Интерфейс, Массив байх боломжтойгоос гаднагадна NewtypeNewtype нь мөн Класс ,Интерфейс, Массив байхнь мөн Класс ,Интерфейс, Массив байх боломжтой бөгөөд энд тэдгээрийн комбинаци болох 3*3боломжтой бөгөөд энд тэдгээрийн комбинаци болох 3*3=9=9 тохиолдлыг авч үзэх шаардлагатай.тохиолдлыг авч үзэх шаардлагатай. Заалт т рлийн х рв лэлтө ө үүЗаалт т рлийн х рв лэлтө ө үү
  • 21. Заалт т рлийн х рв лэлтө ө үүЗаалт т рлийн х рв лэлтө ө үү OldtypeOldtype ньнь класскласс болбол OldtypeOldtype ньнь интерфейсинтерфейс болбол OldtypeOldtype ньнь массивмассив болбол NewtypeNewtype ньнь класскласс болбол OldtypeOldtype ньнь NewtypeNewtype- ийнхаа хүү класс байна NewtypeNewtype ньнь ObjectObject байх ёстойбайх ёстой NewtypeNewtype ньнь ObjectObject байхбайх ёстойёстой NewtypeNewtype ньнь интерфейсинтерфейс болбол OldtypeOldtype ньнь NewtypeNewtype интерфейсийгинтерфейсийг хэрэгжүүлэгч байнахэрэгжүүлэгч байна Oldtype нь Newtype интерфейсийн дэд интерфейс байна NewtypeNewtype ньнь Cloneable байхбайх ёстойёстой NewtypeNewtype ньнь массивмассив болбол Компилятор алдаа заана Компилятор алдаа заана Newtype нь Oldtype- руугаа автоматаар хөрвүүлэгдэх боломжтой. Хуучин төрлийг шинэ төрөл рүү хөрвүүлэх нь
  • 22. 22 Заалт т рлийн х рв лэлтө ө үүЗаалт т рлийн х рв лэлтө ө үү  Дээрх х снэгтээс дараах д гнэлтийг хийж болно.ү үДээрх х снэгтээс дараах д гнэлтийг хийж болно.ү ү  Интерфейсийг 1. интерфейс рүү 2. Object класс руу хөрвүүлэх боломжтой  Классыг 1. Класс руу автоматаар х рв лж болно. Гэхдээ хуучин т р л нь шинэө үү ө ө т рлийнхээ х класс байна. Эндээс “Эх классын заалтаар х классынө үү үү объектыг заалгаж болно. Харин эсрэгээр х классын заалтаар эх классынүү объектыг заалгавал компилятор алдаа заах б г д энд т р л хувиргалтө өө ө ө (cast)-ыг хийх шаардлагатай” гэсэн д гнэлтийг хийж болно.ү 2. Интерфейс автоматаар рүү х рв лж болно. Гэхдээ хуучин т р л нь шинэө үү ө ө т рлийн интерфейсийг хэрэгж лэгч класс байнаө үү  Массивыг 1. Object класс руу хөрвүүлэх боломжтой 2. Cloneable эсвэл Serialazable интерфейс рүү хөрвүүлэх боломжтой 3. Массив руу хөрвүүлэх боломжтой. Гэхдээ хуучин төрөл нь шинэ төрөл рүүгээ автоматаар хөрвөгдөх үед л энэ нь боломжтой.
  • 23.  Жишээ болгож дараах иерархийг авч зье.үЖишээ болгож дараах иерархийг авч зье.ү Заалт т рлийн х рв лэлтө ө үүЗаалт т рлийн х рв лэлтө ө үү Object Animal Bird Implements Flyable Tagtaa Boljmor Haraatsai Хуучин төрөл Tagtaa нь Bird гэсэн шинэ төрлийнхөө хүү класс нь тул хөрвүүлэлтийг автоматаар хийнэ
  • 24.  Жишээ болгож дараах иерархийг авч зье.үЖишээ болгож дараах иерархийг авч зье.ү Заалт т рлийн х рв лэлтө ө үүЗаалт т рлийн х рв лэлтө ө үү Object Animal Bird Implements Flyable Tagtaa Boljmor Haraatsai Хуучин төрөл Bird нь Tagtaa гэсэн шинэ төрлийнхөө хүү нь биш эх класс нь тул компилятор алдаа заана Асуудлыг хэрхэн шийдэх вэ??? Мөрийг tagtaa = (Tagtaa)bird; мөрөөр солих. Ингэснээр compiletime алдаа заахгүй боловч runtime алдаа заана
  • 25. 25  мн х хуудсанд дурдагдсанӨ өмн х хуудсанд дурдагдсанӨ ө runtime errorruntime error яагаад сч байна вэ?үүяагаад сч байна вэ?үү гэсэн асуулт тавигдана. нийг тайлбарлахын тулд дараахҮүгэсэн асуулт тавигдана. нийг тайлбарлахын тулд дараахҮү жишээг авч зье.үжишээг авч зье.ү ClassCastExceptionClassCastException No error in CompileTime RunTime Error