精華區beta NTU-Exam 關於我們 聯絡資訊
課程名稱︰物件導向程式設計 課程性質︰必修 課程教師︰林軒田 開課學院:電資學院 開課系所︰資訊工程學系 考試日期(年月日)︰2009 4/21 考試時限(分鐘):180 是否需發放獎勵金:是 (如未明確表示,則不予發放) 試題 : This is a closed-book exam. Any form of cheating will not be tolerated. Students can get zero scores and/or fail the class and/or be kicked out of school and/or receive other punishments for those kinds of misconducts. Both English and Traditional Chinese(if suited) are allowed for answering the questions. We do not accept any other languages. 1.Let's Go Students(20%) class Student{ static final int CSIE = 9020; static final int IM = 7050; int dept; int ID; String name; public Student(int ID) { this.ID = ID; } public static Student new_CSIE_Student(int ID){ Student s = new Student(ID); s.dept = CSIE; return s; } public void show(){ System.out.print(dept); System.out.print(",︼"); System.out.print(ID); System.out.print(",︺") System.out.println(name); } } Please wirte down the output when the /* CODE */ part is replaced by the following lines (respectively for each subproblem). If you think there is a compile error, white "compile error" or "hahaha." If you think there is a run-time error (exception), write down "run-time error" or "ohohoh." (1) System.out.println(Student.CSIE); (2) System.out.println(Student.ID); (3) System.out.println((new Student()).name); (4) System.out println((nes Student(54)).dept); (5) Student s; s.show(); (6) Student s = new Student(54); s.show(); (7) s1.show(); (8) s2.show(); (9) Student s = Student.new_CSIE_Student(62); s.name = "Luc"; s.show(); (10) Student s = null; System.out.println(s.IM); 2. Object Lifecycle(20%) Please answer the questions under//. You can assume that there is no compile nor run-time errors, and the JVM runs normally. class Person{ static int count = 0; String name; Person best_friend; public Person(String name){ this.name = name; count++; } protected void finalize() throws Throwable { count--; } } public class PersonDemo{ public static void main(String[] argv){ Person.count = 0; for(int i = 0; i < 100; i++){ Person p = new Person("" + i); } //(1): the maximum possible value of count //(2): the minimum possible value of count //Nest, assume that Person.count is at its minimum possible value Person.count = 0; Person q = null; for(int i = 0; i<100; i++){ Person p = new Person("" + i); q=p; } //(3): the maximum possible value of count //(4): the minumum possible value of count //Next, assume that Person.count is at its minimum possible value Person.count = 0; Person r = null; for(int i = 0; i < 100; i++){ Person p = new Person("" + i); p.best_friend = r; r=p; } //(5): the maximum possible value of count //(6): the minimum possible value of count //Next, assume that Person.count is at its minimum possible value Person.count = 0; Person george = new Person("George"); george.best_friend = new Person("Mary"); george.best_friend.best_friend = george; //(7): the maximum possible value of count //(8): the minimum possible value of count //Next, assume that Person.count is at its minimum possible value //Note: Person.count is not reset to 0!!! Person mary = george.best_friend; Person bob = new Person("Bob"); bob.best_friend = new Person("Mary"); mary.best_friend = george; bob.best_friend = george.best_friend; //(9): the maximum possible value of count //(10): the minimum possible value of count } } 3.Method Invocation(20%) Assume that OOPUtill.is_prime(n) returns whether the integer n is a prime (as a boolean true or false), Please answer the question under //. You can assume that there is no compile nor run-time errors, and the JVM runs normally. class CrazyPrime{ static final int MAXN = 20; static final CrazyPrime [] result = new CrazyPrime[MAXN]; int value; static CrazyPrime compute(int n, int level){ //Let's assume that 0<= n <= MAXN level++; System.out.print("l"); System.out.print(level); System.out.print("︼); System.out.print("n"); System.out.print(n); System.out.print("︺"); int res = 0; if (result[n] == null){ if (n <= 2){ res = 1; } else if (OOPUtill.is_prime(n)){ res = CrazyPrime.compute((n-1)/2, level).value; } else{ res = CrazyPrime.compute(n-1, level).value; } result[n] = new CrazyPrime(); result[n].value = res; } System.out.print("r"); System.out.print(result[n].value); System.out.print("︺"); return result[n]; } } public class CrazyPrimeDemo{ public static void main(String[] argv){ CrazyPrime c2 = CrazyPrime.compute(2, 0); System.out.println(""); //(1): Write down the output before the new line CrazyPrime c3 = CrazyPrime.compute(3, 0); System.out.println(""); //(2): Write down the output before the new line CrazyPrime c6 = CrazyPrime.compute(6, 0); System.out.println(""); //(3): Write down the output before the new line CrazyPrime c7 = CrazyPrime.compute(7, 0); System.out.println(""); //(4): Write down the output before the new line c7.compute(5, 0); System.out.println(""); //(5): Write down the output before the new line } } 4.Encapsulation(20%) /* SpokesPerson.java */ package prototype; public class SpokesPerson{ private String story; public void tell_public_story(){ } void tell_default_story(){ } protected void tell_protected_story(){ } private void tell_private_story(){ } private void talk_to_myself(){ } /* CODE1 */ } } When the /* CODE1 */ part is replaced by the following lines (respectively for each subproblem), if you think there is a compile error, please write "compile error" or "hahaha." Otherwise write "safe." (1) story = "POO︼is︼the︼best︼BBS."; (2) tell_private_story(); (3) tell_public_story(); (4) tell_protected_story(); (5) tell_default_story(); /* HeadSpokesPerson.java */ package extensions; class HeadSpokesPerson extends prototype.SpokesPerson{ public void talk_to_media(){ /* CODE2 */ } } Now, consider another java source file above. When the /* CODE2 */ part is replaced by the following lines (respectively for each subproblem), if you think there is a compile error, please write "compile error" or "hahaha." Otherwise write "safe." (6) story = "POO︼is︼the︼best︼BBS."; (7) talk_to_myself(); (8) tell_public_story(); (9) tell_protected_story(); (10) tell_default_story(); 5 Ingeritance(20%) class BBSBoardSystem { }; class BBS{ public BBSBoardSystem board_system; int ip; } class Casine{ private in n_games; } class PTTCasino extends Casino { }; class POOCasino extends PTTCasino { }; class PTTBBS extends BBS{ public PTTCasino casino; } class POOBBS extends BBS{ private POOCasino casino; } class NetBBS extends BBS{ PTTBBS ptt; POOBBS poo; } class PPPBBS extends POOBBS{ } If you know that in Java, an Object-type instance occupies B bytes of apace for its instance variables, an integer-type variable occupies 4 bytes, and a reference-type variable occupies R bytes. How many bytes does an instance of each of the following type occupy (at least)? (1) BBS (2) POOBBS (3) NetBBS (4) PTTCasino (5) BBSBoardSystem public class BBSDemo{ public static void main(String[] argv){ PTTBBS ptt1 = new PTTBBS(); PTTBBS ptt2 = new PTTBBS(); NetBBS net = new NetBBS(); BBS bbs = ptt2; net.ptt = ptt1; net.poo = new PPPBBS(); ptt1.casino = new POOCasino(); /* CODE */ } } Now, consider another java source file above. Please write down the output when the /* CODE */ part is replaced by the following lines (respectively for each subproblem). If you think there is a compile error ,write "compile error" or "hahaha." If you think there is a run-time error (exception), write down "run-time error" or "ohohoh." (6) System.out.println(ptt2 instanceof PTTBBS); (7) System.out.println(ptt1 instanceof NetBBs); (8) System.out.println(bbs instanceof POOBBS); (9) System.out.println(net.ptt.casino instanceof PTTCasino); (10) System.out.println(net.poo.casino instanceof POOCasino); -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.69.77
andy74139 :已收錄至精華區!! 06/30 10:50