推 andy74139 :已收錄至精華區!! 06/30 10:50
課程名稱︰物件導向程式設計
課程性質︰必修
課程教師︰林軒田
開課學院:電資學院
開課系所︰資訊工程學系
考試日期(年月日)︰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