<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Code.ge Blog &#187; Java</title>
	<atom:link href="http://www.code.ge/posts/tag/java/feed" rel="self" type="application/rss+xml" />
	<link>http://www.code.ge</link>
	<description>ბლოგი ვებ პროგრამირებისა და ტექნოლოგიების შესახებ</description>
	<lastBuildDate>Mon, 03 May 2010 14:38:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Java: variables, stack and heap</title>
		<link>http://www.code.ge/posts/java-variables-stack-and-heap</link>
		<comments>http://www.code.ge/posts/java-variables-stack-and-heap#comments</comments>
		<pubDate>Tue, 22 Sep 2009 07:03:59 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[heap]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[stack]]></category>

		<guid isPermaLink="false">http://www.code.ge/?p=337</guid>
		<description><![CDATA[პრეზენტაცია Java &#8211; ს ცვლადების და მათთან დაკავშირებული საკითხების შესახებ.]]></description>
			<content:encoded><![CDATA[<p>პრეზენტაცია Java &#8211; ს ცვლადების და მათთან დაკავშირებული საკითხების შესახებ.</p>
<object width="416" height="341"><param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=cst-presentation2-090921020408-phpapp01"/><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=cst-presentation2-090921020408-phpapp01"  type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="416" height="341"></embed></object><!-- ysttest:Array
(
    [id] => 2029002&#038;doc=cst-presentation2-090921020408-phpapp01
)
-->
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/java-variables-stack-and-heap/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java: აბსტრაქტული კლასები</title>
		<link>http://www.code.ge/posts/java-abstract-classes</link>
		<comments>http://www.code.ge/posts/java-abstract-classes#comments</comments>
		<pubDate>Wed, 24 Oct 2007 11:57:18 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.code.ge/java/java-abstract-classes</guid>
		<description><![CDATA[განსხვავებით ჩვეულებრივი Java &#8211; ს კლასისგან აბსტრაქტრული კლასის ინსტანციაცია(კლასის ობიექტის შექმნა) შეუძლებელია. თავად Sun Microsystems &#8211; ის დოკუმენტაციაში აბსტრაქტული კლასის განმარტება დაახლოვებით ჟღერს შემდეგნაირად: აბსტრაქტრული კლასი ეს არის კლასი რომელიც აღწერილია როგორც abstract(მითითებული აქვს abstract მოდიფიკატორი). აბსტრაქტული კლასი შესაძლოა შეიცავდეს ან არ შეიცავდეს აბსტრაქტულ მეთოდებს. აბსტრაქტული კლასის ინსტანციაცია შეუძლებელია, თუმცა შესაძლებელია მისი მემკვიდრე კლასების შექმნა. [...]]]></description>
			<content:encoded><![CDATA[<p>განსხვავებით ჩვეულებრივი Java &#8211; ს კლასისგან აბსტრაქტრული კლასის ინსტანციაცია(კლასის ობიექტის შექმნა) შეუძლებელია. თავად Sun Microsystems &#8211; ის დოკუმენტაციაში აბსტრაქტული კლასის განმარტება დაახლოვებით ჟღერს შემდეგნაირად:</p>
<blockquote><p>აბსტრაქტრული კლასი ეს არის კლასი რომელიც აღწერილია როგორც abstract(მითითებული აქვს abstract მოდიფიკატორი). აბსტრაქტული კლასი შესაძლოა შეიცავდეს ან არ შეიცავდეს აბსტრაქტულ მეთოდებს. აბსტრაქტული კლასის ინსტანციაცია შეუძლებელია, თუმცა შესაძლებელია მისი მემკვიდრე კლასების შექმნა. </p></blockquote>
<p>რა საჭიროა ისეთი კლასი რომლის ობიექტის შექმნაც შეუძლებელია? ეს საჭიროა იმდენად რამდენადაც ნებისმიერი კლასი შესაძლოა იყოს საკმაოდ ზოგადი(აბსტრაქტული), რაც ნიშნავს იმას რომ ასეთ შემთხვევაში მიუხედავად იმისა რომ შესაძლებელია წინასწარ მეთოდების განსაზღვრა(კლასის სამუშაო ინტერფეისი) შეუძლებელია წინასწარ მოხდეს ყველა ამ მეთოდის რეალიზაცია. აბსტრაქტული კლასები ძირითადად გამოიყენება ისეთ შემთხვევებში როდესაც ვმუშაობთ მსგავსი მახასიათებლების მქონე კლასთა ჯგუფებთან, და შესაძლებელია გარკვეული საერთო მეთოდების რეალიზაცია, ხოლო ისეთი მეთოდები რომელთა რეალიზაცია დამოკიდებულია კონკრეტულ კლასზე აღიწერება როგორც აბსტრაქტული და მათ რეალიზაციაზე პასუხიმსგებლობას ეკისრებათ მემკვიდრე კლასებს(ქვე კლასები). <span id="more-84"></span></p>
<p>იგივე Sun Microsystems &#8211; ის დოკუმენტაციაში აბსტრაქტული მეთოდის განმარტება ასეთია:</p>
<blockquote><p>
აბსტრაქტული მეთოდი ეს არის მეთოდი რომელიც აღწერილია რეალიზაციის გარეშე(არ აქვს ბოლოში მითითებული {} ფრჩხილები, და მთავრდება წერტილმძიმით) და მითითებული აქვს abstract მოდიფიკატორი.</p></blockquote>
<p>აბსტრაქტული კლასი, აბსტრაქტული მეთოდით აღიწერება შემედეგნაირად:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">//აბსტრაქტულ კლასს აუცილებლად ეთითება abstract მოდიფიკატორი</span><br />
<span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000000; font-weight: bold;">class</span> MyAbstractClass <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//აბსტრაქტულ მეთოდს აუცილებლად ეთითება abstract მოდიფიკატორი&nbsp; </span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//აბსტრაქტული მეთოდი მთავრდება წერტილმძიმით ; ნაცვლად {}</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000066; font-weight: bold;">void</span> myMethod<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>მოყვანილ მაგალითში ყურადღებას იმსახურებს ორი დეტალი, ესენია: 1)<strong>abstract</strong> მოდიფიკატორი, რომელიც აუცილებელია აბსტრაქტული კლასებისა და მეთოდების განსასაზღვრად; 2) მეთოდი ნაცვლად ფიგურული ფრჩხილებისა {}, მთავრდება პირდაპირ წერტილმძიმით;</p>
<p><strong><br />
აბსტრაქტულ კლასებთან მუშაობისას უნდა გვახსოვდეს შემდეგი დეტალები:</strong></p>
<ul>
<li>თუ კლასი არის აღწერილი როგორც abstract, არ არის აუცილებელი რომ იგი შეიცავდეს აბსტრაქტულ მეთოდებს;</li>
<li>აბსტრაქტურლი კლასი შეიძლება შეიცავდეს რეალიზებულ(არა აბსტრაქტულ) მეთოდებსა და კლასის ცვლადებს;</li>
<li>თუ კლასი შეიცავს თუნდაც ერთ abstract მეთოდს მაშინ თავად კლასიც უნდა იყოს აღწერილი როგორც abstract;</li>
<li>abstract მეთოდი ყოველთვის მთავრდება წერტილმძიმით ნაცვლად ფიგურული ფრჩხილებისა;</li>
<li>abstract მეთოდს უნდა გააჩნდეს public, protected ან ნაგულისხმევი წვდომის მოდიფიკატორი, private მოდიფიკატორის გამოყენება დაუშვებელი და შეუძლებელია;</li>
<li>შეუძლებელია აბსტრაქტული კლასისა და/ან მეთოდის აღწერა როგორც final;</li>
<li>კონკრეტული კლასი რომელიც არის მემკვიდრე აბსტრაქტული კლასისა, უნდა იყოს აღწერილი როგორც abstract თუ იგი არ ახდენს რომელიმე აბსტრაქტული მეთოდის რეალიზაციას;</li>
<li>
აბსტრაქტული კლასის ინსტანციაცია(ობიექტის შექმნა) შეუძლებელია;</li>
</ul>
<p>მიუხედავად იმისა რომ შეუძლებელია აბსტრაქტული კლასის ობიექტის შექმნა, სავსებით დასაშვებია რომ აბსტრაქტული კლასი იყოს სხვა ნებისმიერი კლასის მემკვიდრე, და ასევე მისი მეშვეობით შესაძლებელია ნებისმიერი ინტერფეისის რეალიზაცია. თუმცა საგულისხმოა ის ფაქტი რომ ინტერფეისის რეალიზაციისას, ჩვეულებრივი არა აბსტრაქტული კლასისაგან განსხვავებით აბსტრაქტულ კლასში არ არის აუცილებელი ინტერფეისის მეთოდების რეალიზაცია.</p>
<p>მაგალითად კლასების ასეთი გამოყენება სავსებით დასაშვებია:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">//SomeClass არის აბსტრაქტურლი</span><br />
<span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000000; font-weight: bold;">class</span> SomeClass <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000066; font-weight: bold;">void</span> implementMe<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<br />
<span style="color: #666666; font-style: italic;">//RegularClass არის ჩვეულებრივი არა აბსტრაქტურლი კლასი</span><br />
<span style="color: #666666; font-style: italic;">//იგი მემკვიდრეა SomeClass აბსტრაქტურლი კლასისა</span><br />
<span style="color: #000000; font-weight: bold;">class</span> RegularClass <span style="color: #000000; font-weight: bold;">extends</span> SomeClass <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//SomeClass აბსტრაქტურლი კლასის აბსტრაქტული implementMe() მეთოდის რეალიზაცია</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">void</span> implementMe<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//rest of code here</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<br />
<span style="color: #666666; font-style: italic;">//MyAbstractClass არის აბსტრაქტურლი კლასი, რომელიც მემკვიდრეა RegularClass არა აბსტრქტული კლასისა</span><br />
<span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000000; font-weight: bold;">class</span> MyAbstractClass <span style="color: #000000; font-weight: bold;">extends</span> RegularClass <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #666666; font-style: italic;">//აბსტრაქტული მეთოდი</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000066; font-weight: bold;">void</span> myMethod<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ასევე სავსებით დასაშვებია შემდეგი სახის კოდის დაწერა:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">//ინტერფეისი Movable</span><br />
<span style="color: #000000; font-weight: bold;">interface</span> Movable <span style="color: #009900;">&#123;</span> <br />
&nbsp; <span style="color: #000066; font-weight: bold;">void</span> move<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//MyAbstractClass აბსტრაქტული კლასი</span><br />
<span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000000; font-weight: bold;">class</span> MyAbstractClass <span style="color: #000000; font-weight: bold;">implements</span> Movable <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #666666; font-style: italic;">//კლასი ცარიელია, მასში არაფერი არ არის რეალიზებული</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>თუ დააკვირდებით კოდს, დაინახავთ რომ MyAbstractClass რეალიზაციას უკეთებს Movable ინტერფეისს, თუმცა მასში არ არის ინტერფეისის move() მეთოდის არანაირი რეალიზაცია. ეს დასაშვებია რამდენადაც ინტერფეისის ყველა მეთოდი არაცხადად აბსტრაქტულია, ხოლო რადგან რეალიზაციის კლასი(MyAbstractClass) ამ შემთხვევაში არის აბსტრაქტული შესაძლებელია ინტერფეისის მეთოდების ხელუხლებლად დატოვება. თუმცა უნდა აღინიშნოს ის ფაქტი რომ ნებისმიერი არა აბსტრაქტული მემკვიდრე MyAbstractClass კლასისა ვალდებულია move() მეთოდის რეალიზაციაზე.</p>
<p>აბსტრაქტული კლასის გამოყენების კლასიკური მაგალითია გეომეტრიული ფიგურების ხატვა. ამისათვის საჭიროა ერთი ზოგადი(აბსტრაქტული) კლასის აღწერა რომელსაც გარდა საერთო მახასიათებლებისა ექნება აბსტრაქტული მეთოდიბი. ამ მეთოდების რეალიზაციის კოდი დამოკიდებული იქნება კონკრეტულ ფიგურაზე, მაგალითად:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">//ზოგადი GraphicObject კლასი</span><br />
<span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000000; font-weight: bold;">class</span> GraphicObject <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//ცვლადები კოორდინატთა ღერძისათვის</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> x, y<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//რეალიზებული არა აბსტრაქტული მეთოდი რომელსაც შეუძლია ფიგურისათვის პოზიციის შეცვლა</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">void</span> moveTo<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> newX, <span style="color: #000066; font-weight: bold;">int</span> newY<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//აბსტრაქტული მეთოდი ფიგურის დასახატად</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000066; font-weight: bold;">void</span> draw<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//აბსტრაქტული მეთოდი ფიგურის ზომის შესაცვლელად</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000066; font-weight: bold;">void</span> resize<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//კლასი Circle (წრეწირი) რომელიც არის აბსტრაქტული GraphicObject კლასის მემკვიდრე</span><br />
<span style="color: #000000; font-weight: bold;">class</span> Circle <span style="color: #000000; font-weight: bold;">extends</span> GraphicObject <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//აბსტრაქტული მეთოდის რეალიზაცია</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">void</span> draw<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//დახატვის ალგორითმი განსხვავდება წრეწირისათვის</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//აბსტრაქტული მეთოდის რეალიზაცია</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">void</span> resize<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//ზომის შეცვლის კოდი განსხვავდება წრეწირისათვის</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//კლასი Rectangle (მართკუთხედი) რომელიც არის აბსტრაქტული GraphicObject კლასის მემკვიდრე</span><br />
<span style="color: #000000; font-weight: bold;">class</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Arectangle+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Rectangle</span></a> <span style="color: #000000; font-weight: bold;">extends</span> GraphicObject <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//აბსტრაქტული მეთოდის რეალიზაცია</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">void</span> draw<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//დახატვის ალგორითმი განსხვავდება მართკუთხედისათვის</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//აბსტრაქტული მეთოდის რეალიზაცია</span><br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">void</span> resize<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//ზომის შეცვლის კოდი განსხვავდება მართკუთხედისათვის</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>მაგალითი ძალიან მარტივია, იგი შედგება ერთი აბსტრაქტული GraphicObject  კლასისაგან, და ორი კონკრეტული რეალიზაციის კლასისაგან Circle და Rectangle. კოდიდან მარტივი მისახვედრია თუ რა უპირატესობას გვაძლევს ამ შემთხვევაში აბსტრაქტული კლასის გამოყენება. გამომდინარე იქედან რომ გეომეტრიულ ფიგურებს მეტნაკლებად მსგავსი ან საერთო მახასიათებლები გააჩნიათ, შესაძლებელია მათი ერთ მშობელ კლასში აღწერა/რეალიზაცია, თუმცა ისეთი მეთოდები როგორიცაა draw და resize შეუძლებელია რომ ყოველი ფიგურისათვის იყოს საერთო. სწორედ ეს მეთოდებია აღწერილი როგორც აბსტრქტული მშობელ GraphicObject კლასში, და მათი რეალიზაცია დამოკიდებულია კონკრეტულ გეომეტრიულ ფიგურაზე. თუმცა მთავარი უპირატესობა ასეთი მიდგომისა არის ის რომ სამუშაო ინტერფეისი ყოველი ფიგურისათვის არის აბსოლუტურად ერთგვაროვანი, და ნებისმიერი ვინც კი იცის ფიგურებთან მუშაობის კლასის მეთოდების შესახებ მარტივად შეძლებს კონკრეტული რეალიზაციის კლასის ობიექტის გამოყენებას ისე რომ მისთვის აბსოლუტურად უმნიშვნელო იქნება: 1) თვითონ კონკრეტული რეალიზაციის კლასის ობიექტის ტიპი; 2) გრაფიკული მეთოდების რეალიზაციის დეტალები;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/java-abstract-classes/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Java: ინტერფეისები</title>
		<link>http://www.code.ge/posts/java-interfaces</link>
		<comments>http://www.code.ge/posts/java-interfaces#comments</comments>
		<pubDate>Wed, 24 Oct 2007 08:46:20 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.code.ge/java/java-interfaces</guid>
		<description><![CDATA[interface(ინტერფეისი) ჯავას ერთერთი ყველაზე მნიშვნელოვანი დეტალია. თავად სიტყვა ინტერფეისი საუკეთესოდ აღწერს მის დანიშნულებას, თუმცა უფრო კონკრეტულ მაგალითად შეგვიძლია განვიხილოთ თავად კლასი და კალსის ობიექტი. რამდენადაც ვიცით ურთიერთქმედება კლასებთან და კლასის ობიექტებთან ხდება მათში განსაზღვრული მეთოდების მეშვეობით, ამ შემთხვევაში შეგვიძლია ვთქვათ რომ ის მეთოდები რომლის მეშვეობითაც ვმუშაობთ ობიექტთან არის ამ ობიექტის ინტერფეისი. მაგალითად თუ გვაქვს კლასი: [...]]]></description>
			<content:encoded><![CDATA[<p><strong>interface(ინტერფეისი)</strong> ჯავას ერთერთი ყველაზე მნიშვნელოვანი დეტალია. თავად სიტყვა <strong>ინტერფეისი</strong> საუკეთესოდ აღწერს მის დანიშნულებას, თუმცა უფრო კონკრეტულ მაგალითად შეგვიძლია განვიხილოთ თავად კლასი და კალსის ობიექტი. </p>
<p>რამდენადაც ვიცით ურთიერთქმედება კლასებთან და კლასის ობიექტებთან ხდება მათში განსაზღვრული მეთოდების მეშვეობით, ამ შემთხვევაში შეგვიძლია ვთქვათ რომ ის მეთოდები რომლის მეშვეობითაც ვმუშაობთ ობიექტთან არის ამ ობიექტის ინტერფეისი.<span id="more-83"></span></p>
<p>მაგალითად თუ გვაქვს კლასი:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> MyClass <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> doSomething<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> myString <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;doing&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>myString <span style="color: #339933;">+</span> <span style="color: #0000ff;">&quot; something&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ხოლო შემდეგ ამ კლასს თუ გამოვიყენებთ სხვა ნებისმიერ კლასში:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> SomeOtherClass <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; MyClass myClass <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MyClass<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; myClass.<span style="color: #006633;">doSomething</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>შედეგად მივიღებთ &#8220;doing something&#8221; სტრიქონს:</p>
<pre>
doing something
</pre>
<p>ამ შემთხვევაში უბრალოდ გამოყენებულ იქნა MyClass კლასის doSomething() მეთოდი, სწორედ ამ მეთოდზე შეგვიძლია ვთქვათ რომ ეს არის კლასის ინტერფეისი, რადგან მისი მეშვეობით ვმუშაობთ კლასთან. ასევე საგულისხმოა ის დეტალი რომ კლიენტისათვის(ამ შემთხვევაში SomeOtherClass &#8211; ის main მეთოდი) აბსოლუტურად უმნიშვნელოა doSomething() მეთოდის რეალიზაციის დეტალები, ასეთ შემთხვევაში საკმარისია მხოლოდ იმის ცოდნა რომ doSomething მეთოდი არსებობს და მასზე წვდომა გაგვაჩნია.</p>
<p>თუმცა პროგრამირებაში ხშირად არის ისეთი მომენტები როდესაც საჭიროა ინტერფეისის წინასწარ აღწერა. როდესაც ავღწერთ ინტერფეისს, რეალურად ხდება განსაზღვრა იმისა თუ <strong><i>რა</i></strong> შეუძლია კლასს, მაგრამ ამ შემთხვევაში არ განისაზღვრება ის თუ <strong><i>როგორ </i></strong>მოხდება ამ შესაძლებლობის რეალიზაცია. ინტერფეისი არის ერთგვარი <strong><em>კონტრაქტი</em></strong> კლასისათვის.</p>
<p>მაგალითად თუ ავღწერთ ინტერფეისს სახელად Movable (მოძრავი), და მასში განვსაზღვრავთ მეთოდებს move(), moveUp(), moveDown(), ნებისმიერი კლასი რომელიც მოახდენს ამ ინტეფეისის რეალიზაციას ვალდებული იქნება ჩამოთვლილი მეთოდების რეალიზაციაზე &#8211; ეს ნიშნავს რომ კლასი ეთანხმება კონტრაქტს.</p>
<p>იმ შემთხვევაში თუ გვინდა რომ რომელიმე კლასი გახდეს Movable, ამისათვის საკმარისია Movable ინტერფეისის რეალიზაცია(იმპლემენტაცია), რაც გამოიხატება იმაში რომ კლასში უნდა მოხდეს Movable ინტერფეისში აღწერილი move(), moveUp(), moveDown() მეთოდების რეალიზაცია.</p>
<p>თავად ინტერფეისი აღიწერება შემდეგნაირად:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">interface</span> Movable <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> move<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> moveUp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> moveDown<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>მაგალითიდან ნათლად ჩანს რომ ინტერფეისში განვსაზღვრეთ მხოლოდ მეთოდები ტანის გარეშე. ანუ ავღწერეთ ის თუ <strong><em>რა</em></strong> არის შესაძლებელი, მაგრამ მეთოდების რეალიზაცია(ანუ <strong><em>როგორ</em> </strong>) ცალსახად უნდა მოხდეს კლასში, მაგალითად:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> MyMovableClass <span style="color: #000000; font-weight: bold;">implements</span> Movable <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> move<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;just moving&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> moveUp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;now moving UP&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> moveDown<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;and now moving DOWN&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>MyMovableClass კლასი ახორციელებს Movable ინტერფეისის რეალიზაციას. ამის მითითება ხდება <strong>implemenets</strong> გასაღები სიტყვის გამოყენებით. საგულისხმოა ის ფაქტი რომ განსხვავებით მემკვიდრეობისაგან სადაც <strong>extends </strong> ის შემდეგ შეგვიძლია მივუთითოთ მხოლოდ ერთი კლასი, <strong>implemenets</strong> &#8211; ის შემთხვევაში შეგვიძლია ჩამოვთვალოთ რამდენიმე ინტერფეისი. მაგალითად:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">calss SomeClass <span style="color: #000000; font-weight: bold;">implements</span> Movable, OtherInterface, OneMoreInterface <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">//rest of code here</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>როდესაც საჭიროა ინტერფეისის რეალიზაცია, ეს ნიშნავს იმას რომ ვეთანხმებით ინტერფეისის მიერ განსაზღვრულ კონტრაქტს. რითიც ვალდებულებას ვიღებთ ინტერფეისში განსაზღვრული ყველა მეთოდის რეალიზაციაზე, და ნებისმიერი ვისთვისაც კი ცნობილია თუ <strong><em>რას</em></strong> აკეთებს ინტერფეისი(იცის თუ რა მეთოდებია განსაზღვრული, მაგრამ ამავდროულად აბსოლუტურად უმნიშვნელოა თუ <strong><em>როგორ</em></strong> არის მეთოდები რეალიზებული), მარტივად შეუძლია გამოიძახოს კონკრეტული <strong>რეალიზაციის კლასის</strong> ობიექტის მეთოდები &#8211; <strong>გამოიყენოს კლასის ინტერფეისი</strong>.</p>
<p><strong>კონკრეტული რეალიზაციის კლასი</strong>, ეს არის კლასი რომელიც იღებს ვალდებულებას(ეთანხმება კონტრაქტს) რომ მასში მოხდება ინტერფეისის ყველა მეთოდის რელიზაცია. იმისათვის რომ კლასს ვუწოდოთ <strong>რეალიზაციის კლასი</strong>, იგი უნდა აკმაყოფილებდეს შემდეგ პირობებს:</p>
<ul>
<li>
იგი არ უნდა იყოს abstract;</li>
<li>მასში უნდა იყოს რეალიზებული ინტერფეისში/ინტერფეისებში განსაზღვრული ყველა მეთოდი;</li>
</ul>
<p><strong>რა უნდა გვახსოვდეს ინტერფეისების შესახებ?</strong></p>
<p>პირველ რიგში ინტერფეისი შეგვიძლია განვიხილოთ როგორც ნამდვილი აბსტრაქტული კლასი. აბსტრაქტული კლასის აბსტრაქტული მეთოდების მსგავსად, ინტერფეისში აღიწერება მეთოდები რეალიზაციის გარეშე, თუმცა აბსტრაქტული კლასისაგან განსხვავებით მასში შეუძლებელია ჩვეულებრივი მეთოდების აღწერა. ინტერფეისისათვის დამახასიათებელი წესები და შეზღუდვები მოყვანილია ქვემოთ:</p>
<ul>
<li>
ინტერფეისი არაცხადად არის abstract აბსტრაქტული და მისი აღწერისას არ არის საჭირო abstract &#8211; ის მითითება;</li>
<li>ინტერფეისის ყველა მეთოდი არაცხადად არის public და abstract. რაც ნიშნავს იმას რომ არ არის საჭირო ამ მოდიფიკატორების მითითება მეთოდების აღწერისას, რადგან ისინი მაინც ყოველთვის არიან public და abstract;</li>
<li>მეთოდების აღწერისას დაუშვებელია private და protected წვდომის მოდიფიკატორების გამოყენება, რადგან ყველა მეთოდი აუცილებლად უნდა იყოს public;</li>
<li>ინტერფეისში აღწერილი ნებისმიერი ცვლადი უნდა იყოს public, static და final. რაც ნიშნავს იმას რომ ინტერფეისში შესაძლებელია მხოლოდ კონსტანტების აღწერა;</li>
<li>
შეუძლებელია static(სტატიკური) მეთოდების აღწერა;</li>
<li>
რადგან ინტერფეისის ყველა მეთოდი არის abstract(აბსტრაქტული), შეუძლებელია მათი აღწერა როგორც final;</li>
<li>შესაძლებელია რომ ინტერფეისი იყოს, სხვა ინტერფეისების მემკვიდრე(extends &#8211; ის შემდეგ შესაძლებელია ერთი ან მეტი ინტერფეისის მითითება);</li>
<li>
შეუძლებელია რომ ინტერფეისი იყოს მემკვიდრე ჩვეულებრივი ან აბსტრაქტული კლასისა;</li>
<li>ინტერფეისის მეშვეობით შეუძლებელია სხვა ინტერფეისის(ინტერფეისების) რეალიზაცია. ანუ ჩაწერა interface MyInterface implements AnotherInterface {} დაუშვებელი და შეუძლებელია;</li>
<li>ინტერფეისი უნდა აღიწეროს interface გასაღები სიტყვის მეშვეობით;</li>
</ul>
<p><strong><br />
ინტერფეისის აღწერის მაგალითები</strong></p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">//ინტერფეისი ნაგულისხმევი წვდომის მოდიფიკატორით</span><br />
<span style="color: #000000; font-weight: bold;">interface</span> Movable <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #666666; font-style: italic;">//rest of code here</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//ინტერფეისი public წვდომის მოდიფიკატორით</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">interface</span> Movable <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #666666; font-style: italic;">//rest of code here</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//ინტერფეისი abstract მოდიფიკატორით</span><br />
<span style="color: #666666; font-style: italic;">//ინტერფეისი public წვდომის მოდიფიკატორით</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000000; font-weight: bold;">interface</span> Movable <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #666666; font-style: italic;">//rest of code here</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ინტერფეისი აღწერა დასაშვებია ზემოთ ჩამოთვლილი ნებისმიერი სახით. თუმცა უნდა გვახსოვდეს რომ, <strong>ინტერფეისის არწერისას abstract მოდიფიკატორის მითითება აბსოლუტურად ზედმეტია რადგან ინტერფეისი არაცხადად და აუცილებლად არის abstract.</strong> public წვდომის მოდიფიკატორის მითითება კი უნდა მოხდეს საჭიროებისა და აუცილებლობის მიხედვით.</p>
<p><strong><br />
ინტერფეისის მეთოდების აღწერის მაგალითები</strong></p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">//ინტერფეისი მეთოდების ნაგულისხმევი მოდიფიკატორებით (public abstract)</span><br />
<span style="color: #000000; font-weight: bold;">interface</span> Movable <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">void</span> move<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">void</span> moveUp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">void</span> moveDown<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//ინტერფეისი public მეთოდების აღწერით</span><br />
<span style="color: #000000; font-weight: bold;">interface</span> Movable <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> move<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> moveUp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> moveDown<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//ინტერფეისი public abstract მეთოდების აღწერით</span><br />
<span style="color: #000000; font-weight: bold;">interface</span> Movable <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000066; font-weight: bold;">void</span> move<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000066; font-weight: bold;">void</span> moveUp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000066; font-weight: bold;">void</span> moveDown<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//ინტერფეისი abstract public მეთოდების აღწერით</span><br />
<span style="color: #000000; font-weight: bold;">interface</span> Movable <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> move<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> moveUp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">abstract</span> <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> moveDown<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>მაგალითში ნაჩვენებია ერთი და იგივე ინტერფეისის აღწერის სხვადასხვა ხერხები, ყველა ნაჩვენები აღწერა სწორია და დასაშვები, მიუხედავად განსხვავებული აღწერისა ყველა ინტერფეისი არის აბსოლუტურად იდენტური. თუმცა <strong>მიუხედავად იმისა რომ მოყვანილ მაგალითებში გამოვიყენეთ public და abstract მოდიფიკატორები, მათი გამოყენება აბსოლუტურად არასაჭიროა რადგან ინტერფეისის ყველა მეთოდი ნაგულისხმევად არის public და abstract.</strong></p>
<p>ინტერფეისებთან მუშაობის დროს ასევე მნიშვნელოვანია გვახსოვდეს რომ ინტერფეისი შესაძლებელია იყოს სხვა ინტერფეისისა ან ინტერფეისების მემკვიდრე. მაგალითად შესაძლებელია Movable ინტერფეისის მსგავსი მოდიფიკაცია:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">//UpMovable ინტერფეისი</span><br />
<span style="color: #000000; font-weight: bold;">interface</span> UpMovable <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">void</span> moveUp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//DownMovable ინტერფეისი</span><br />
<span style="color: #000000; font-weight: bold;">interface</span> DownMovable <span style="color: #009900;">&#123;</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">void</span> moveDown<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;">//Movable ინტერფეისი, რომელიც არის UpMovable და DownMovable ინტერფეისების მემკვიდრე</span><br />
<span style="color: #000000; font-weight: bold;">interface</span> Movable <span style="color: #000000; font-weight: bold;">extends</span> UpMovable, DownMovable <span style="color: #009900;">&#123;</span>&nbsp; <br />
&nbsp; <span style="color: #000066; font-weight: bold;">void</span> move<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>მაგალითში ნაჩვენებია აღნიშნული მემკვიდრეობის შესაძლებლობის რეალიზაცია, სადაც Movable ინტერფეისის აღწერისას extends გასაღები სისტყვის შემდეგ მითითებულია ორი ახალი UpMovable და DownMovable ინტერფეისების ჩამონათვალი. ასეთ შემთხვევაში ნებისმიერ კლასი რომელიც შეეცდება Movable ინტერფეისის რეალიზაციას უკვე ვალდებული იქნება მოახდინოს არა მხოლოდ move() მეთოდის რეალიზაცია(რომელიც აღწერილია Movable ინტერფეისში), არამედ იგი ვალდებული იქნება ასევე მოახდინოს moveUp() და moveDown() მეთოდების რეალიზაცია რომლებიც განსაზღვურლია შესაბამის ინტერფეისებში. რეალიზაციის მაგალითი:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> InterfaceTest <span style="color: #000000; font-weight: bold;">implements</span> Movable <span style="color: #009900;">&#123;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666; font-style: italic;">//implement moveUp() method</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> moveUp<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//rest of code here</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666; font-style: italic;">//implement moveDown() method</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> moveDown<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//rest of code here</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #666666; font-style: italic;">//implement move() method</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> move<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//rest of code here</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ამ შემთხვევაში InterfaceTest კლასში რეალიზებული ყველა ინტერფეისის მეთოდი. რადგან კალსის აღწერისას მითითებულია რომ ეს კლასი რეალიზაციას უკეთებს Movable ინტერფეიის, ხოლო თავად ეს ინტერფეისი არის მემკვიდრე UpMovable და DownMovable ინტერფეისებისა, ეს კლასი ვალდებულია რომ მასში მოხდეს ყველა ინტერფეისის მეთოდის რეალიზაცია, წინააღმდეგ შემთხვევაში კლასი არ დაკომპილირდება.</p>
<p><strong><br />
ასევე მნიშვნელოვანი და აუცილებელია, რომ კლასში მეთოდების რეალიზაციისას აუცილებლად უნდა მიეთითოს <em>public</em> წვდომის მოდიფიკატორი, რადგან ინტერფეისი ყველა მეთოდი არაცხადად(და აუცილებლად) არის <em>public</em>.</strong></p>
<p><strong><br />
კონსტანტური ცვლადების აღწერა ინტერფეისში</strong></p>
<p>როგორც ზემოთ აღინიშნა ინტერფეისში დასაშვებია მხოლოდ კონსტანტური ცვლადების აღწერა, რაც ნიშნავს იმას რომ ყველა აღწერილი ცვლადი უნდა იყოს აუცილებლად <strong>public, static და final</strong>. <strong>მაგრამ რამდენადაც ლაპარაკი გვაქვს ინტერფეისში ცვლადების აღწერაზე ეს ნიშნავს იმას რომ არ არის აუცილებელ ცვლადს მივუთითოთ public, static და final მოდიფიკატორები მისი აღწერის დროს</strong>. გამომდინარე აქედან შეგვიძლია დავწერთო შემდეგი მაგალითი:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">interface</span> Movable <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//კონსტანტის აღწერა ყველა მოდიფიკატორის მითითებით </span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> NUMBER_ONE <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//კონსტანტის აღწერა public მოდიფიკატორის გარეშე</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> NUMBER_TWO <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//კონსტანტის აღწერა public მოდიფიკატორის გარეშე</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> NUMBER_THREE <span style="color: #339933;">=</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//კონსტანტის აღწერა final მოდიფიკატორის გარეშე</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">int</span> NUMBER_FOUR <span style="color: #339933;">=</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//კონსტანტის აღწერა public და final მოდიფიკატორების გარეშე</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">int</span> NUMBER_FIVE <span style="color: #339933;">=</span> <span style="color: #cc66cc;">5</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//კონსტანტის აღწერა public და static მოდიფიკატორების გარეშე</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">final</span> <span style="color: #000066; font-weight: bold;">int</span> NUMBER_SIX <span style="color: #339933;">=</span> <span style="color: #cc66cc;">6</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//კონსტანტის აღწერა public, static და final მოდიფიკატორების გარეშე</span><br />
&nbsp; <span style="color: #000066; font-weight: bold;">int</span> NUMBER_SEVEN <span style="color: #339933;">=</span> <span style="color: #cc66cc;">7</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>მოყვანილ მაგალითში ინტერფეისში აღწერილია შვიდი კონსტანტა სხვადასხვა მოდიფიკატორების მითითებით. მიუხედავად იმისა რომელ მოდიფიკატორს მივუთითებთ ან გამოვტოვებთ ნებისმიერ შემთხვევაში ყველა კონსტანტა მაინც იქნება public static და final.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/java-interfaces/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ინიციალიზაციის მიმდევრობა Java &#8211; ში</title>
		<link>http://www.code.ge/posts/initialization-order-in-java</link>
		<comments>http://www.code.ge/posts/initialization-order-in-java#comments</comments>
		<pubDate>Tue, 03 Apr 2007 07:47:12 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.code.ge/java/initialization-order-in-java</guid>
		<description><![CDATA[ინიციალიზაცია ჯავაში საკმაოდ ნიუანსური და ერთი შეხედვით საკმაოდ რთული საკითხია, თუმცა სინამდვილეში ყველაფერი ზედმეტად მარტივი და ლოგიკურია. ინიციალიზაცია იყოფა რამდენიმე ნაწილად და ყოველთვის ერთი და იგივე მიმდევრობით სრულდება მიუხედავად კონკრეტული იერარქიის სიღრმისა და სირთულისა. პირველ რიგში მნიშვნელოვანია ვიცოდეთ თუ როგორ ხდება კლასების ჩატვირთვა ამ ენაში. ჯავაში კლასები იტვირთება დინამიურად საჭიროების მიხედვით და ეს ხდება მხოლოდ [...]]]></description>
			<content:encoded><![CDATA[<p>ინიციალიზაცია ჯავაში საკმაოდ ნიუანსური და ერთი შეხედვით საკმაოდ რთული საკითხია, თუმცა სინამდვილეში ყველაფერი ზედმეტად მარტივი და ლოგიკურია. ინიციალიზაცია იყოფა რამდენიმე ნაწილად და ყოველთვის ერთი და იგივე მიმდევრობით სრულდება მიუხედავად კონკრეტული იერარქიის სიღრმისა და სირთულისა.</p>
<p>პირველ რიგში მნიშვნელოვანია ვიცოდეთ თუ როგორ ხდება კლასების ჩატვირთვა ამ ენაში. ჯავაში კლასები იტვირთება დინამიურად საჭიროების მიხედვით და ეს ხდება მხოლოდ ერთხელ. </p>
<p>რა დროს იტვირთება კლასი? კლასის ჩატვირთვა ხდება მხოლოდ მაშინ როდესაც მივმართავთ მის რომელიმე სტატიკურ წევრს(იგულისხმება რომ ასეთ წევრს უნდა გააჩნდეს შესაბამისი წვდომის მოდიფიკატორი რათა მასზე წვდომა იყოს შესაძლებელი). გარდა კლასის ჩვეულებრივი სტატიკური ცვლადებისა და მეთოდებისა უნდა აღინიშნოს რომ კლასის კონსტრუქტორიც ასევე არის სტატიკური(თუმცა არაცხადად, რადგან მას არ ესაჭიროება static გასაღები სიტყვის მითითება). გამომდინარე აქედან შეგვიძლია ვთქვათ რომ კლასის ობიექტის შექმნისას როდესაც new ოპერატორის შემდეგ მივმართავთ სასურველი კლასის კონსტრუქტორს(მაგ. TestClass t = new TestClass()), სინამდვილეში მივმართავთ კლასის სტატიკურ წევრს და იმ შემთხვევაში თუ კლასი ჯერ არ არის ჩატვირთული ხდება მისი ჩატვირთვა.<span id="more-53"></span></p>
<p>ზოგადად მიჩნეულია რომ კლასის კონსტრუქტორი არის ისეთი წევრი რომელიც აუცილებლად სრულდება პირველად(რადგან იგი იძახება პირველი) ვიდრე შესრულდება კოდის სხვა ნაწილი, თუმცა ეს ასე არ არის. (იხ. <a href="/java/constructors-in-java">კონსტრუქტორების დეტალები</a>)</p>
<p>იმისათვის რათა უფრო დეტალურად გავიგოთ ინიციალიზაციის მიმდევრობა საჭიროა გამოვყოთ ამ პროცესში მონაწილე ყოველი ნაწილი.</p>
<h3>1) კლასის სტატიკური ცვლადების ინიციალიზაცია</h3>
<p>კლასის სტატიკურ ცვლადებს ენიჭებათ საწყისი მნიშვნელობები(თუ ცხადად არ არის მითითებული რაიმე კონკრეტული მნიშვნელობა)</p>
<h3>2) კლასის სტატიკური ინიციალიზაციის ბლოკები</h3>
<p>სტატიკური ინიციალიზაციის ბლოკები სრულდება მხოლოდ ერთხელ კლასის ჩატვირთვისას და იმ მიმდევრობით რა მიმდევრობითაც არიან ასეთი ბლოკები განსაზღვრული კლასში(იხ. <a href="/java/static-variables-and-methods">სტატიკური ცვლადები და მეთოდები</a>)</p>
<h3>3) კლასის ცვლადების ინიციალიზაცია</h3>
<p>კლასის ცვლადებს ენიჭებათ საწყისი მნიშვნელობები(თუ ცხადად არ არის მითითებული რაიმე კონკრეტული მნიშვნელობა) კლასის ყოველი ახალი ობიექტის შექმნისას</p>
<h3>4) კლასის ინიციალიზციის ბლოკები</h3>
<p>კლასის ინიციალიზაციის ბლოკები სრულდება კლასის ყოველი ახალი ობიექტის შექმნისას იმ მიმდევრობით რა მიმდევრობითაც არიან ასეთი ბლოკები განსაზღვრული კლასში.</p>
<h3>5) კონსტრუქტორები</h3>
<p>კონსტრუქტორი შესრულდება მხოლოდ მაშინ როდესაც დასრულდება ყველა ზემოთ ჩამოთვლილი ინიციალიზაციის ეტაპი.</p>
<p>ჩამოთვლილი ეტაპები გარდა იმისა რომ ვრცელდება კონკრეტულ ერთ კლასზე &#8211; ასევე ვრცელდება კლასების მთელ იერარქიაზე რა სიღრმისაც არ უნდა იყოს იერარქია ინიციალიზაციის პროცესი შესრულდება ზევიდან(იერარქიის სათავიდან) ქვევით და ზუსთად ზემოთ აღწერილი მიმდევრობით</p>
<p>ქვემოთ ნაჩვენებია მარტივი იერარქია რომელიც შედგება ორი TestParent და TestChild კლასისგან, სადაც TestChild კლასი არის TestParent კლასის მემკვიდრე. ორივე კლასში გამოყენებულია ყველა ტიპის ინიციალიზაციის ბლოკი და ასევე კონსტრუქტორები. მესამე InitTest კლასი გამოიყენება ინიციალიზაციის მიმდევრობის ტესტირებისათვის.</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;height:300px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> TestParent <span style="color: #009900;">&#123;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> str<span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000066; font-weight: bold;">int</span> t<span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #008000; font-style: italic; font-weight: bold;">/**<br />
&nbsp; &nbsp;* Static initialization block<br />
&nbsp; &nbsp;*/</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; str <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;TestParent Class Static Initialization&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>str<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #008000; font-style: italic; font-weight: bold;">/**<br />
&nbsp; &nbsp;* Initialization block<br />
&nbsp; &nbsp;*/</span><br />
&nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; t <span style="color: #339933;">=</span> <span style="color: #cc66cc;">24</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;TestParent Class Initialization block: int t = &quot;</span> <span style="color: #339933;">+</span> t<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #008000; font-style: italic; font-weight: bold;">/**<br />
&nbsp; &nbsp;* Test Class Constructor<br />
&nbsp; &nbsp;*/</span><br />
&nbsp; TestParent<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;TestParent Class Constructor: int t = &quot;</span> <span style="color: #339933;">+</span> t<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">class</span> TestChild <span style="color: #000000; font-weight: bold;">extends</span> TestParent <span style="color: #009900;">&#123;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #008000; font-style: italic; font-weight: bold;">/**<br />
&nbsp; &nbsp;* Private static variable<br />
&nbsp; &nbsp;*/</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> str<span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #008000; font-style: italic; font-weight: bold;">/**<br />
&nbsp; &nbsp;* Static initialization block<br />
&nbsp; &nbsp;*/</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; str <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;TestChild Class Static Initialization&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>str<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #008000; font-style: italic; font-weight: bold;">/**<br />
&nbsp; &nbsp;* Initialization block<br />
&nbsp; &nbsp;*/</span><br />
&nbsp; <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;TestChild Class Initialization block&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #008000; font-style: italic; font-weight: bold;">/**<br />
&nbsp; &nbsp;* TestOne Class Constructor<br />
&nbsp; &nbsp;*/</span><br />
&nbsp; TestChild<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;TestChild Class Constructor&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> test<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;TestChild's static test method&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> InitTest <span style="color: #009900;">&#123;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #008000; font-style: italic; font-weight: bold;">/**<br />
&nbsp; &nbsp; &nbsp;* Create TestChild class instance<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> TestChild<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #008000; font-style: italic; font-weight: bold;">/**<br />
&nbsp; &nbsp; &nbsp;* Invoce TestChild class' static test method<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//TestChild.test();</span><br />
<br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>კოდის დაკომპილირებისა და გაშვების შემდეგ<strong> new TestChild();</strong> გამოსახულების შესრულების შემდეგ მივიღებთ ქვემოთ ნაჩვენებ შედეგს:</p>
<pre>TestParent Class Static Initialization
TestChild Class Static Initialization
TestParent Class Initialization block: int t = 24
TestParent Class Constructor: int t = 24
TestChild Class Initialization block
TestChild Class Constructor</pre>
<p>თუ გავაანალიზებთ შედეგს დავინახავთ რომ ინიციალიზაცია იერარქიაში ხდება ზევიდან ქვევით, მიუხედავად იმისა რომ  <strong> new TestChild();</strong> გამოსახულება ქმნის TestChild კლასის ობიექტის, პირველად მისი მშობელი TestParent კლასის ყველა ინიციალიზაციის ბლოკი სრულდება, შემდეგ სრულდება მშობელი კლასის კონსტრუქტორი ხოლო უკვე შემდეგ სრულდება თვით TestChild კლასის ინიციალიზაციის ბლოკები და ბოლოს კი კონსტრუქტორი.</p>
<p>თუ გავაკომენტარებით <strong> new TestChild();</strong> გამოსახულებას და შევასრულებთ მხოლოდ <strong>TestChild.test();</strong> გამოსახულებას შედეგი იქნება შემდეგი სახის:</p>
<pre>TestParent Class Static Initialization
TestChild Class Static Initialization
TestChild's static test method</pre>
<p>რადგან ამ შემხვევაში გამოვიძახეთ TestChild კლასის სტატიკური test() მეთოდი ამ შემთხვევაში მოხდა იერარქიაში არსებული მხოლოდ სტატიკური წევრების ინიციალიზაცია და ასევე სტატიკური ინიციალიზაციის ბლოკების შესრულება, თუმცა ზუსტად იგივე მიმდევრობით რა მიმდევრობითაც ეს პირველ შემთხვევაში განხორციელდა.</p>
<p>რის გამო გამოიყენება ინიციალიზაციის ასეთი მიმდევორბა ჯავაში? მიზეზი ამისა მარტივია და სავსებით ლოგიკური. როდესაც ვიყენებთ რომელიმე კლასს რომელიც არის გარკვეული იერარქიის ნაწილი, გარდა ამ კლასის ჩატვირთვისა და ინიციალიზაციისა ასევე იტვირთება(თუ არ არის ჩატვირთული) და ინიციალიზირდება იერარქიაში ამ კლასის ზემოთ მდგომი ყველა კლასი, გამომდინარე იქიდან რომ იერარქიის სირთულის დ სიღრმის განსაზღვრა წინასწარ შეუძლებელია(ამის არანაირი საჭიროებაც არ არსებობს) მნიშვნელოვანი დეტალია ის რომ თითოეული კლასი იქმნება გარკვეული მიზნით და სავსებით ბუნებრივია რომ ასეთ კლასებს შეიძლება გააჩნდეთ მათთვის დამახასიათებელი მდგომარება, ხოლო მდგომარეობა განისაზღვრება კლასის ცვლადების მნიშვნელობებით. იმ შემთხვევაში თუ არ მოხდება ზევიდან ქვევით ყველა კლასის სწორი ინიციალიზაცია იერარქიაში ქვემოთ მდგომი კლასის მუშაობის სისწორე თავისთავად კითხვის ნიშნის ქვეშ დგება, რაც სავსებით ბუნებრივსა და ლოგიკურს ხდის კლასების ინიციალიზაციის ასეთ მიმდევრობას.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/initialization-order-in-java/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Quercus &#8211; PHP in Java</title>
		<link>http://www.code.ge/posts/quercus-php-in-java</link>
		<comments>http://www.code.ge/posts/quercus-php-in-java#comments</comments>
		<pubDate>Wed, 28 Mar 2007 13:08:45 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.code.ge/java/quercus-php5-java-implementation</guid>
		<description><![CDATA[აჟიტირებული ვარ სრული ამ სიტყვის მნიშნველობით&#8230; ასეთ რამეს მართლა არ ველოდი და ხელი მქონდა დიდი ხანია ჩაქნეული&#8230; ამასწინათ იკას ბლოგზე ვნახე პოსტი სათაურით: Breakthrough: Java Implementation of PHP5 თავისთავად დამაინტერესა(რატომღაც), დღეს გამოვნახე დრო და გავტესტე&#8230; სიმართლე უნდა ითქვას შედეგმა ყოველგვარ მოლოდინს გადააჭარბა&#8230; PHP და Java ერთად? რაოდენ ირონიულადაც არ უნდა ჟღერდეს თურმე ეს შესაძლებელია. რა [...]]]></description>
			<content:encoded><![CDATA[<p>აჟიტირებული ვარ სრული ამ სიტყვის მნიშნველობით&#8230; ასეთ რამეს მართლა არ ველოდი და ხელი მქონდა დიდი ხანია ჩაქნეული&#8230; ამასწინათ <a href="http://www.freshblurbs.com">იკას ბლოგზე</a> ვნახე პოსტი სათაურით: <a href="http://www.freshblurbs.com/breakthrough-java-implementation-php5"><strong>Breakthrough: Java Implementation of PHP5</strong></a> თავისთავად დამაინტერესა(რატომღაც), დღეს გამოვნახე დრო და გავტესტე&#8230; სიმართლე უნდა ითქვას შედეგმა ყოველგვარ მოლოდინს გადააჭარბა&#8230;</p>
<p>PHP და Java ერთად? რაოდენ ირონიულადაც არ უნდა ჟღერდეს თურმე ეს შესაძლებელია. რა საჭიროა? მიჭირს კონკრეტული მაგალითის მოყვანა, თუმცა გავიხსენებ ერთი წლის წინანდელ შემთხვევას როდესაც ერთერთი მეგა კომპანიის(არა ქართული) რეპორტინგის სისტემაზე  მუშაობისას როცა სკრიპტინგი აღმოჩნდა საჭირო(ამას გააჩნდა საფუძვლიანი მიზეზი) როგორ ვნატრობდი რომ <a href="http://groovy.codehaus.org/">Groovy</a> &#8211; ის ნაცვლად PHP &#8211; ზე შემძლებოდა წერა&#8230; თუმცა ამის შესაძლებლობა მაშინ არ მომეცა. </p>
<p>მიუხედავად იმისა რომ ეს ძრავი ჯერ არ მუშაობს ბევრისათვის კარგად ნაცნობ Tomcat &#8211; ზე მიმაჩნია რომ არც ეს არის შორეული პერსპექტივა&#8230; რაც შეეხება ტესტირების შედეგებს&#8230;<br />
<span id="more-51"></span></p>
<p>პირველ რიგში ამისათვის საჭიროა Resin Server &#8211; ი, რომელიც კარგად არის ნაცნობი Java დეველოპერებისათვის და იგი შეგიძლიათ გადმოწეროთ შემდეგი მისამართიდან: <a href="http://www.caucho.com/download/index.xtp">Resin Pro 3.1.0 Download</a>. </p>
<p>ასევე საჭიროა JDK 5 ან უფრო მაღალი ვერსია, მისი ინსტალაციის ინსტრუქცია შეგიძლიათ <a href="http://education.sapikhvno.com/tiki/tiki-index.php?page=%E1%83%AF%E1%83%90%E1%83%95%E1%83%90%E1%83%A1+%E1%83%98%E1%83%9C%E1%83%A1%E1%83%A2%E1%83%90%E1%83%9A%E1%83%90%E1%83%AA%E1%83%98%E1%83%98%E1%83%A1+%E1%83%98%E1%83%9C%E1%83%A1%E1%83%A2%E1%83%A0%E1%83%A3%E1%83%A5%E1%83%AA%E1%83%98%E1%83%90">ნახოთ ამ მისმართზე</a>.</p>
<p>Resin &#8211; ის გადმოწერის შემდეგ საჭიროა მისი დეარქივაცია, ჩემს შემთხვევაში ეს გავაკეთე <strong>C:\web\resin</strong> მისამართზე. მეტი ინსტალაციისათვის არაფერი არ არის საჭირო. სერვერის გასაშვებად საკმარისია <strong>httpd.exe</strong> ფაილის გაშვება, ხოლო http://localhost:8080/ მისამართის გახსნის შემდეგ დავინახავთ შესაბამის გვერდს რომელიც გვატყობინებს რომ Resin დასტარტულია.</p>
<p>როგორ გავუშვათ PHP სკრიპტი? ამისათვის საკმარისია <strong>C:\web\resin\webapps\ROOT</strong> კატალოგში შევქმნათ კატალოგი სასურველი სახელით, ჩემს შემთხვევაში კატალოგს დავარქვი test. შემდეგ ახლად შექმნილ კატალოგში უნდა შევქმნათ WEB-INF კატალოგი და მასში მოვათავსოთ <strong>web.xml </strong> ფაილი და ჩავწეროთ მასში შემდეგი ინსტრუქციები:</p>
<pre>
&lt;web-app xmlns="http://caucho.com/ns/resin"&gt;
  &lt;servlet-mapping url-pattern="*.php" servlet-class="com.caucho.quercus.servlet.QuercusServlet"&gt;
    &lt;init&gt;
      &lt;script-encoding&gt;iso-8859-1&lt;/script-encoding&gt;
    &lt;/init&gt;
  &lt;/servlet-mapping&gt;
&lt;/web-app&gt;
</pre>
<p>ეს არის და ეს ახალი ვებ აპლიკაციის კონფიგურაცია დასრულებულია და შეგვიძლია შევუდგეთ PHP &#8211; ზე წერას. test კატალოგში გააკეთეთ ჩვეულებრივი index.php ფაილი, ტესტირებისათვის შეგიძლიათ გამოიყენოთ შემდეგი კოდი:</p>
<div class="codecolorer-container php blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> Test <span style="color: #009900;">&#123;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$test</span><span style="color: #339933;">;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">test</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;this is test&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; static <span style="color: #000000; font-weight: bold;">function</span> runTest<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">&quot;This is static method&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getVar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">test</span><span style="color: #339933;">;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
&nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> testArrayList<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//create ArrayList object</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$list</span> <span style="color: #339933;">=</span> java<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;java.util.ArrayList&quot;</span><span style="color: #339933;">,</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span>1<span style="color: #339933;">,</span> 2<span style="color: #339933;">,</span> 3<span style="color: #339933;">,</span> 4<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//add instance of class Test into arraylist</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$list</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Test<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//create another ArrayList instance</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$l1</span> <span style="color: #339933;">=</span> java<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;java.util.ArrayList&quot;</span><span style="color: #339933;">,</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Test Array List&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//add $l1 to $list arraylist object</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$list</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">add</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$l1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">//output object</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;pre&gt;'</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/print_r"><span style="color: #990000;">print_r</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$list</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; <br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000088;">$t</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Test<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000088;">$t</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">testArrayList</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$t</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getVar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">echo</span> Test<span style="color: #339933;">::</span><span style="color: #004000;">runTest</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>კოდის მუშაობის შედეგი შეგიძლიათ შემოწმოთ http://localhost:8080/test/index.php მისამართზე. როგორც მაგალითიდან ჩანს ჩვეულებრივ PHP &#8211; ს კოდთან გვაქვს საქმე რომელიც ისევე ჩვეულებრივად მუშაობს Resin &#8211; ზე როგორც იმუშავებდა PHP5/Apache2 ტანდემის შემთხვევაში, თუმცა ყურადღება უნდა მივაქციოთ <strong>testArrayList</strong> მეთოდს რომელიც უშუალოდ მუშაობს Java &#8211; ს ArrayList კლასთან.</p>
<p>java() ფუნქციის მეშვეობით შეგვიძლია ნებისმიერი Java &#8211; ს კლასის ობიექტის შექმნა და შემდეგ უკვე მისი გამოყენება PHP კოდში, როგორც მაგალითშია ნაჩვენები ამ ფუნქციას პირველ პარამეტრად გადაეცემა სასურველი Java კლასი, ხოლო შემდეგ პარამეტრებად პარამეტრები Java კლასის კონსტრუქტორის. (საგულისხმოა ის დეტალი რომ Quercus ავტომატურად ახორციელებს Java ობიექტების PHP ობიექტებად გარდაქმნას და პირიქით საჭიროების შემთხვევაში)</p>
<p>java() ფუნქციის მიერ დაბრუნებული ობიექტი შეგვიძლია გამოვიყენოთ ისევე როგორც ამას გავაკეთებდით Java &#8211; ში. მაგალითად: <strong>$list->add(new Test());</strong> ამ შემთხვევაში <strong>add</strong> არის ArrayList კლასის მეთოდი. გამომდინარე იქიდან რომ ArrayList არის კონტეინერი მისი იტერაცია შეგვიძლია PHP &#8211; ს foreach ოპერატორის გამოყენებით.</p>
<p>დამატებითი დეტალებისთვის დოკუმენტაცია იხილეთ შესაბამის მისამართებზე:<br />
<a href="http://www.caucho.com/resin-3.1/index.xtp"><strong>Resin Documentaion</strong></a><br />
<a href="http://www.caucho.com/resin-3.1/index.xtp"><strong>Quercus Documentaion</strong></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/quercus-php-in-java/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Singleton პატერნი &#8211; Java</title>
		<link>http://www.code.ge/posts/singleton-pattern-java</link>
		<comments>http://www.code.ge/posts/singleton-pattern-java#comments</comments>
		<pubDate>Fri, 23 Feb 2007 02:16:49 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=9</guid>
		<description><![CDATA[ყველა სახელმძღვანელო რომელიც წამიკითხავს იწყება სწორედ ამ პატერნის აღწერით, რაც უდავოდ გამოწვეულია იმით რომ იგი წარმოადგენს ყველაზე მარტივს არსებულ პატერნებს შორის. ამ პატერნის გამოყენებით შესაძლებელია კონკრეტული ტიპის(კლასის) ერთი და მხოლოდ ერთი ობიექტის (ეგზემპლარის) შექმნა რომელიც გამოყენებული იქნება გლობალურად გარკვეულ კონტექსტში. ზოგიერთ პროგრამირების ენაში (მაგ. C, PHP) არსებობს ე.წ. გლობალური ცვლადის ცნება, რომლის ინიციალიზაციაც ხდება ფუნქციებისა [...]]]></description>
			<content:encoded><![CDATA[<p>ყველა სახელმძღვანელო რომელიც წამიკითხავს იწყება სწორედ ამ პატერნის აღწერით, რაც უდავოდ გამოწვეულია იმით რომ იგი წარმოადგენს ყველაზე მარტივს არსებულ პატერნებს შორის.<span id="more-9"></span></p>
<p>ამ პატერნის გამოყენებით შესაძლებელია კონკრეტული ტიპის(კლასის) ერთი და მხოლოდ ერთი ობიექტის (ეგზემპლარის) შექმნა რომელიც გამოყენებული იქნება გლობალურად გარკვეულ კონტექსტში. ზოგიერთ პროგრამირების ენაში (მაგ. C, PHP) არსებობს ე.წ. გლობალური ცვლადის ცნება, რომლის ინიციალიზაციაც ხდება ფუნქციებისა და კლასების კონტექსტ მიღმა და მისი გამოყენება შესაძლებელია ნებისმიერ ფუნქციასა თუ კლასში. მიუხედავად იმისა რომ Java არ არის აღჭურვილი მსგავსი შესაძლებლობით Singleton პატერნის მეშვეობით შესაძლებელია მივიღოთ იგივე(თუმცა უფრო დახვეწილი და მოქნილი) შედეგი რაც მიიღება გლობალური ცვლადებით სხვა ენებში.</p>
<p>თავისი უმარტივესი ფორმით ეს პატერნი შეიძლება ჩავწეროთ შემდეგნაირად:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> Singleton <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">static</span> Singleton singleton <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//private static variable to store reference to the singleton instance</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">private</span> Singleton<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">//private constructor</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> Singleton getInstance<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>singleton <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; singleton <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Singleton<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> singleton<span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//return the reference</span><br />
<br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>მთავარი დეტალი ამ პატერნის გამოყენებისას არის ის რომ კლიენტს(პროგრამის სხვა კოდი რომელიც იყენებს ამ კლასს) არ უნდა შეეძლოს ამ კლასის ობიექტის ცხადად შექმნა (new-ს გამოყენებით) რაც მიიღწევა ამ კლასის კონსტრუქტორის როგორც private წევრად აღწერით. ერთი შეხედვით შეიძლება უცნაურად(და სულელურად) გეჩვენოთ private კონსტრუქტორი კლასში, მაგრამ გარდა იმისა რომ ეს სავსებით დასაშვებია Java-ში ასევე არის ერთადერთი გზა რათა კლიენტს შევუზუდოთ ამ კლასის ობიექტების შექმნა.</p>
<p>private კონსტრუქტორს გარდა იმ  ამოცანისა რაც აღნიშნული იყო ზევით ასევე გააჩნია სხვა დანიშნულება, იმ შემთხვევაში თუ კლასში არ განვსაზღვრავთ ერთ კონსტრუქტორს (ამ შემთხვევაში private) მაინ, მაშინ კომპილატორი თავად დააგენერირებს ნაგულისხმევ კონსტრუქტორს ფაილის კომპილაციისას რაც თავისთავად გულისხმობს იმას რომ ამ კლასის მემკვიდრეებსა და იმავე პაკეტში არსებულ სხვა კლასებს მისცემს მისი ობიექტების ცხადად შექმნის საშუალებას.</p>
<p>ნაცვლად Singleton კლასის ობიექტის ცხადად შექმნის შესაძლებლობისა კლიენტს უნდა შევთავაზოთ მეთოდი(მეთოდები) რომლებიც იზრუნებენ ამ კლასის ობიექტის შექმნასა და მის დაბრუნებაზე. ზემოთ აღწერილ მაგალითში ასეთი მეთოდია getInstance() რომელიც არის public და ასევე static რაც გულისხმობს იმას რომ ამ მეთოდზე წვდომა შესაძლებელია მისი კლასის ობიექტის არსებობის გარეშე.</p>
<p>თავისთავად მეთოდი მარტივია და აკეთებს ორ ძირითად რამეს:</p>
<ol>
<li>ამოწმებს არსებობს თუ არა Singleton კლასის ობიექტი, თუ არ არსებობს ქმნის მას.</li>
<li>აბრუნებს უკვე არსებულ ობიექტს.</li>
</ol>
<p>ასევე აღსანიშნავია ლოკალური singleton ცვლადი რომელიც არის private და static რაც თავისთავად გულისხმობს რომ მასთან წვდომა გააჩნიათ მხოლოდ იგივე კლასის სხვა წევრებს და მისი ინიციალიზაციისათვის არ არის აუცილებელი კლასის ობიექტის შექმნა.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/singleton-pattern-java/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>კონსტრუქტორები და ინსტანციაცია (კლასის ობიექტის შექმნა)</title>
		<link>http://www.code.ge/posts/constructors-in-java</link>
		<comments>http://www.code.ge/posts/constructors-in-java#comments</comments>
		<pubDate>Thu, 22 Feb 2007 03:07:42 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=7</guid>
		<description><![CDATA[ყოველი კლასის ახალი ობიექტი იქმნება კლასის კონსტრუქტორის გამოძახებით. გარდა ამისა ასევე შეუძლებელია ახალი ობიექტის შექმნა არა მხოლოდ ობიექტის ფაქტიური კლასის კონსტრუქტორის გამოძახების გარეშე, არამედ ეს შეუძლებელია ყოველი მისი სუპერკლასის კონსტრუქტორის გამოძახების გარეშე. კონსტრუქტორი არის კოდის ის ნაწილი რომელიც სრულდება ყოველთვის როდესაც ხდება new ოპერატორის გამოყენება. კონსტრუქტორის საფუძვლები ყოველ კლასს, აბსტრაქტული კლასების ჩათვლით აუცილებლად უნდა გააჩნდეს [...]]]></description>
			<content:encoded><![CDATA[<p>ყოველი კლასის ახალი ობიექტი იქმნება კლასის კონსტრუქტორის გამოძახებით. გარდა ამისა ასევე შეუძლებელია ახალი ობიექტის შექმნა არა მხოლოდ ობიექტის ფაქტიური კლასის კონსტრუქტორის გამოძახების გარეშე, არამედ ეს შეუძლებელია ყოველი მისი სუპერკლასის კონსტრუქტორის გამოძახების გარეშე. კონსტრუქტორი არის კოდის ის ნაწილი რომელიც სრულდება ყოველთვის როდესაც ხდება new ოპერატორის გამოყენება.<span id="more-7"></span></p>
<p><strong>კონსტრუქტორის საფუძვლები</strong></p>
<p>ყოველ კლასს, აბსტრაქტული კლასების ჩათვლით აუცილებლად უნდა გააჩნდეს კონსტრუქტორი. თუმცა ეს წესი არ გულისხმობს იმას რომ პროგრამისტმა აუცილებლად უნდა განსაზღვროს ის. კონსტრუქტორს აქვს შემდეგი სახე:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> Foo <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; Foo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// Foo კლასის კონსტრუქტორი</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>როგორც მაგალითიდან ჩანს, სხვა ჩვეულებრივი კლასის მეთოდებისაგან განსხვავებით კონსტრუქტორს არ გააჩნია დასაბრუნებელი მნიშვნელობის ტიპი. ორი მნიშვნელოვანი დეტალი რაც ახასიათებს კონსტრუქტორს, ეს არის ის რომ მას არ გააჩნია დასაბრუნებელი მნიშვნელობის ტიპი და ასევე მას უნდა ერქვას ზუსტად იგივე სახელი რაც ქვია კლასს. ზოგადად კონსტრუქტორები გამოიყენება კლასის ობიექტის ცვლადების ინიციალიზაციისათვის, როგორც ეს ნაჩვენებია შემდეგ მაგალითში:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> Foo <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> size<span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> name<span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; Foo<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> name, <span style="color: #000066; font-weight: bold;">int</span> size<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">name</span> <span style="color: #339933;">=</span> name<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">size</span> <span style="color: #339933;">=</span> size<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ზემოთ ნაჩვენებ მაგალითში, Foo კლასს არ გააჩნია უპარამეტრო კონსტრუქტორი. რაც ნიშნავს იმას რომ შემდეგი კოდი არ დაკომპილირდება:</p>
<p>Foo f = new Foo();//არ დაკომპილირდება რადგან არ არსებობს შესაბამისი (უპარამეტრო) კონსტრუქტორი</p>
<p>ხოლო შემდეგი კოდი დაკომპილირდება წარმატებით:</p>
<p>Foo f = new Foo(“Bar”, 43); //დაკომპილირდება, რადაგან გადაცემული პარამეტრები შეესაბამება Foo კონსტრუქტორს</p>
<p>ამ მაგალითიდან გამომდინარე, მიღებულია (და სასურველი) რომ კლასს გააჩნდეს უპარამეტრო კონსტრუქტორი, მიუხედავად იმისა თუ რამდენი გადატვირთული კონსტრუქტორი გააჩნია ამ კლასს (კონსტრუქტორების გადატვირთვა შესაძლებელია). თუმცა ასევე არსებობს შემთხვევები როდესაც უმჯობესია თუ კლასში არ იქნება უპარამეტრო კონსტრუქტორი.</p>
<p><strong>კონსტრუქტორების გამოძახების მიმდევრობა</strong></p>
<p>ცნობილია რომ კონსტრუქტორები გამოიძახება კოდის შესრულების დროს new ოპერატორის გამოყენების შემდეგ, მაგალითად:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Horse h <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Horse<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>განვიხილოთ თუ რა ხდება როდესაც ვქმნით კლასის ობიექტს (new Horse())</p>
<p>დავუშვათ რომ Horse კლასის მშობელი არის Animal კლასი, ხოლო Animal კლასის მშობელი კლასი არის Object. ასეთ შემთხვევაში კლასის ობიექტის შექმნისას შესრულდება შემდეგი ბიჯები:</p>
<ol>
<li>თუკი სხვაგვარად არ არის მითითებული, Horse -ს კონსტრუქტორი ავტომატურად იძახებს მისი მშობელი კლასის უპარამეტრო კონსტრუქტორს (თუკი მშობელს კონსტრუქტორი განსაზღვრული არ აქვს, იძახება ნაგულისხმევი კონსტრუქტორი) ”სხვაგვარად მითითებული” გულისხმობს იმას, რომ Horse კონსტრუქტორს შეუძლია მშობლის კონსტრუქტორის ცხადად გამოძახებაც</li>
<li>გამოიძახება Animal კონსტრუქტორი (Animal არის Horse კლასის მშობელი (super) კლასი).</li>
<li>გამოიძახება Object კონსტრუქტორი (რადგან Object კლასი არის საწყისი სუპერკლასი ყველა სხვა კლასისთვის, გამომდინარე აქედან იგი არის Animal კლასის მშობელი კლასი (მიუხედავად იმისა ცხადად დავწერთ თუ არა “extends Object” Animal კლასის აღწერისას)).</li>
<li>Object კლასის ობიექტის ცვლადებს ენიჭებათ განსაზღვრული მნიშვნელობები (ამ შემთხვევაში განსაზღვრულ მნიშვნელობაში იგულისხმება მნიშვნელობა რომლებიც ენიჭებათ ცვლადებს მათი აღწერის მომენტში მაგ. „int j = 20”, სადაც „20“ არის განსაზღვრული (განსხვავებით საწყისი (ნაგულისხმევი) მნიშვნელობისგან) მნიშნველობა კლასის ობიექტის ცვლადისა).</li>
<li>Object კონსტრუქტორი ამთავრებს შესრულებას.</li>
<li>Animal კლასის ობიექტის ცვლადებს ენიჭებათ განსაზღვული მნიშვნელობები (თუ მსგავსი არსებობს).</li>
<li>Animal კონსტრუქტორი ამთავრებს შესრულებას.</li>
<li>Horse კლასის ობიექტის ცვლადებს ენიჭებათ განსაზღვული მნიშვნელობები (თუ მსგავსი არსებობს).</li>
<li>Horse კონსტრუქტორი ამთავრებს შესრულებას.</li>
</ol>
<p>ცხრილში ნაჩვენებია თუ რა მიმდევრობით გამოიძახება კონსტრუქტორები:</p>
<table border="1">
<tr>
<td>4. Object()</td>
</tr>
<tr>
<td>3. Animal() იძახებს super() &#8211; ს</td>
</tr>
<tr>
<td>2. Horse() იძახებს super() &#8211; ს</td>
</tr>
<tr>
<td>1. main() იძახებს new Horse() &#8211; ს</td>
</tr>
</table>
<p><strong>კონსტრუქტორების წესები</strong></p>
<p>ქვემოთ მოყვანილ სიაში მოყვანილია წესები რომლებიც გააჩნია კონსტრუქტორებს:</p>
<ul>
<li>კონსტრუქტორებთან დასაშვებია ნებისმიერი მოდიფიკატორის გამოყენება (private კონსტრუქტორი ნიშნავს იმას რომ მხოლოდ მოცემული კლასის ფარგლებში არსებული კოდის გამოყენებით შეიძლება ამ კლასის ობიექტის შექმნა, თუ საჭიროა ამ კლასის ობიექტის გამოყენება მის გარეთ ასეთ შემთხვევაში კლასს უნდა გააჩნდეს სტატიკური (static) მეთოდი ან ცვლადი რომელიც ამ კლასის ობიექტთან წვდომის საშუალებას მისცემს მის გარეთ მყოფ სხვა კოდს). ასევე არსებობს კიდევ private კონსტრუქტორის კიდევ ერთი გამოყენება, ასეთი კონსტრუქტორის გამოძახება შესაძლებელია იმავე კლასში არსებული სხვა კონსტრუქტორებიდან.</li>
<li>კონსტრუქტორის სახელი უნდა იყოს იგივე რა სახელიც ქვია კლასს.</li>
<li>კონსტრუქტორს არ უნდა გააჩნდეს დასაბრუნებელი მნიშვნელობის ტიპი.</li>
<li>დასაშვებია (მაგრამ აზრს მოკლებული) მეთოდის არსებობა იგივე სახელით რა სახელიც ქვია კლასს. თუ ასეთ მეთოდს გააჩნია დასაბრუნებელი მნიშვნელობის ტიპი ეს ნიშნავს რომ იგი არის მეთოდი და არა კონსტრუქტორი.</li>
<li>თუ კლასის შიგნით არ არის აღწერილი არცერთი კონსტრუქტორი, ასეთ შემთხვევაში კომპილატორი ავტომატურად დააგენერირებს უპარამეტრო კონსტრუქტორს (ნაგულისხმევი კონსტრუქტორი).</li>
<li>ავტომატური კონსტრუქტორის გენერაცია ხდება მაშინ და მხოლოდ მაშინ, თუ კლასში სხვა კონსტრუქტორი ცხადად არ არის აღწერილი</li>
<li>ყველა კონსტრუქტორში პრიველი გამოსახულება ყოველთვის არის ან გადატვირთული კონსტრუქტორის გამოძახება (this()) ან მშობელი კლასის კონსტრუქტორის გამოძახება (super()), ასევე აღსანიშნავია რომ ასეთი გამოძახება შესაძლებელია დააგენერიროს კომპილატორმა.</li>
<li>იმ შემთხვევაში თუ კონსტრუქტორში არ დავწერთ მშობელი კლასის (super()) ან გადატვირთული (this()) კონსტრუქტორის გამოძახებას, მაშინ კომპილატორი ავტომატურად დააგენერირებს უპარამეტრო super() კონსტრუქტორის გამოძახების კოდს და ჩასვავს მათ კონსტრუქტორის პირველ გამოსახულებად.</li>
<li>super() მეთოდის გამოძახება შესაძლებელია იყოს როგორც უპარამეტრო ასევე პარამეტრიზებული.</li>
<li>უპარამეტრო კონსტრუქტორი არ არის აუცილებლად ნაგულისხმევი (default) (ე.ი. კომპილატორის მიერ დაგენერირებული) კონსტრუქტორი, მიუხედავად იმისა რომ ნაგულისხმევი კონსტრუქტორი ყოველთვის არის უპარამეტრო. ნაგულისხმევი კონსტრუქტორი ეწოდება ისეთ კონსტრუქტორს რომელსაც ქმნის კომპილატორი.</li>
<li>კონსტრუქტორიდან შეუძლებელია კლასის ობიექტის მეთოდის გამოძახება, ან მიმართვა კლასის ობიექტის ცვლადებზე, იქამდე სანამ არ დამთავრდება ყველა მშობელი კლასის კონსტრუქტორების შესრულება. (ეს არ ვრცელდება სტატიკურ მეთოდებსა და ცვლადებზე)</li>
<li>აბსტრაქტულ კლასებს აქვთ კონსტრუქტორები, ეს კონსტრუქტორები ყოველთვის გამოიძახება როდესაც ხდება კონკრეტული კლასის ობიექტის შექმნა.</li>
<li>ინტერფეისებს არ გააჩნიათ კონსტრუქტორები. ინტერფეისები არ არინ ობიექტების მემკვიდრული იერარქიის ნაწილი.</li>
<li>ერთადერთი საშუალება კონსტრუქტორის გამოძახებისა არის მისი გამოძახება სხვა კონსტრუქტორიდან, შეუძლებელია ისეთი კოდის დაწერა რომელიც განახორციელებს უშუალოდ კონსტრუქტორის გამოძახებას:</li>
<li>class Horse() {Horse() { } //კონსტრუქტორი</li>
</ul>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000066; font-weight: bold;">void</span> doCall<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; Horse<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//მსგავსი მიმართვა დაუშვებალია!</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p><strong>რა შემთხვევაში გენერირდება ნაგულისხმევი კონსტრუქტორი?</strong></p>
<p>როგორც ზემოთ იყო აღნიშნული, კომპილატორი ყოველთვის არ აგენერირებს კონსტრუქტორის კოდს. თუ რა შემთხვევაში ხდება კომპილატორის მიერ კონსტრუქტორის კოდის გენერაცია და რატომ ხდება ასე, განხილულია ქვემოთ მოყვანილ მაგალითებში.</p>
<p>მოცემულ მაგალითში ნაჩვენებია Horse კლასი ორი კონსტრუქტორით:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> Horse <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; Horse<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; Horse<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> name<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ასეთ შემთხვევაში კომპილატორი არ დააგენერირებს კონსტრუქტორს.</p>
<p>განვიხილოთ აღწერილი კლასის სხვა ვარიანტი:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> Horse <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; Horse<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> name<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>კომპილატორი არც ამ შემთხვევაში დააგენერირებს კონსტრუქტორს.</p>
<p>განვიხილოთ იგივე კლასის შემდეგი ვარიანტი:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> Horse <span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ასეთ შემთხვევაში კომპილატორი დააგენერირებს ნაგულისხმევ კონსტრუქტორს მაგალითში მოყვანილი კლასისათვის, იმიტომ რომ კლასში არ არის გამოყენებული არც ერთი კონსტრუქტორი.</p>
<p>რა საშუალებით შეგვიძლია დავადგინოთ თუ რანაირია კომპილატორის მიერ დაგენერირებული კონსტრუქტორი?</p>
<ul>
<li>ნაგულისხმევ კონსტრუქტორს აქვს იგივე წვდომის მოდიფიკატორი რაც კლასს.</li>
<li>ნაგულისხმევ კონსტრუქტორს არ აქვს პარამეტრები.</li>
<li>ნაგულისხმევი კონსტრუქტორი შეიცავს სუპერ (super) კონსტრუქტორის უპარამეტრო გამოძახებას (super()).</li>
</ul>
<p>ცხრილში მოყვანილია მაგალითები სხვადასხვა შემთხვევებისათვის, თუ რას აგენერირებს (ან არ აგენერირებს) კომპილატორი:</p>
<table border="1">
<tr align="center" background="#000000">
<th>ხელით დაწერილი კლასის კოდი</th>
<th>კომპილატორის მიერ გენერირებული კონსტრუქტორის კოდი</th>
</tr>
<tr>
<td valign="top">class Foo {}</td>
<td valign="top">class Foo {<br />
Foo (){<br />
super();<br />
}<br />
}</td>
</tr>
<tr>
<td valign="top">class Foo() {<br />
Foo(){ }<br />
}</td>
<td valign="top">class Foo {<br />
Foo (){<br />
super();<br />
}<br />
}</td>
</tr>
<tr>
<td valign="top">public class Foo { }</td>
<td valign="top">public class Foo {<br />
public Foo (){<br />
super();<br />
}<br />
}</td>
</tr>
<tr>
<td valign="top">class Foo {<br />
Foo (String s){}<br />
}</td>
<td valign="top">class Foo {<br />
Foo (String s){<br />
super();<br />
}<br />
}</td>
</tr>
<tr>
<td valign="top">class Foo {<br />
Foo(String s){<br />
super()<br />
}<br />
}</td>
<td valign="top">კომპილატორი არ დააგენერირებს კოდს.</td>
</tr>
<tr>
<td valign="top">class Foo() {<br />
void Foo(){ }<br />
}</td>
<td valign="top">class Foo {<br />
void Foo(){ }Foo() {<br />
super();<br />
}<br />
}</td>
</tr>
</table>
<p><strong>რა ხდება იმ შემთხვევაში თუ სუპერ კონსტრუქტორს აქვს პარამეტრები?</strong></p>
<p>კონსტრუქტორებს ისევე როგორც მეთოდებს შესაძლოა გააჩნდეთ პარამეტრები. იმ შემთხვევაში თუ მოხდება ისეთი მეთოდის გამოძახება რომელსაც აქვს მაგალითად int ტიპის პარამეტრი, მაგრამ გამოძახებისას მას არ გადაეცამა პარამეტრი ეს გამოიწვევს შეცდომას, როგორც ნაჩვენებია მაგალითში:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> Bar <span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #000066; font-weight: bold;">void</span> testInt<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> x<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000000; font-weight: bold;">class</span> TestBar <span style="color: #009900;">&#123;</span><br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
Bar bar <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Bar<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
bar.<span style="color: #006633;">testInt</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//მეთოდის უპარამეტროდ გამოძახება</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ასეთი კოდის შესრულება ცხადია გამოიწვევს შეცდომას, რადგან არ არსებობს შესაბამისი მეთოდი testInt(). შესაბამისობაში აქ იგულისხმება ის რომ მეთოდისთვის გადაცემული მნიშვნელობისა ან ცვლადის ტიპი უნდა შეესაბამებოდეს მისი პარამეტრის ტიპს. აღნიშნული სრულად ეხება კონსტრუქტორებს, მოცემული შემთხვევის მსგავსად კონსტრუქტორების მოქმედებაც არის იდენტური.</p>
<p>თუ სუპერ კონსტრუქტორს (მშობელი კლასის კონსტრუქტორი) აქვს განსაზღვრული პარამეტრები, მაშინ ამ კონსტრუქტორის გამოძახება უნდა მოხდეს შესაბამისი პარამეტრების გადაცემით. გასათვალიწინებელია ის მომენტი, რომ თუ სუპერკლასს არ გააჩნია უპარამეტრო კონსტრუქტორი, აუცილებელია შვილი კლასის კონსტრუქტორში მოხდეს მშობელი კლასის კონსტრუქტორის გამოძახების ჩაწერა შესაბამისი პარამეტრებით. შემდეგ მაგალითში აღწერილია აღნიშნული პრობლემა:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> Animal <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; Animal <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> name<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">class</span> Dog <span style="color: #000000; font-weight: bold;">extends</span> Animal <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; Dog<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">super</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//შეცდომაა</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>მოყვანილ მაგალითში შეცდომა მდგომარეობს იმაში, რომ მშობელ Animal კლასს არ გააჩნია უპარამეტრო კონსტრუქტორი რომლის გამოძახებაც მოხდა Dog კონსტრუქტორიდან &#8211; super(). ასეთივე შეცდომა წარმოიქმნება შემდეგი შემთხვევისთვისაც:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> Animal <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; Animal <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> name<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">class</span> Dog <span style="color: #000000; font-weight: bold;">extends</span> Animal <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ამ კოდის კომპილაცია შეუძლებელია, რადგნა როგორც ზემოთ იყო აღწერილი ისეთ შემთხვევაში თუ კლასში არ არის განსაზღვრული არც ერთი კონსტრუქტორი, კომპილატორი დააგენერირებს მას ავტომატურად. ასეთი დაგენერირებული (უპარამეტრო) კონსტური გამოიძახებს მისი მშობელი კლასის უპარამეტრო კონსტრუქტორს (super()), ხოლო რადგან მშობელ Animal კლასში არ არის განსაზღვურლი უპარამეტრო კონსტრუქტორი ეს ავტომატურად გამოიწვევს შეცდომას.</p>
<p>კომპილატორის მიერ მოდიფიცირებულ კოდს აქვს შემდეგი სახე:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> Animal <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; Animal <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> name<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">class</span> Dog <span style="color: #000000; font-weight: bold;">extends</span> Animal <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/*კომპილატორის მიერ დაგენერირებული კონსტრუქტორი და<br />
&nbsp; &nbsp; &nbsp; &nbsp;სუპერ კონსტრუქტორის გამოძახება.*/</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">class</span> Dog<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/*გამოძახება გამოიწვევს შეცდომას, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;რადგან მშობელ კლასში არ არის განსაზღვრული &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;უპარამეტრო კონსტრუქტორი.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">super</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>თუმცა მოყვანილი მაგალითებიდან ცხადია, მაგრამ ხაზგასმით უნდა აღინიშნოს რომ კონსტრუქტორები არ გადაეცემა ქვეკლასებს მემკვიდრეობით რადგან კონსტრუქტორი არ არის მეთოდი. კონსტრუქტორის გადაფარვა შეუძლებელია ქვეკლასში (რადგან კონსტრუქტორი არ არის მეთოდი და მხოლოდ ეგზემპლარის მეთოდების გადაფარვაა დაშვებული). თუმცა კონსტრუქტორების გადაფარვა დაუშვებელია, როგორც ზემოთ მოყვანილი მაგალითებიდან ჩანს მათი გადატვირთვა დასაშვებია.</p>
<p><strong>კონსტრუქტორების გადატვირთვა</strong></p>
<p>კონსტრუქტორის გადატვირთვა ნიშნავს მის რამდენჯერმე დაწერას, ყოველ მათგანს უნდა გააჩნდეს მისთვის შესაბამის და ერთმანეთისგან განსხვავებული პარამეტრები.</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> Foo <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; Foo<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; Foo<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> s<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>არწერილ Foo კლასს აქვს ორი გადატვირთული კონსტრუქტორი, ერთ ერთი მათგან ღებულობს პარამეტრად სტრიქონს. რადგან უპარამეტრო კონსტრუქტორის შიგნით არ წერია კოდი იგი იდენტურია კომპილატორის მიერ დაგენერირებული კონსტრუქტორისა, თუმცა აღსანიშნავია რომ რადგან აღწერილ კლასში არის ერთი პარამეტრიანი კონსტრუქტორი, კომპილატორი არ დააგენერირებს ნაგულისხმევ კონსტრუქტორს. თუ არსებობს უპარამეტრო კონსტრუქტორის გადატვირთვის საჭიროება პარამეტრიანი კონსტრუქტორის მიერ, ასეთ შემთხვევაში საჭირო უპარამეტრო კონსტრუქტორის დაწერაც. ისევე როგორც ნაჩვენებია მაგალითში.</p>
<p>კონსტრუქტორის გადატვირთვა გამოიყენება ისეთ შემთხვევებში როდესაც საჭიროა კლიენტის აღჭურვა კლასის კონსტრუირების დამატებითი შესაძლებლობებით. მაგალითისათვის, თუ კლიენტმა იცის ცხოველის დასახელება მას შეუძლია იგი გადასცეს Animal კლასის იმ კონსტრუქტორს რომელიც პარამეტრად ღებულობს სტრიქონს. მაგრამ იმ შემთხვევაში თუ კლიენტმა არ იცის ეს სახელი, მას შეუძლია გამოიძახოს უპარამეტრო კონსტრუქტორი და ამ კონსტრუქტორს შეუძლია აირჩიოს საწყისი სახელი. მსგავსი შემთხვევა შეგვიძლია აღვწეროთ ისე როგორც ეს ნაჩვენებია შემდეგ კლასში:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Animal <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> name<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; Animal<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> name<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">name</span> <span style="color: #339933;">=</span> name<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; Animal<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">this</span><span style="color: #009900;">&#40;</span>makeRandomName<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> makeRandomName<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066; font-weight: bold;">int</span> x <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Math</span></a>.<span style="color: #006633;">random</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> 5<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> name <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#123;</span><span style="color: #0000ff;">&quot;NameOne&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&quot;NameTwo&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&quot;NameThree&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&quot;NameFour&quot;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&quot;NameFive&quot;</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#91;</span>x<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">return</span> name<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Animal a <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Animal<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>a.<span style="color: #006633;">name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Animal b <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Animal<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Spot&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">pringln</span><span style="color: #009900;">&#40;</span>b.<span style="color: #006633;">name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ცხრილში ნაჩვენებია გამოძახებების მიმდევრობა მოყვანილი მაგალითისთვის:</p>
<p>4. Object()<br />
3. Animal(String s) იძახებს super() &#8211; ს<br />
2. Animal() იძახებს this(„შემთხვევით არჩეული სტრიქონი“)<br />
1. main() იძახებს new Animal() &#8211; ს</p>
<p>განვიხილოთ Animal კლასის კოდი:</p>
<ul>
<li>ხაზი 2 String ტიპის ეგზემპლარის name ცვლადის აღწერა.</li>
<li>ხაზები 3-5 კონსტრუქტორი რომელიც ღებულობს String ტიპის პარამეტრს და ანიჭებს მას ეგზემპლარის ცვლადს.</li>
<li>ხაზი 7 იმ შემთხვევაში თუ კლიენტი (გამომძახებელი კოდი) არ გადასცემს კონსტრუქტორს პარამეტრს, უპარამეტრო კონსტრუქტორი დააგენერირებს სახელს makeRandomName() მეთოდის მეშვეობით.</li>
<li>ხაზი 8 უპარამეტრო კონსტრუქტორი გამოიძახებს მის გადატვირთულ პარამეტრიან კონსტრუქტორს რომელიც პარამეტრად ღებულობს სტრიქონს. გადატვირთული კონსტრუქტორის გამოძახება ხორციელდება this &#8211; ის მეშვეობით, თუმცა ასეთ შემთხვევაში this &#8211; ის გამოყენება წააგავს მეთოდესი გამოძახებას this().</li>
<li>ხაზი 11 აღსანიშნავია რომ makeRandomName() მეთოდი აღწერილია როგორც static. მეთოდი სტატიკური უნდა იყოს გამომდინარე იქიდან რომ შეუძლებელია ეგზემპლარის (არასტატიკური) მეთოდზე ან ცვლადზე კონსტრუქტორიდან მიმართვა იქამდე სანამ სუპერ კონსტრუქტორი არ იქნება გამოძახებული და იგი არ დაამთავრებს შესრულებას, ხოლო რადგან მოცემულ შემთხვევაში სუპერ (super()) კონსტრუქტორის გამოძახება ხდება მე-3 ხაზზე აღწერილი პარამეტრიანი კონსტრუქტორიდან და არა იმ კონსტრუქტორიდან რომელშიც ვიძახებთ makeRandomName() მეთოდს, ამ მეთოდის გამოძახების ერთადერთი საშუალება არის ის თუ მას აღვწერთ როგორც სტატიკურს.</li>
<li>ხაზი 12 ხდება 0 &#8211; სა და 4 &#8211; ს შორის არსებული შემთხვევითი მთელი რიცხვის გენერაცია.</li>
<li>ხაზი 13 იქმნება ახალი String ტიპის ობიექტი. რადგან მეთოდის ამოცანა მდგომარეობს იმაში რომ დააბრუნოს შემთხვევითი მნიშვნელობა სიიდან, აუცილებელია ამ სიის შექმნა. აღნიშნულ სტრიქონში:</li>
</ul>
<blockquote>
<ol>
<li>აღიწერება String ტიპის name ცვლადი.</li>
<li>იქმნება String ტიპის მასივი (ანონიმურად &#8211; რადგან ეს მასივი არ ენიჭება რომელიმე ცვლადს).</li>
<li>ხდება მასივის ელემენტის ამოღება [x] ინდექსით (x ცვლადი აღწერილია მე-12 ხაზზე).</li>
<li>მასივიდან ამოღებული მნიშვნელობა ენიჭება name ცვლადს.</li>
</ol>
</blockquote>
<ul>
<li>ხაზი 18 გამოიძახება უპარამეტრო კონსტრუქტორი (რომელიც თავისთავად იძახებს პარამეტრიან კონსტრუქტორს რომელსაც გადასცემს შემთხვევით მნიშვნელობას)</li>
<li>ხაზი 20 გამოიძახება გადატვირთული კონსტრუქტორი რომელსაც პარამეტრად გადაეცემა სტრიქონი.</li>
</ul>
<p>განხილულ მაგალითში საკვანძო ნაწილია მე-8 ხაზი, სადაც super() კონსტრუქტორის ნაცვლად გამოიძახება this(). this() ყოველთვის ნიშნავს სხვა კონსტრუქტორის გამოძახებას იგივე კლასში. რადგან super() კონსტრუქტორის გამოძახება არის გარდაუვალი და აუცილებელი, ხოლო this() იძახებს Animal კლასის პარამეტრიან კონსტრუქტორს, super() გამოძახება მოხდება სწორედ აღნიშნულ პარამეტრიან კონსტრუქტორში.</p>
<p><strong>ყოველივე ზემოთქმულიდან გამომდინარე კონსტრუქტორის პირველი გამოსახულება აუცილებლად უნდა იყოს ან super() ან this() გამოძახება.</strong></p>
<p>ისეთ შემთხვევაში თუ კონსტრუქტორში არ არის არც ერთი super() და this() გამოძახება, კომპილატორი ჩასვავს super() ის უპარამეტრო გამოძახების კოდს.</p>
<p>წინა წესის გათვალისწინებით შეუძლებელია კონსტრუქტორში იყოს ორივე super() და this() გამოძახება. რადგან ერთერთი მათგანის გამოძახება უნდა იყოს პირველი გამოსახულება კონსტრუქტორში, შეუძლებელია მათი ერთდროულად გამოყენება.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/constructors-in-java/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>სტატიკური ცვლადები და მეთოდები</title>
		<link>http://www.code.ge/posts/static-variables-and-methods</link>
		<comments>http://www.code.ge/posts/static-variables-and-methods#comments</comments>
		<pubDate>Fri, 16 Feb 2007 20:51:31 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://localhost/wordpress/?p=4</guid>
		<description><![CDATA[ზოგჯერ არსებობს აუცილებლობა იმისა რომ შევქმნათ კლასის ისეთი ელემენტი (წევრი) რომლის გამოყენებაც შესაძლებელი იქნება ამ კლასის რომელიმე ობიექტის (ეგზემპლარის) არსებობის გარეშე. ზოგადად კლასის ელემენტებზე მიმართვა ხორციელდება ამ კლასის ობიექტის მეშვეობით, თუმცა შესაძლებელია ისეთი ელემენტების შექმნა რომლების გამოყენებაც შესაძლებელია განსაზღვრული ობიექტის გარეშე. ამის განსახორციელებლად საჭიროა ელემენტი გამოვაცხადოთ როგორც static. როდესაც ელემენტი აღწერილია როგორც static მას შეიძლება [...]]]></description>
			<content:encoded><![CDATA[<p>ზოგჯერ არსებობს აუცილებლობა იმისა რომ შევქმნათ კლასის ისეთი ელემენტი (წევრი) რომლის გამოყენებაც შესაძლებელი იქნება ამ კლასის რომელიმე ობიექტის (ეგზემპლარის) არსებობის გარეშე. ზოგადად კლასის ელემენტებზე მიმართვა ხორციელდება ამ კლასის ობიექტის მეშვეობით, თუმცა შესაძლებელია ისეთი ელემენტების შექმნა რომლების გამოყენებაც შესაძლებელია განსაზღვრული ობიექტის გარეშე. ამის განსახორციელებლად საჭიროა ელემენტი გამოვაცხადოთ როგორც static. როდესაც ელემენტი აღწერილია როგორც static მას შეიძლება მივმართოთ კლასის ჩატვირთვისთანავე იქამდე სანამ მოხდება ამ კლასის რომელიმე ობიექტის შექმნა. სტატიკურად შეიძლება გამოვაცხადოთ როგორც მეთოდები, ასევე ცვლადები. static-ის ყველაზე გავრცელებულ გამოყენებას წარმოადგენს main() მეთოდი. იგი აღწერილია როგორც static, რადგან მისი გამოძახება უნდა მოხდეს იქამდე სანამ მოხდება რაიმე ობიექტების შექმნა. <span id="more-4"></span><br />
კლასის ცვლადები რომლებიც გამოცხადებულია როგორც static, დაახლოვებით მსგავსია გლობალური ცვლადებისა.</p>
<p>კლასის შიგნით სტატიკურ მეთოდებს გააჩნიათ რამდენიმე შეზღუდვა:</p>
<ul>
<li>მათ შეუძლიათ გამოიძახონ მხოლოდ სხვა სტატიკური მეთოდები.</li>
<li>მათ შეუძლიათ გამოიყენონ მხოლოდ სტატიკური ცვლადები.</li>
<li>მათ არ შეუძლიათ გამოიძახონ this ან super.</li>
</ul>
<p>რა საჭიროა მსგავსი ელემენტების არსებობა და რა დანიშნულება გააჩნიათ მათ? იმისათვის რათა ცხადი გახდეს static ელემენტების მუშაობის პრინციპები, საჭიროა განვიხილოთ მათი გამოყენების აუცილებლობის მიზეზები. მაგალითისათვის განვიხილოთ კლასის ისეთი მეთოდი რომელიც ყოველთვის მუშაობს ერთნაირად, და მისი ერთადერთი დანიშნულებაა რაიმე შემთხვევითი რიცხვის დაბრუნება, მიუხედავად იმისა თუ კლასის რომელი ეგზემპლარიდან მოხდება მისი გამოძახება მისი ქცევა ყოველთვის იქნება ერთნაირი ანუ მეთოდის ქცევა არ იქნება დამოკიდებული კლასის მდგომარეობაზე. გამომდინარე აქედან ავტომატურად იბადება შეკითხვა თუ რა საჭიროა ობიექტის არსებობა როდესაც კლასის მეთოდი არ არის დამოკიდებული ეგზემპლარზე? სწორედ ასეთ შემთხვევებში გამოიყენება static წევრები. static წევრები ყოველთვის მიეკუთვნებიან კლასს და არა მის რომელიმე ეგზემპლარს. static ცვლადების და მეთოდების გამოყენება/გამოძახება შესაძლებელია ყოველთვის კლასის ეგზემპლარის არსებობის გარეშე. იმისათვის რათა გამოვიძახოთ static მეთოდი, ან მივმართოთ static ცვლადს, საკმარისია კლასი იყოს ჩატვირთული (იმპორტირებული? დაიმპორტებული? <img src='http://www.code.ge/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ). იმ შემთხვევაში თუ კლასს გააჩნია static ცვლადები, და თუ არსებობს ამ კლასის ობიექტები, მაშინ static ცვლადების მნიშვნელობები საერთო იქნება ყველა ამ ობიექტისათვის.</p>
<p>მაგალითისათვის განვიხილოთ შემთხვევა, როდესაც საჭიროა კონკრეტული კლასის ყველა არსებული ობიექტის რაოდენობის დათვლა.</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> Car <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">int</span> carCount <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//სტატიკური ცვლადის აღწერა და ინიციალიზაცია</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> Car<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; carCount <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//მთვლელის მნიშვნელობის მოდიფიკაცია</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> Car<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> Car<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> Car<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">new</span> Car<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">printLn</span><span style="color: #009900;">&#40;</span>“Car count is “ <span style="color: #339933;">+</span> carCount<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>მოყვანილ მაგალითში, სტატიკურ carCount ცვლადს საწყის მნიშვნელობად ენიჭება ნული როდესაც ხდება კლასის ჩატვირთვა (კლასის რომელიმე ეგზემპლარის შექმნამდე). როდესაც მოხდება Car კლასის ნებისმიერი ობიექტის შექმნა ყოველი Car კონსტრუქტორის გამოძახებისა და შესრულების შემდეგ სტატიკური carCount ცვლადის მნიშვნელობა გაიზრდება ერთით. კლასის main მეთოდში ხორციელდება Car კლასის ოთხი ობიექტის შექმნა, როდესაც მეთოდი დაასრულებს მუშაობას რეზულტატი იქნება შემდეგი:</p>
<p><strong>Car count is 4 </strong></p>
<p>ასეთ შემთხვევაში static ცვლადის გამოყენება აუცილებელია, რადგან იმ შემთხვევაში თუ carCount ცვლადი არ იქნება სტატიკური, მისი მნიშვნელობა Car კლასის ყოველი ობიექტის შექმნისას გახდება ნულის ტოლი.</p>
<p>გარდა ზემოთთქმულისა, ასევე შესაძლებელია გარკვეული გამოთვლებისა და სტატიკური ცვლადების ინიციალიზაციისათვის აღვწეროთ სტატიკური ბლოკი, რომელიც სრულდება მხოლოდ ერთხელ კლასის ჩატვირთვისას. შემდეგ მაგალითში ნაჩვენებია კლასი რომელსაც გააჩანია სტატიკური ცვლადები, სტატიკური მეთოდი და სტატიკური ინიციალიზაციის ბლოკი:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> TestStatic <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">int</span> x <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">int</span> y <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">int</span> z<span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; ystem.<span style="color: #006633;">out</span>.<span style="color: #006633;">printLn</span><span style="color: #009900;">&#40;</span>“<span style="color: #000000; font-weight: bold;">Static</span> Block”<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; z<span style="color: #339933;">=</span> x <span style="color: #339933;">+</span> y<span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> test<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">printLn</span><span style="color: #009900;">&#40;</span>“x <span style="color: #339933;">=</span> “ <span style="color: #339933;">+</span> x<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">printLn</span><span style="color: #009900;">&#40;</span>“y <span style="color: #339933;">=</span> “ <span style="color: #339933;">+</span> y<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">printLn</span><span style="color: #009900;">&#40;</span>“z <span style="color: #339933;">=</span> “ <span style="color: #339933;">+</span> z<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> args<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; test<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>მოცემულ კლასის ყველა static ინსტრუქცია სრულდება მაშინათვე როცა მოხდება ამ კლასის ჩატვიღტვა. პირველად, ცვლადს x ენიჭება მნიშვნელობა 1, ცვლადს y ენიჭება მნიშვნელობა 2, შემდეგ სრულდება static ინიციალიზაციის ბლოკი იბეჭდება შეტყობინება “Static Block” და ხდება z ცვლადი ინიციალიზაცია x + y გამოსახულებით. ბოლოს გამოიძახება main მეთოდი რომელიც თავისმხრივ იძახებს მეთოდს test(). ამ პროგრამის შესრულებას აქვს შემდეგი შედეგი:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">x <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><br />
y <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><br />
z<span style="color: #339933;">=</span> <span style="color: #cc66cc;">3</span></div></td></tr></tbody></table></div>
<p>იმ კლასის მიღმა (გარეთ?), რომელშიც აღწერილია სტატიკური ცვლადები და მეთოდები, მისი სტატიკური წევრების გამოყენება ხორციელდება ობიექტისგან დამოუკიდებლად. ასეთ შემთხვევაში სტატიკური წევრების გამოყენებას ექნება შემდეგი სახე:</p>
<p><strong>ClassName.methodName();<br />
ClassName.variableName;</strong></p>
<p>სადაც ClassName არის კლასის სახელი, რომელშიც აღწერილია სტატიკური მეთოდი/ცვლადი, ხოლო methodName და variableName შესაბამისად მეთოდისა და ცვლადის სახელი.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/static-variables-and-methods/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>პირველი HelloWorld ვებ აპლიკაცია</title>
		<link>http://www.code.ge/posts/%e1%83%9e%e1%83%98%e1%83%a0%e1%83%95%e1%83%94%e1%83%9a%e1%83%98-helloworld-%e1%83%95%e1%83%94%e1%83%91-%e1%83%90%e1%83%9e%e1%83%9a%e1%83%98%e1%83%99%e1%83%90%e1%83%aa%e1%83%98%e1%83%90</link>
		<comments>http://www.code.ge/posts/%e1%83%9e%e1%83%98%e1%83%a0%e1%83%95%e1%83%94%e1%83%9a%e1%83%98-helloworld-%e1%83%95%e1%83%94%e1%83%91-%e1%83%90%e1%83%9e%e1%83%9a%e1%83%98%e1%83%99%e1%83%90%e1%83%aa%e1%83%98%e1%83%90#comments</comments>
		<pubDate>Mon, 23 Oct 2006 10:12:32 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.ioseb.com/?p=21</guid>
		<description><![CDATA[ეს ტურორიალიც განკუთვნილია სტუდენტებისათვის, და დამწყები Java პროგრამისტებისთვის. დიდი მადლობა მიშა კაპანაძეს ტექსტის რედაქტირებისათვის, და ინსტალაციის ინსტრუქციის ლინუქსის ვერსიის დამატებისათვის. ვებ აპლიკაციის გასაშვებათ საჭიროა ვებ კონტეინერი, ჩვენს შემთხვევაში Tomcat. მისი გადმოწერა შეიძლება ოფიციალური საიტიდან Tomcat &#8211; ის ინსტალაცია Windows-ში 1) გადმოიწერეთ Tomcat-ის ვერსია Windows-ისათვის მისი ერთ-ერთი სერვერიდან 2) გაუშვით გადმოწერილი ფაილი 3) Choose Install Location [...]]]></description>
			<content:encoded><![CDATA[<p>ეს ტურორიალიც განკუთვნილია სტუდენტებისათვის, და დამწყები Java პროგრამისტებისთვის. დიდი მადლობა მიშა კაპანაძეს ტექსტის რედაქტირებისათვის, და ინსტალაციის ინსტრუქციის ლინუქსის ვერსიის დამატებისათვის.<span id="more-21"></span></p>
<p>ვებ აპლიკაციის გასაშვებათ საჭიროა ვებ კონტეინერი, ჩვენს შემთხვევაში Tomcat. მისი გადმოწერა შეიძლება ოფიციალური საიტიდან</p>
<p>Tomcat &#8211; ის ინსტალაცია Windows-ში<br />
1) გადმოიწერეთ Tomcat-ის ვერსია Windows-ისათვის მისი ერთ-ერთი სერვერიდან</p>
<p>2) გაუშვით გადმოწერილი ფაილი<br />
3) Choose Install Location განყოფილებაში ინსტალაციის მისამართად მიუთითეთ C:\tomcat5<br />
4) Java Virtual Machine განყოფილებაში მიუთითეთ თქვენი JRE &#8211; ს მისამართი (აქ გამოქვეყნებული ჯავას ინსტალაციის ინსტრუქცით დაინსტალირების შემთხვევაში მიუთითეთ C:\jdk1.5\jre)<br />
5) ინსტალაციის ბოლო ეტაპზე მონიშნეთ ჩეკბოქსი (თოლია) Run Apache Tomcat და დააჭირეთ ღილაკს Finish</p>
<p>Tomcat-ის მულტი-პლატფორმული ვერსიის ინსტალაცია (მუშაობს Linux, Windows და სხვა პლატფორმებზე)<br />
ინსტალაცია ლინუქსზე</p>
<p>1) გადმოიწერეთ Tomcat-ის მულტი-პლატფორმული ვერსია მისი ერთ-ერთი სერვერიდან<br />
2) გახსენით გადმოწერილი ფაილი რომელიმე დირექტორიაში. მაგალითად, /home/mikheil/tomcat<br />
3) დარწმუნდით, რომ ჯავა სწორადაა ინსტალირებული? და Environment Variable, სახელად JAVA_HOME სწორადაა კონფიგურირებული და რომ ბრძანება java იშვება ამ დირექტორიიდან (ბრძანებით type java). თუკი ეს ასე არ არის, მაშინ თქვენს .bashrc ფაილში PATH-ის დასაწყისში ჩაუმატეთ $JAVA_HOME/bin: (ორწერტილი აუცილებელია დანარჩენი მისამართებისაგან გამოსაყოფად)<br />
4) /home/mikheil/tomcat/bin -ში მოთავსებულ ფაილებს გაფართოებით sh მიეცით შესრულების უფლებები (მაგალითად, chmod 755 *.sh)<br />
5) გაუშვით სკრიპტი startup.sh</p>
<p>ინსტალაციის შემოწმება<br />
გახსენით თქვენი ინტერნეტ ბროუზერი (ნებისმიერი) და გახსენით შემდეგი მისამართი: http://localhost:8080/<br />
თუ ჩაიტვირთა გვერდი წარწერით Apache Tomcat/5.5.20 და კატის სურათით ე.ი. ინსტალაციამ ჩაიარა წარმატებით.</p>
<p>1) შედით მისამართზე: C:\tomcat5\webapps<br />
2) შექმენით ფოლდერი hello<br />
3) hello დირექტორიაში შექმენით ქვედირექტორია სახელად WEB-INF<br />
4) WEB-INF ფოლდერში შექმენით web.xml ფაილი (ფაილი შექმენით ზუსტად იგივე მეთოდით როგორც ნაჩვენები იყო წინა მაგალითში)<br />
და მასში ჩაწერეთ შემდეგი ტექსტი:</p>
<div class="codecolorer-container xml blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="xml codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt; ?xml <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;ISO-8859-1&quot;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></span> <br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;web</span> -app <span style="color: #000066;">xmlns</span>=<span style="color: #ff0000;">&quot;http://java.sun.com/xml/ns/j2ee&quot;</span> </span><br />
<span style="color: #009900;"> <span style="color: #000066;">xmlns:xsi</span>=<span style="color: #ff0000;">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> </span><br />
<span style="color: #009900;"> <span style="color: #000066;">xsi:schemaLocation</span>=<span style="color: #ff0000;">&quot;http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&quot;</span> </span><br />
<span style="color: #009900;"> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;2.4&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span></span> <br />
&nbsp; <br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;display</span> -name<span style="color: #000000; font-weight: bold;">&gt;</span></span>Hello, World Application<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/display<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> <br />
&nbsp; <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Hello, World Application<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/description<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> <br />
<br />
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/web<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></div></td></tr></tbody></table></div>
<p>5) გადადით hello დირექტორიაში და მასში შექმენით ფაილი სახელად index.jsp და მასში ჩაწერეთ შემდეგი ტექსტი:</p>
<div class="codecolorer-container html4strict blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">html</span></a>&gt;</span> <br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/head.html"><span style="color: #000000; font-weight: bold;">head</span></a>&gt;</span> <br />
&nbsp; &nbsp;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/title.html"><span style="color: #000000; font-weight: bold;">title</span></a>&gt;</span>Hello World<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/title.html"><span style="color: #000000; font-weight: bold;">title</span></a>&gt;</span> <br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/head.html"><span style="color: #000000; font-weight: bold;">head</span></a>&gt;</span> <br />
<br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/body.html"><span style="color: #000000; font-weight: bold;">body</span></a>&gt;</span> <br />
<br />
<span style="color: #009900;">&lt; % out.print<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Hello World!&quot;</span><span style="color: #66cc66;">&#41;</span>; %&gt;</span> <br />
<br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/body.html"><span style="color: #000000; font-weight: bold;">body</span></a>&gt;</span> <br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>6) ამ ყველაფრის განხორციელების შემდეგ უნდა მიიღოთ ფაილების მსგავსი სტრუქტურა:</p>
<p>|-hello<br />
|&#8212;index.jsp<br />
|&#8212;web-inf<br />
|&#8212;&#8212;web.xml </p>
<p>7) გახსენით ბროუზერი და გახსენით შემდეგი მისამართი: http://localhost:8080/hello/</p>
<p>თუ ყველაფერი შეასრულედ სწორად ბროუზერში უნდა დაინხოთ შემდეგი ტექსტი: Hello World!</p>
<p>შემდეგ ეტაპზე თქვენს ახლად შექმნილ აპლიკაციას დავამატოთ ინტერაქტიულობა</p>
<p>1) გახსენით თქვენს მიერ შექმნილი index.jsp ფაილი და დაარედაქტირეთ მისი ტექსტი შემდეგნაირად:</p>
<div class="codecolorer-container html4strict blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">html</span></a>&gt;</span> <br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/head.html"><span style="color: #000000; font-weight: bold;">head</span></a>&gt;</span> <br />
&nbsp; &nbsp;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/title.html"><span style="color: #000000; font-weight: bold;">title</span></a>&gt;</span>Hello World<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/title.html"><span style="color: #000000; font-weight: bold;">title</span></a>&gt;</span> <br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/head.html"><span style="color: #000000; font-weight: bold;">head</span></a>&gt;</span> <br />
<br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/body.html"><span style="color: #000000; font-weight: bold;">body</span></a>&gt;</span> <br />
<br />
<br />
<br />
<br />
<span style="color: #009900;">&lt; % </span><br />
<span style="color: #009900;"> &nbsp; &nbsp;</span><br />
<span style="color: #009900;"> &nbsp; String <span style="color: #000066;">name</span> <span style="color: #66cc66;">=</span> request.getParameter<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;name&quot;</span><span style="color: #66cc66;">&#41;</span>; </span><br />
<span style="color: #009900;"> &nbsp; &nbsp;</span><br />
<span style="color: #009900;"> &nbsp; if <span style="color: #66cc66;">&#40;</span><span style="color: #000066;">name</span> !<span style="color: #66cc66;">=</span> null<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> </span><br />
<span style="color: #009900;"> &nbsp; &nbsp; &nbsp;out.print<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Hello World! &quot;</span> + <span style="color: #000066;">name</span><span style="color: #66cc66;">&#41;</span>; </span><br />
<span style="color: #009900;"> &nbsp; <span style="color: #66cc66;">&#125;</span> else <span style="color: #66cc66;">&#123;</span> </span><br />
<span style="color: #009900;"> &nbsp; &nbsp; &nbsp;out.print<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;Hello World!&quot;</span><span style="color: #66cc66;">&#41;</span>; </span><br />
<span style="color: #009900;"> &nbsp; <span style="color: #66cc66;">&#125;</span> </span><br />
<span style="color: #009900;"> &nbsp; &nbsp;</span><br />
<span style="color: #009900;">%&gt;</span> <br />
<br />
<br />
<br />
<br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/hr.html"><span style="color: #000000; font-weight: bold;">hr</span></a> <span style="color: #66cc66;">/</span>&gt;</span> <br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;get&quot;</span>&gt;</span> <br />
&nbsp; &nbsp;Enter Name: <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;name&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span> <br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a>&gt;</span> <br />
<br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/body.html"><span style="color: #000000; font-weight: bold;">body</span></a>&gt;</span> <br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>2) გახსენით მისამართი: http://localhost:8080/hello/ თქვენ უნდა დაინახოთ სახეცვლილი გვერდი, კერძოდ მას დაემატა ერთი ტექსტური ველი. შეიტანეთ ამ ველში თქვენთვის სასურველი სახელი (ან ნებისმიერი ტექსტი) და დააჭირეთ ღილაკს Enter</p>
<p>შედეგად მივიღეთ მცირე ინტერაქტიული ვებ აპლიკაცია.</p>
<p>ოდნავ გავართულოთ აპლიკაცია და გადავაკეთოთ იგი მარტივ კალკულატორად.</p>
<p>1) გახსენით და დაარედაქტირეთ index.jsp ფაილი შემდეგნაირად:</p>
<div class="codecolorer-container html4strict blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br /></div></td><td><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">html</span></a>&gt;</span> <br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/head.html"><span style="color: #000000; font-weight: bold;">head</span></a>&gt;</span> <br />
&nbsp; &nbsp;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/title.html"><span style="color: #000000; font-weight: bold;">title</span></a>&gt;</span>Hello World<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/title.html"><span style="color: #000000; font-weight: bold;">title</span></a>&gt;</span> <br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/head.html"><span style="color: #000000; font-weight: bold;">head</span></a>&gt;</span> <br />
<br />
<br />
<br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/body.html"><span style="color: #000000; font-weight: bold;">body</span></a>&gt;</span> <br />
&nbsp; &nbsp; <br />
<span style="color: #009900;">&lt; % </span><br />
<span style="color: #009900;"> &nbsp; &nbsp;</span><br />
<span style="color: #009900;"> &nbsp; String calculate <span style="color: #66cc66;">=</span> request.getParameter<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;calculate&quot;</span><span style="color: #66cc66;">&#41;</span>; </span><br />
<span style="color: #009900;"> &nbsp; &nbsp;</span><br />
<span style="color: #009900;"> &nbsp; if <span style="color: #66cc66;">&#40;</span>calculate !<span style="color: #66cc66;">=</span> null<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span> </span><br />
<span style="color: #009900;"> &nbsp; &nbsp; &nbsp; </span><br />
<span style="color: #009900;"> &nbsp; &nbsp; &nbsp;int valueOne <span style="color: #66cc66;">=</span> Integer.parseInt<span style="color: #66cc66;">&#40;</span>request.getParameter<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;valueOne&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; </span><br />
<span style="color: #009900;"> &nbsp; &nbsp; &nbsp;int valueTwo <span style="color: #66cc66;">=</span> Integer.parseInt<span style="color: #66cc66;">&#40;</span>request.getParameter<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;valueTwo&quot;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>; </span><br />
<span style="color: #009900;"> &nbsp; &nbsp; &nbsp;int result <span style="color: #66cc66;">=</span> valueOne + valueTwo; </span><br />
<span style="color: #009900;"> &nbsp; &nbsp; &nbsp; </span><br />
<span style="color: #009900;"> &nbsp; &nbsp; &nbsp;out.print<span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;&lt;b&gt;</span></span>Calculation Result = &quot; + result + &quot;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/br.html"><span style="color: #000000; font-weight: bold;">br</span></a> <span style="color: #66cc66;">/</span>&gt;&lt;<a href="http://december.com/html/4/element/hr.html"><span style="color: #000000; font-weight: bold;">hr</span></a> <span style="color: #66cc66;">/</span>&gt;</span>&quot;); <br />
&nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp; &nbsp;} <br />
&nbsp; &nbsp; <br />
%&gt; <br />
<br />
<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;get&quot;</span>&gt;</span> <br />
&nbsp; &nbsp;Value One: <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;valueOne&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span> <br />
&nbsp; &nbsp;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/font.html"><span style="color: #000000; font-weight: bold;">font</span></a> <span style="color: #000066;">color</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;red&quot;</span>&gt;</span>+<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/font.html"><span style="color: #000000; font-weight: bold;">font</span></a>&gt;</span> <br />
&nbsp; &nbsp;Value Two: <span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;valueTwo&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span> <br />
&nbsp; &nbsp;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/br.html"><span style="color: #000000; font-weight: bold;">br</span></a> <span style="color: #66cc66;">/</span>&gt;</span> <br />
&nbsp; &nbsp;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;hidden&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;calculate&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Calculate&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span> <br />
&nbsp; &nbsp;<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/input.html"><span style="color: #000000; font-weight: bold;">input</span></a> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;calculate&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Calculate&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span> <br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/form.html"><span style="color: #000000; font-weight: bold;">form</span></a>&gt;</span> <br />
<br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/body.html"><span style="color: #000000; font-weight: bold;">body</span></a>&gt;</span> <br />
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><a href="http://december.com/html/4/element/html.html"><span style="color: #000000; font-weight: bold;">html</span></a>&gt;</span></div></td></tr></tbody></table></div>
<p>2) გახსენით მისამართი: http://localhost:8080/hello/ თქვენ უნდა დაინახოთ ორი ველი (Value One და Value Two) შეიტანეთ ამ ველებში ნებისმიერი ციფრები და დააჭირეთ ღილაკს Calculate</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/%e1%83%9e%e1%83%98%e1%83%a0%e1%83%95%e1%83%94%e1%83%9a%e1%83%98-helloworld-%e1%83%95%e1%83%94%e1%83%91-%e1%83%90%e1%83%9e%e1%83%9a%e1%83%98%e1%83%99%e1%83%90%e1%83%aa%e1%83%98%e1%83%90/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>პირველი Java პროგრამა</title>
		<link>http://www.code.ge/posts/%e1%83%9e%e1%83%98%e1%83%a0%e1%83%95%e1%83%94%e1%83%9a%e1%83%98-java-%e1%83%9e%e1%83%a0%e1%83%9d%e1%83%92%e1%83%a0%e1%83%90%e1%83%9b%e1%83%90</link>
		<comments>http://www.code.ge/posts/%e1%83%9e%e1%83%98%e1%83%a0%e1%83%95%e1%83%94%e1%83%9a%e1%83%98-java-%e1%83%9e%e1%83%a0%e1%83%9d%e1%83%92%e1%83%a0%e1%83%90%e1%83%9b%e1%83%90#comments</comments>
		<pubDate>Mon, 23 Oct 2006 10:05:22 +0000</pubDate>
		<dc:creator>იოსები</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.ioseb.com/?p=20</guid>
		<description><![CDATA[ეს პატარა ტუტორიალი დავწერე სტუდენტებისათვის. დარწმუნებული ვარ იგი გამოადგებათ დამწყებ Java პროგრამისტებისაც, ან უბრალოდ Java-თი დაინტერესებულ კოლეგებს. 1) გახსენით პროგრამა Notepad, იგი შეგიძლიათ გახსნათ ორი მეთოდით: Start->Run და აკრიფეთ notepad ან აირჩიეთ Start->Programs->Accessories->Notepad 2) ახლად გახსნილ დოკუმენტში აკრიფეთ შემდეგი კოდი: 12345class HelloWorld &#123; &#160; &#160;public static void main&#40;String args&#91;&#93;&#41; &#123; &#160; &#160; &#160; &#160;System.out.println&#40;&#34;Hello world!&#34;&#41;; [...]]]></description>
			<content:encoded><![CDATA[<p>ეს პატარა ტუტორიალი დავწერე სტუდენტებისათვის. დარწმუნებული ვარ იგი გამოადგებათ დამწყებ Java პროგრამისტებისაც, ან უბრალოდ Java-თი დაინტერესებულ კოლეგებს.<span id="more-20"></span></p>
<p>1) გახსენით პროგრამა Notepad, იგი შეგიძლიათ გახსნათ ორი მეთოდით: Start->Run და აკრიფეთ notepad ან აირჩიეთ Start->Programs->Accessories->Notepad</p>
<p>2) ახლად გახსნილ დოკუმენტში აკრიფეთ შემდეგი კოდი:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">class</span> HelloWorld <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> args<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hello world!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>3) Notepad &#8211; ის მთავარი მენიუდან აირჩიეთ File->Save As, ფაილის შესანახად აირჩიეთ C:\ დისკი და ფაილს დაარქვით სახელი HelloWorld.java (მიაქციეთ ყურადღება ფაილს უნდა ერქვას იგივე სახელი რა სახელიც ქვია კლასს) Save as type გრაფაში აუცილებლად აირჩიეთ All Files და შეინახეთ დოკუმენტი (Save)</p>
<p>ფაილის შენახვის შემდეგ:</p>
<p>1) Start->Run და აკრიფეთ ბრძანება cmd<br />
2) გახსნილ კონსოლში აკრიფეთ შემდეგი ბრძანება: cd c:\ და დააჭირეთ Enter ღილაკს<br />
3) ახლად შექმნილი კლასის კომპილაციისთვის აკრიფეთ: javac HelloWorld.java და დააჭირეთ Enter ღილაკს<br />
4) პროგრამის გასაშვებად აკრიფეთ: java HelloWorld და დააჭირეთ Enter ღილაკს</p>
<p>კონსოლზე უნდა დაიბეჭდოს: Hello world!</p>
<p>ჩვენს ახლად შექმნილ კლასს დავამატოთ ცოტაოდენი ინტერაქტიულობა:</p>
<p>1) დაარედაქტირეთ თქვენს მიერ შექმნილი კლასი:</p>
<div class="codecolorer-container java blackboard" style="overflow:auto;white-space:nowrap;border: 1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; <span style="color: #000000; font-weight: bold;">class</span> HelloWorld <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> args<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">System</span></a>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Hello world! &quot;</span> <span style="color: #339933;">+</span> args<span style="color: #009900;">&#91;</span>0<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #009900;">&#125;</span><br />
&nbsp; <span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>2) შეინახეთ და დააკომპილირეთ ფაილი (გაიმეორეთ იგივე ეტაპები რაც პირველ მაგალითში)<br />
3) პროგრამის გასაშვებად აკრიფეთ: java HelloWorld erekle და დააჭირეთ Enter ღილაკს</p>
<p>კონსოლზე უნდა დაიბეჭდოს: Hello world! erekle</p>
<p>რა თქმა უნდა &#8220;erekle&#8221; &#8211; ს ნაცვლად შეგიძლიათ დაწეროთ თქვენი სახელი</p>
]]></content:encoded>
			<wfw:commentRss>http://www.code.ge/posts/%e1%83%9e%e1%83%98%e1%83%a0%e1%83%95%e1%83%94%e1%83%9a%e1%83%98-java-%e1%83%9e%e1%83%a0%e1%83%9d%e1%83%92%e1%83%a0%e1%83%90%e1%83%9b%e1%83%90/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
