SlideShare uma empresa Scribd logo
1 de 19
Объект хандлагат програмчлалын хэл Java Хичээл:     CS203 Багш:Д.Энхжаргал Mongolia University of Science & Technology Reflection
Polymorphism жишээ ,[object Object]
50,53,56-д тодорхойлсон card.greeting() мөр нь хожуу холболт үүсгэнэ. Учир нь компиляцын явцад аль объектын greeting() Функц дуудагдах нь тодорхойгүй байна.,[object Object]
Object класс Асуулт: Энд алдаа заах уу? Хариулт: Алдаа заахгүй.  Адилхан
Object класс Object  класс нь Java хэлний бүх классуудын өвөг эцэг класс юм. Бид ямар нэг класс тодорхойлохдоо extends түлхүүр үг ашиглан ямар нэг классаас удамшуулсан гэсэн бичиглэлийг хийж өгсөн өгөөгүй байсан ч тухайн класс нь Object классаас далдуур удамшиж байдаг. Иймд аливаа классд Object  классын гишүүн функцууд удамшдаг. Тухайлбал: Thread-тэй ажилдаг wait(), notify(), notifyAll()-ээс гадна equals(), toString() функцуудыг нэрлэж болно. Object  классын toString() функц нь тухайн объектын классын нэрийг хэвлэх үүрэгтэй нилээд түгээмэл ашиглагддаг функц бөгөөд  Java-ийн ихэнхи классууд нь энэ функыг дахин тодорхойлдог (overrides).
Reflection  Java програмчлалын хэл нь динамик програмчлалын хэд хэдэн боломжуудыг өөртөө агуулсан хэл юм. Тэдгээрээс өөр хоорондоо харилцан хамаарал бүхий reflection ба interspection гэсэн 2 чухал ойлголт байдаг.  Reflectionхэмээх ойлголт нь програмлчлалд классыг биелэлтийн үед нь динамикаар холбож, тухайн классын гишүүн өгөгдөл, гишүүн функцууд болон байгуулагч функцуудтай динамикаар харьцах боломжийг бүрдүүлдэг. Өөрөөр хэлбэл reflection хэмээх ойлголт нь биелэлтийн өмнө сайн мэдэхгүй класстайгаа харьцан ажиллах боломжийг бүрдүүлдэг. Introspectionгэдгийг “өөрлүүгээ харах” (look inside) гэж утгачилан орчуулна. Энэ нь програм нь өөр рүүгээ эргэн харж өөрт тодорхойлогдсон класс, түүний эх класс болон түүний гишүүд, байгуулагч функцуудын талаар дэлгэрэнгүй мэдээлэл авах боломжийг бүрдүүлж өгдөг. Дээрх 2 ойлголт нь хоорондоо салшгүй холбоо хамааралтай ойлголтууд юм. Тэдгээр нь хамтдаа нийлсэнээр динамик програмчлалын бодит хэрэгжилт болно. Энэ нь заримдаа Мета-програмчлал ч гэж нэрлэгддэг. Мета-програмчлал нь аливаа нэг програм нь биелэлтийн ( runtime) явцадөөр бусад програмуудыг (эсвэл өөрийгөө ) удирдан зохион байгуулан, тэдгээрийн зохицон ажлуулах боломжийг дэмждэг. Мөнтүүнчлэн introspection нь полиморфизм хэмээх ойлголтыг өвөрмөц аргаар (ОХ бус аргаар) хэрэгжүүлдэг.
java.lang.reflectпакет дахь классыг импортлох Дэлгэрэнгүй харахыг хүссэн класс/интерфейсийнхээ нэрийг програмд 0-р аргумент болгон дамжуулах Класс/интерфейсийн тодорхойлогч public class Student {…} эсвэл public interface Cafe {…} InterfaceCafeextends University{ …} эсвэл public class Student extends Person{ …} InterfaceCafe extendsUniversity{ …} эсвэл public class Student extends Person{ …} print_method_or_constructor() гэсэн статик функцын тусламжтай байгуулагч функцуудын мэдээлэл харах print_field() гэсэн статик функцын тусламжтай гишүүн өгөгдлийн талаарх мэдээлэл харах print_method_or_constructor() гэсэн статик функцын тусламжтайгишүүн функцын талаарх мэдээлэл харах
Жишээ (Reflection): Классын гишүүдтэй танилцах Энд ашиглагдсан функцууд Class классын  ,[object Object]
getModifiers();-Тухайн класс/интерфейсийн хандалтыг тодорхойлогчийг унших
getName();-Тухайн класс/интерфейсийн нэрийг унших
getSuperclass(); - Тухайн класс/интерфейсийн эх классыг буцаах
getInterfaces();- Тухайн класс/ интерфейстэй холбогдсон интерфейсүүдийг буцаах
getDeclaredConctructors();-Тухайн классд тодорхойлогдсон байгуулагч функцуудыг буцаах
getDeclaredFileds();-Тухайн классд тодорхойлогдсон гишүүн өгөгдлүүдийг буцаах
getDeclaredMethods();-Тухайн классд тодорхойлогдсон гишүүн функцуудыг буцаах,[object Object]
Энд ашиглагдсан функцууд Class классын  ,[object Object],Field классын  ,[object Object]
getType();-Тухайн гишүүн өгөгдлийн төрлийг буцаах
getName(); - Тухайн гишүүн өгөгдлийн нэрийг буцаахMethod классын  ,[object Object]
getParameterTypes();-Тухайн гишүүн функцын парамет-рүүдийн төрлүүдийг буцаах

Mais conteúdo relacionado

Mais procurados (20)

Sw203 Lecture6 Inheritance
Sw203 Lecture6 InheritanceSw203 Lecture6 Inheritance
Sw203 Lecture6 Inheritance
 
Cs203 lecture13 composition
Cs203 lecture13 compositionCs203 lecture13 composition
Cs203 lecture13 composition
 
Java lecture5
Java lecture5Java lecture5
Java lecture5
 
SW203 Lab9
SW203  Lab9SW203  Lab9
SW203 Lab9
 
Java lecture4
Java lecture4Java lecture4
Java lecture4
 
Sw203 Lecture3 Advanced Java Program
Sw203 Lecture3 Advanced Java ProgramSw203 Lecture3 Advanced Java Program
Sw203 Lecture3 Advanced Java Program
 
CS203 Лекц02 Oop
CS203 Лекц02  OopCS203 Лекц02  Oop
CS203 Лекц02 Oop
 
Pl lecture7
Pl lecture7Pl lecture7
Pl lecture7
 
Java lecture3
Java lecture3Java lecture3
Java lecture3
 
Lecture3 4
Lecture3 4Lecture3 4
Lecture3 4
 
Java lecture2
Java lecture2Java lecture2
Java lecture2
 
Sw203 Lecture8 Interface
Sw203 Lecture8 InterfaceSw203 Lecture8 Interface
Sw203 Lecture8 Interface
 
Lec04
Lec04Lec04
Lec04
 
Gosexem asuult 09
Gosexem asuult 09Gosexem asuult 09
Gosexem asuult 09
 
Cs203 lab8
Cs203 lab8Cs203 lab8
Cs203 lab8
 
Pl lecture6
Pl lecture6Pl lecture6
Pl lecture6
 
Lecture4
Lecture4Lecture4
Lecture4
 
Ood lesson12.1 ---------
Ood lesson12.1  ---------Ood lesson12.1  ---------
Ood lesson12.1 ---------
 
Java programchlal s.uuganbayr
Java programchlal s.uuganbayrJava programchlal s.uuganbayr
Java programchlal s.uuganbayr
 
Pl lecture8
Pl lecture8Pl lecture8
Pl lecture8
 

Destaque (20)

Sw203lab8
Sw203lab8Sw203lab8
Sw203lab8
 
Video lab1-web
Video lab1-webVideo lab1-web
Video lab1-web
 
SW203 Lab10
SW203  Lab10SW203  Lab10
SW203 Lab10
 
Lab5
Lab5Lab5
Lab5
 
Лабораторийн ажил № 1
Лабораторийн ажил № 1Лабораторийн ажил № 1
Лабораторийн ажил № 1
 
Lab6 db
Lab6 dbLab6 db
Lab6 db
 
Lab10 11
Lab10 11Lab10 11
Lab10 11
 
Lab7
Lab7Lab7
Lab7
 
Sw203lab5
Sw203lab5Sw203lab5
Sw203lab5
 
Sw203lab6
Sw203lab6Sw203lab6
Sw203lab6
 
Sw203 Lab7
Sw203 Lab7Sw203 Lab7
Sw203 Lab7
 
Laboratory 14
Laboratory 14Laboratory 14
Laboratory 14
 
Lab 12
Lab 12Lab 12
Lab 12
 
Програм ба зүйрлэл
Програм ба зүйрлэлПрограм ба зүйрлэл
Програм ба зүйрлэл
 
Лабораторийн ажил № 2
Лабораторийн ажил № 2Лабораторийн ажил № 2
Лабораторийн ажил № 2
 
It101-lab9
It101-lab9It101-lab9
It101-lab9
 
S W203 Lecture8 Interface
S W203  Lecture8  InterfaceS W203  Lecture8  Interface
S W203 Lecture8 Interface
 
lab8
lab8lab8
lab8
 
U.it101 lab13
U.it101 lab13U.it101 lab13
U.it101 lab13
 
Java лаб13
Java лаб13Java лаб13
Java лаб13
 

Semelhante a Cs203 lecture 14 reflection (9)

Java lecture4
Java lecture4Java lecture4
Java lecture4
 
Lecture5 6
Lecture5 6Lecture5 6
Lecture5 6
 
3
33
3
 
33
3333
33
 
Lab 16
Lab 16Lab 16
Lab 16
 
Lecture hibernate
Lecture hibernateLecture hibernate
Lecture hibernate
 
Ood lesson6 class
Ood lesson6 classOod lesson6 class
Ood lesson6 class
 
Lecture
LectureLecture
Lecture
 
Java script xэрэглээ
Java script xэрэглээ Java script xэрэглээ
Java script xэрэглээ
 

Cs203 lecture 14 reflection

  • 1. Объект хандлагат програмчлалын хэл Java Хичээл: CS203 Багш:Д.Энхжаргал Mongolia University of Science & Technology Reflection
  • 2.
  • 3.
  • 4. Object класс Асуулт: Энд алдаа заах уу? Хариулт: Алдаа заахгүй. Адилхан
  • 5. Object класс Object класс нь Java хэлний бүх классуудын өвөг эцэг класс юм. Бид ямар нэг класс тодорхойлохдоо extends түлхүүр үг ашиглан ямар нэг классаас удамшуулсан гэсэн бичиглэлийг хийж өгсөн өгөөгүй байсан ч тухайн класс нь Object классаас далдуур удамшиж байдаг. Иймд аливаа классд Object классын гишүүн функцууд удамшдаг. Тухайлбал: Thread-тэй ажилдаг wait(), notify(), notifyAll()-ээс гадна equals(), toString() функцуудыг нэрлэж болно. Object классын toString() функц нь тухайн объектын классын нэрийг хэвлэх үүрэгтэй нилээд түгээмэл ашиглагддаг функц бөгөөд Java-ийн ихэнхи классууд нь энэ функыг дахин тодорхойлдог (overrides).
  • 6. Reflection Java програмчлалын хэл нь динамик програмчлалын хэд хэдэн боломжуудыг өөртөө агуулсан хэл юм. Тэдгээрээс өөр хоорондоо харилцан хамаарал бүхий reflection ба interspection гэсэн 2 чухал ойлголт байдаг. Reflectionхэмээх ойлголт нь програмлчлалд классыг биелэлтийн үед нь динамикаар холбож, тухайн классын гишүүн өгөгдөл, гишүүн функцууд болон байгуулагч функцуудтай динамикаар харьцах боломжийг бүрдүүлдэг. Өөрөөр хэлбэл reflection хэмээх ойлголт нь биелэлтийн өмнө сайн мэдэхгүй класстайгаа харьцан ажиллах боломжийг бүрдүүлдэг. Introspectionгэдгийг “өөрлүүгээ харах” (look inside) гэж утгачилан орчуулна. Энэ нь програм нь өөр рүүгээ эргэн харж өөрт тодорхойлогдсон класс, түүний эх класс болон түүний гишүүд, байгуулагч функцуудын талаар дэлгэрэнгүй мэдээлэл авах боломжийг бүрдүүлж өгдөг. Дээрх 2 ойлголт нь хоорондоо салшгүй холбоо хамааралтай ойлголтууд юм. Тэдгээр нь хамтдаа нийлсэнээр динамик програмчлалын бодит хэрэгжилт болно. Энэ нь заримдаа Мета-програмчлал ч гэж нэрлэгддэг. Мета-програмчлал нь аливаа нэг програм нь биелэлтийн ( runtime) явцадөөр бусад програмуудыг (эсвэл өөрийгөө ) удирдан зохион байгуулан, тэдгээрийн зохицон ажлуулах боломжийг дэмждэг. Мөнтүүнчлэн introspection нь полиморфизм хэмээх ойлголтыг өвөрмөц аргаар (ОХ бус аргаар) хэрэгжүүлдэг.
  • 7. java.lang.reflectпакет дахь классыг импортлох Дэлгэрэнгүй харахыг хүссэн класс/интерфейсийнхээ нэрийг програмд 0-р аргумент болгон дамжуулах Класс/интерфейсийн тодорхойлогч public class Student {…} эсвэл public interface Cafe {…} InterfaceCafeextends University{ …} эсвэл public class Student extends Person{ …} InterfaceCafe extendsUniversity{ …} эсвэл public class Student extends Person{ …} print_method_or_constructor() гэсэн статик функцын тусламжтай байгуулагч функцуудын мэдээлэл харах print_field() гэсэн статик функцын тусламжтай гишүүн өгөгдлийн талаарх мэдээлэл харах print_method_or_constructor() гэсэн статик функцын тусламжтайгишүүн функцын талаарх мэдээлэл харах
  • 8.
  • 11. getSuperclass(); - Тухайн класс/интерфейсийн эх классыг буцаах
  • 12. getInterfaces();- Тухайн класс/ интерфейстэй холбогдсон интерфейсүүдийг буцаах
  • 13. getDeclaredConctructors();-Тухайн классд тодорхойлогдсон байгуулагч функцуудыг буцаах
  • 14. getDeclaredFileds();-Тухайн классд тодорхойлогдсон гишүүн өгөгдлүүдийг буцаах
  • 15.
  • 16.
  • 18.
  • 19. getParameterTypes();-Тухайн гишүүн функцын парамет-рүүдийн төрлүүдийг буцаах
  • 20.
  • 21. ҮР ДҮН: ShowClass.java Reflection of Student class
  • 22. ҮР ДҮН: ShowClass.java Reflection of University interface
  • 23.
  • 24.
  • 25. Reflection хэмээх ойлголтын тусламжтай бид тэдгээр асуудлыг хялбар аргаар шийдэж болно. Reflection нь биднийг танил бус классуудтайгаа ажиллах боломжийг бүрдүүлэх бөгөөд кодын өөрчлөлтийг төвөггүйхэн хийх боломжтой болно. public class ReflectionTestClass1 { public static void main(String[] args) throws Exception { ReflectionTestClass1 test = new ReflectionTestClass1(); test.createSchool(); } private void createSchool() throws Exception { Properties prop = new Properties(); prop.load(this.getClass().getResourceAsStream("school.properties")); Object object = Class.forName("csms.sw203.school.School").newInstance(); Enumeration keys = prop.keys(); while (keys.hasMoreElements()) { String key = (String) keys.nextElement(); String value = prop.getProperty(key); String methodName = "set" + key.substring(0, 1).toUpperCase() + key.substring(1); Method method = object.getClass().getMethod(methodName, new Class[]{String.class}); method.invoke(object, new Object[]{value}); } System.out.println(object); } } Шинэ объектыг динамикаар үүсгэх String-ээс класс үүсгэх Гишүүн функцыг динамикаар тодорхойлох Функцыг динамикаар холбох Жишээ: Reflection
  • 26. createSchool()фунцыг дэлгэрэнгүй авч үзье. Дээрх 2 мөр нь CLASSPATH –аас “school.properties” текст файлыг ачаалдаг. Properties гэдэг нь Java класс юм. Түүнийг “properties” нэртэй текст файлд хадгалах бөгөөд дараах форматтай. name=value Энэхүү Properties класс нь “names” болон “values”-ийг тодорхойлох функцээр хангагдсан. this.getClass().getResourceAsStream("school.properties") гэсэн мөрөнд тухайн идэвхитэй замаас School.properties файлын агуулгыг унших Дээрх мөр нь reflection-той холбоотой 2 онцлогийг ашиглана.dynamic class loadingбаdynamic instantiation. Class.forName("csms.sw203.school.School") мөр нь JVM-д “csms.sw203.school” нэртэй пакетаас "School“ нэртэй классыг хайж олоод санах ойд ачааллах үүрэг өгнө. Үр дүнд нь динамкаар ачаалагдсан классын объектыг буцааана. Properties prop = new Properties(); prop.load(this.getClass().getResourceAsStream("school.properties")); Object object = Class.forName("csms.sw203.school.School").newInstance(); Жишээ: Reflection
  • 27. Дээрх мөрөнд объектыг динамикаар үүсгэж байна. Бид Properties файлаас хүссэн утгаа хайж олохын тулд түлхүүр (key) ашиглах шаардлагатай. Энэ түлхүүр нь Properties файл дахь name хэсэг юм. Object object = Class.forName("csms.sw203.school.School").newInstance(); Enumeration keys = prop.keys(); while (keys.hasMoreElements()) { String key = (String) keys.nextElement(); String value = prop.getProperty(key); ... ... } Жишээ: Reflection
  • 28. Дээр schoool.properties файлын агуулгыг үзүүлсэн байна. property бүрт харгалзах setter функцыг School классд тодорхойлсон. Жишээ нь. name  setName() address  setAddress() Давталтын 3 мөрөнд property key-д харгалзах функцын нэрийг гаргаж авч байна 4 мөрөнд тухайн классаас тухайн нэрт харгалзах функцын нэрийг динамикаар тодорхойлж байна 5 мөрөнд уг функцыг динамикаар холбож ажлуулж байна name=KTMC address=Sansar, Ulaanbaator, Mongolian Жишээ: Reflection Enumeration keys = prop.keys(); while (keys.hasMoreElements()) { String key = (String) keys.nextElement(); String value = prop.getProperty(key); String methodName = "set" + key.substring(0, 1).toUpperCase() + key.substring(1); Method method = object.getClass().getMethod(methodName, new Class[]{String.class}); method.invoke(object, new Object[]{value}); }
  • 29. Давталт дахь сүүлчийн 2 мөрөнд анхаарлаа хандуулъя Функц гэдэгт тухайн функцын нэрээс гадна параметрүүдийг хамтад нь авч үздэг. Хэдийгээр функцын нэр нь адил боловч параметрийн төрлөөрөө ялгаатай бол харгалзах функцыг цааш хайх шаардлага гарна. Enumeration keys = prop.keys(); while (keys.hasMoreElements()) { String key = (String) keys.nextElement(); String value = prop.getProperty(key); String methodName = "set" + key.substring(0, 1).toUpperCase() + key.substring(1); Method method = object.getClass().getMethod(methodName, new Class[]{String.class}); method.invoke(object, new Object[]{value}); } Жишээ: Reflection