ﺑﻪ ﻧﺎم ﺧﺪا
ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﭘﻴﺸﺮﻓﺘﻪ
داﻧﺸﻜﺪه م.ﻛﺎﻣﭙﻴﻮﺗﺮ ،داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ
ﻧﻤﻮﻧﻪ ﺳﻮال آزﻣﻮن ﭘﺎﻳﺎن ﺗﺮم
ﻛﻼﺳﻬﺎي ﺛﺎﺑﺖ ) (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 ﺑﺮﻧﺎﻣﻪ ﺧﻮد را ﺑﺎ
! ! ﺧﻮش ﺷﺎﻧﺲ ﺑﺎﺷﻴﺪ
اﺣﻤﺪﻳﺎن
•
© Copyright 2026 Paperzz