sample-final.pdf

‫ﺑﻪ ﻧﺎم ﺧﺪا‬
‫ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﭘﻴﺸﺮﻓﺘﻪ‬
‫داﻧﺸﻜﺪه م‪.‬ﻛﺎﻣﭙﻴﻮﺗﺮ‪ ،‬داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫ﻧﻤﻮﻧﻪ ﺳﻮال آزﻣﻮن ﭘﺎﻳﺎن ﺗﺮم‬
‫ﻛﻼﺳﻬﺎي ﺛﺎﺑﺖ )‪ (immutable‬ﻛﻼﺳﻬﺎﻳﻲ ﻫﺴﺘﻨﺪ ﻛﻪ وﺿﻴﻌﺘﺸﺎن ) داده ﻫﺎي درون آﻧﻬﺎ ( ﺑﻌﺪ از ﺳﺎﺧﺘﻪ ﺷﺪن‬
‫دﻳﮕﺮ ﺗﻐﻴﻴﺮي ﻧﻤﻲ ﻛﻨﺪ‪ .‬ﺑﻪ ﻋﺒﺎرت دﻳﮕﺮ ﺗﻀﻤﻴﻦ ﺷﺪه اﺳﺖ ﻛﻪ ﻣﺘﻐﻴﺮ ﻫﺎي درون ﻛﻼس ﭼﻪ در ﻛﻼس و ﭼﻪ در‬
‫ﺳﻠﺴﻠﻪ وراﺛﺖ ﺗﻨﻬﺎ ﻳﻜﺒﺎر ﻣﻘﺪار دﻫﻲ ﻣﻲ ﺷﻮﻧﺪ‪ .‬اﻳﻦ ﻛﻼس ﻫﺎ در ﻧﻮﺷﺘﻦ ﻣﺘﺪ ﻫﺎي ‪ hash,clone‬ﻛﺮدن ﻳﺎ‬
‫ﻫﻤﺰﻣﺎن ﺳﺎزي ﺑﺴﻴﺎر ﺧﻮش‪-‬رﻓﺘﺎر ﻫﺴﺘﻨﺪ‪ .‬در ‪ javadoc‬ﻣﻲ ﺗﻮان اﻳﻦ ﻛﻼس ﻫﺎ را ﺑﺎ ﺗﮓ ‪@is.immutable‬‬
‫ﻣﺸﺨﺺ ﻧﻤﻮد‪.‬‬
‫‪ .a‬ﻛﺎﻣﻼ ﺗﻮﺿﻴﺢ دﻫﻴﺪ ﻛﻪ ﭼﮕﻮﻧﻪ ﻣﻲ ﺗﻮان ﻳﻚ ﻛﻼس را ﺑﻪ ﺻﻮرت ‪ immutable‬ﻧﻮﺷﺖ‪.‬‬
‫‪ .b‬درﺑﺎره وﺟﻮد ﻳﺎ ﻋﺪم وﺟﻮد ‪ default constuctor‬در ﻳﻚ ﻛﻼس ‪ immutable‬ﺗﻮﺿﻴﺢ دﻫﻴﺪ‪.‬‬
‫‪ .c‬ﻳﻚ ﻛﻼس ‪ immutable‬ﺑﻪ ﻧﺎم ‪ x‬ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺳﻪ داده‬
‫; ‪int a, b‬‬
‫‪Date d‬‬
‫;‬
‫را ‪ encapsulate‬ﻧﻤﺎﻳﺪ‪ .‬ﺑﺮاي ﺳﺎزﻧﺪه از ﺗﺎﺑﻊ‬
‫{)‪public x(int a, int b, Date d‬‬
‫}‬
‫اﺳﺘﻔﺎده ﻧﻤﺎﻳﻴﺪ‪ .‬ﭘﻴﺎده ﺳﺎزي ﻛﻠﻴﻪ ﺗﻮاﺑﻊ ﻣﻮرد ﻧﻴﺎز و ﺗﻌﻴﻴﻦ دﺳﺘﺮﺳﻲ ﻣﺘﺪ ﻫﺎ و داده ﻫﺎ و ﺳﺎﻳﺮ اﻃﻼﻋﺎت ﻻزم‬
‫ﻓﺮاﻣﻮش ﻧﺸﻮد!‬
‫ﻣﻜﺎﻧﻴﺰم ”‪ “busy wait‬را ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ‪.‬‬
‫• ﻳﻚ روش ﭘﻴﺎده ﺳﺎزي آن ﺑﻪ اﻳﻦ ﺻﻮرت اﺳﺖ ﻛﻪ ﻳﻚ ‪ thread‬ﺑﺮاي ﻣﺪﺗﻲ ‪ sleep‬ﻣﻲ ﻛﻨﺪ و ﺳﭙﺲ‬
‫ﻳﻚ ‪ flag‬ﺧﺎص را ﺑﻪ ﻧﺸﺎﻧﻪ اﻳﻨﻜﻪ از ﺧﻮاب ﺑﻴﺪارﺷﺪه! ‪ true‬ﻣﻲ ﻛﻨﺪ‪ Thread .‬دوم در ﻳﻚ ﺣﻠﻘﻪ ﺑﻲ‬
‫ﻧﻬﺎﻳﺖ ﻣﺪاوﻣﺎ اﻳﻦ ‪ flag‬را ﭼﻚ ﻣﻲ ﻛﻨﺪ ) ﺗﻌﺮﻳﻒ ‪ busy wait‬از اﻳﻨﺠﺎ آﻣﺪه اﺳﺖ ( و ﻫﺮ ﺑﺎر ﻛﻪ ‪true‬‬
‫ﺷﺪ ﺑﻪ ﻛﻨﺴﻮل ﺧﺒﺮ ﻣﻲ دﻫﺪ‪.‬‬
‫• درﺑﺎره اﻳﺮاد روش ﻓﻮق ﻣﺨﺘﺼﺮاً ﺗﻮﺿﻴﺢ دﻫﻴﺪ‪ .‬ﺑﺮﻧﺎﻣﻪ ﻗﺴﻤﺖ اول را ﺑﺎ )(‪ wait‬ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ‪.‬‬
‫• راﻫﻨﻤﺎﻳﻲ ‪ :‬از ‪ inner class‬ﻫﺎ ﻧﻤﻲ ﺗﻮاﻧﻴﺪ اﺳﺘﻔﺎده ﻛﻨﻴﺪ‪ ) .‬ﭼﺮا؟ (‬
‫ﻣﺘﺪ )(‪ clone‬ﺑﺮاي ﻫﺮ ‪ object‬ﻳﻚ ﻧﺴﺨﻪ از آن را در ﻳﻚ ‪ object‬ﻛﭙﻲ ﻛﺮده و آﻧﺮا ﺑﺮ ﻣﻲ ﮔﺮداﻧﺪ‪ .‬روش‬
‫ﻣﻌﻤﻮﻟﻲ ﺑﺮاي )(‪ clone‬ﻛﺮدن ) ﻛﻪ از ﻛﻼس ‪ object‬ﺑﻪ ارث ﻣﻲ رﺳﺪ‪ ( .‬در اﺑﺘﺪا اﺿﺎﻓﻪ ﻛﺮدن واﺳﻂ‬
‫‪ Cloneable‬و ﻛﭙﻲ ﻛﺮدن داده ﺳﺎﺧﺘﺎر ﻫﺎ در ﻛﻼس ﺟﺪﻳﺪ اﺳﺖ‪ .‬روش آﺳﺎﻧﺘﺮ ) و اﻟﺒﺘﻪ ﺑﺎ ﻛﺎراﻳﻲ ﻛﻤﺘﺮ ( اﺳﺘﻔﺎده از‬
‫‪ serializable‬و ﻛﭙﻲ ﻛﺮدن ﺑﻴﺖ ﺑﻪ ﺑﻴﺖ ﻛﻼس اول در ﻛﻼس دوم اﺳﺖ‪ .‬اﻳﻦ روش را ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ‪.‬‬
‫ﻣﺘﺪ )(‪ clone‬ﺑﺎﻳﺪ ﺑﻪ ﺻﻮرت زﻳﺮ ﺑﺎﺷﺪ‪.‬‬
‫‪protected Object clone() throws CloneNotSupportedException‬‬
‫در ﻧﻬﺎﻳﺖ ﺑﺎﻳﺪ ﻧﺘﻴﺠﻪ ﻋﺒﺎرت‬
‫)(‪x.clone().getClass() == x.getClass‬‬
‫ﻫﻤﻮاره ‪ true‬ﺑﺎﺷﺪ‪.‬‬
‫ ﺑﺮاي اﻳﺠﺎد‬.‫ اﺳﺘﻔﺎده ﻣﻲ ﺷﻮد‬JEditorPane ‫ ﺑﺮ روي ﺷﻲ‬html ‫ﺑﺮﻧﺎﻣﻪ زﻳﺮ ﺑﺮاي ﺑﺎز ﻛﺮدن و رﻧﺪر ﻳﻚ ﺻﻔﺤﻪ‬
listener ‫ ﻳﻚ ﻛﻼس‬.‫ اﺳﺘﻔﺎده ﻣﻲ ﺷﻮد‬hyperlinklistener ‫ ﻫﺎ از واﺳﻂ‬Hyperlink ‫ﺣﺴﺎﺳﻴﺖ ﻧﺴﺒﺖ ﺑﻪ‬
.‫ ﺑﺮﮔﺮداﻧﻴﺪ‬createHyperLinkListener() ‫ﺑﺮاي ﻛﺪ زﻳﺮ ﺑﻨﻮﻳﺴﻴﺪ و آﻧﺮا از ﻃﺮﻳﻖ‬
public test(JEditorPane sample){
try{
URL url = null ;
String path = null ;
try{
path = "/fileAdress.html";
url = getClass().getResource(path);
}catch(Exception e){
System.err.println("Lecture file " + path + " not found!");
url = null ;
}
if(url != null) {
sample.setContentType("text/html");
sample.setPage(url);
sample.setEditable(false);
sample.addHyperlinkListener(createHyperLinkListener());
}
} catch (MalformedURLException e) {
System.out.println("Malformed URL: " + e);
} catch (Exception e) {
System.out.println("IOException: " + e);
}
}
‫ ﺗﻨﻬﺎ ﺷﺎﻣﻞ ﻣﺘﺪ‬HyperlinkListener ‫واﺳﻂ‬
void hyperlinkUpdate(HyperlinkEvent e)
.‫ را ﺑﻪ ارث ﺑﺮده اﺳﺖ‬EventObject ‫ ﻛﻼس‬HyperlinkEvent ‫ﻣﻲ ﺑﺎﺷﺪ ﻛﻪ در آن‬
. ( .‫ ) ﮔﺮاف ﺑﻪ ﺻﻮرت راﺑﻄﻪ ﺑﻴﻦ اﺷﻴﺎ ﺗﻌﻴﻴﻦ ﻣﻲ ﺷﻮد‬.‫ﺑﺮﻧﺎﻣﻪ اي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﮔﺮاﻓﻲ از اﺷﻴﺎ را درﻳﺎﻓﺖ ﻛﻨﺪ‬
addEdge( ‫ و‬addVertex(V v) ‫ﺑﺮاي اﺿﺎﻓﻪ ﻛﺮدن راس ﻫﺎ و ﻳﺎل ﻫﺎ ﻛﻼس ﮔﺮاف ﺑﺎﻳﺪ ﻣﺘﺪ ﻫﺎي‬
‫ ﺑﺮ‬.‫ داده ﺳﺎﺧﺘﺎر ﮔﺮاف را ﺑﻪ ﺻﻮرت ﻟﻴﺴﺖ ﻣﺠﺎورت ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ‬.‫ را ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ‬V v١, V v٢)
.‫روي اﻳﻦ ﮔﺮاف اﻟﮕﻮرﻳﺘﻢ ﺟﺴﺘﺠﻮي ﻋﻤﻘﻲ را ﺑﻪ ﺻﻮرت ﻣﻮازي اﺟﺮا ﻛﻨﻴﺪ‬
.‫ ﭘﻴﺎده ﺳﺎزي ﻛﻨﻴﺪ ﺗﺎ ﻫﺮ ﺷﻴﻲ را ﺑﺘﻮاﻧﻴﺪ در آن ذﺧﻴﺮه ﻛﻨﻴﺪ‬Generic ‫ﺑﺮﻧﺎﻣﻪ ﺧﻮد را ﺑﺎ‬
! ! ‫ﺧﻮش ﺷﺎﻧﺲ ﺑﺎﺷﻴﺪ‬
‫اﺣﻤﺪﻳﺎن‬
•