155 lines
6.5 KiB
HTML
155 lines
6.5 KiB
HTML
<html>
|
||
|
||
<head>
|
||
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
|
||
<param name="Keyword" value="class">
|
||
<param name="Keyword" value="sealed">
|
||
</object>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
||
<title>Êëàññû è îáúåêòû: îáçîð</title>
|
||
<link rel="StyleSheet" href="../../default.css">
|
||
<style type="text/css">
|
||
.auto-style1 {
|
||
font-family: monospace;
|
||
font-size: 10pt;
|
||
color: #000080;
|
||
}
|
||
</style>
|
||
</head>
|
||
|
||
<body>
|
||
<H1>Îáçîð êëàññîâ è îáúåêòîâ</H1>
|
||
<h2>Îïèñàíèå êëàññîâ</h2>
|
||
<p>Êëàññ ïðåäñòàâëÿåò ñîáîé ñîñòàâíîé òèï, ñîñòîÿùèé èç ïîëåé
|
||
(ïåðåìåííûõ), <A href="methods.html">ìåòîäîâ</A> (ïðîöåäóð è ôóíêöèé)
|
||
è <A href="properties.html">ñâîéñòâ</A>. Îïèñàíèå êëàññà èìååò âèä:</p>
|
||
<blockquote>
|
||
<p><code><b>type</b> <br>
|
||
<code class="codeit">èìÿ êëàññà</code><b> </b>=<b> class</b><br>
|
||
<code class="codeit"> ñåêöèÿ1</code> <br>
|
||
<code class="codeit"> ñåêöèÿ2</code> <br><code class="codeit">
|
||
...</code><br>
|
||
<b>end</b>;</code></p>
|
||
</blockquote>
|
||
<p>Êàæäàÿ ñåêöèÿ èìååò âèä:</p>
|
||
<blockquote>
|
||
<p><code><code class="codeit"><A href="visibility.html">ìîäèôèêàòîð äîñòóïà</A></code>
|
||
<br><code class="codeit"> îïèñàíèÿ ïîëåé</code><br>
|
||
<code class="codeit">
|
||
îáúÿâëåíèÿ èëè îïèñàíèÿ ìåòîäîâ è îïèñàíèÿ ñâîéñòâ</code></code></p>
|
||
</blockquote>
|
||
<p>Ìîäèôèêàòîð äîñòóïà â ïåðâîé ñåêöèè ìîæåò îòñóòñòâîâàòü, ïðè ýòîì
|
||
ïîäðàçóìåâàåòñÿ ìîäèôèêàòîð <strong><span class="auto-style1">internal</span></strong>
|
||
(âèäèìîñòü âñþäó âíóòðè ñáîðêè).</p>
|
||
<p>Ìåòîäû ìîãóò îïèñûâàòüñÿ êàê âíóòðè, òàê è âíå êëàññà. Ïðè îïèñàíèè ìåòîäà
|
||
âíóòðè êëàññà åãî èìÿ ïðåäâàðÿåòñÿ èìåíåì êëàññà ñ ïîñëåäóþùåé òî÷êîé. Íàïðèìåð:</p>
|
||
<blockquote>
|
||
<p><code><b>type</b><br>
|
||
Person = <strong>class</strong><b><br>
|
||
private</b><br>
|
||
fName: string;<br>
|
||
fAge: integer;<br>
|
||
<b> public</b><br>
|
||
<b>constructor</b> Create(Name: string; Age: integer);<br>
|
||
<b>begin</b><br>
|
||
fName := Name;<br>
|
||
fAge := Age;<br>
|
||
<b>end</b>;<br><strong> procedure</strong>
|
||
Print;<br><b> property</b> Name: string read fName;<br><b>
|
||
property</b> Age: integer read fAge;<b><br> end</b>;<br><strong><br>
|
||
procedure</strong> Person.Print;<br><strong>begin</strong><br>
|
||
Writeln($'Èìÿ: {Name} Âîçðàñò: {Age}');<br><strong>end</strong>;</code></p>
|
||
</blockquote>
|
||
<p>Ïîñëå ñëîâà <code><b>class</b></code>
|
||
â ñêîáêàõ ìîæåò áûòü óêàçàíî èìÿ êëàññà-ïðåäêà (ñì. <A href="inheritance.html">
|
||
Íàñëåäîâàíèå</A>), à òàêæå ÷åðåç çàïÿòóþ ñïèñîê ïîääåðæèâàåìûõ
|
||
<A href="../Interfaces/indexinterf.html">èíòåðôåéñîâ</A>. </p>
|
||
<p>Ïåðåä ñëîâîì <code><b>class</b></code>
|
||
ìîæåò áûòü óêàçàíî êëþ÷åâîå ñëîâî <code><b>sealed</b></code> – â
|
||
ýòîì ñëó÷àå îò êëàññà çàïðåùåíî <A href="inheritance.html">íàñëåäîâàòü</A>.</p>
|
||
<p>Âñå îïèñàíèÿ è îáúÿâëåíèÿ âíóòðè êëàññà îáðàçóþò <b>
|
||
<font color="#ff0000"><i>òåëî êëàññà</i></font></b>. Ïîëÿ è
|
||
ìåòîäû îáðàçóþò <b><font color="#ff0000"> <i>èíòåðôåéñ</i></font></b> êëàññà. Èíèöèàëèçàòîðû ïîëåé îïèñàíû <A href="initfields.html">çäåñü</A>. </p>
|
||
<p>Êëàññû ìîãóò îïèñûâàòüñÿ òîëüêî íà ãëîáàëüíîì óðîâíå. Ëîêàëüíûå îïðåäåëåíèÿ êëàññîâ (ò.å. îïðåäåëåíèÿ â
|
||
ðàçäåëå îïèñàíèÿ ïîäïðîãðàìì) çàïðåùåíû.</p>
|
||
<h2>Ïåðåìåííûå òèïà êëàññ</h2>
|
||
<p>Â ÿçûêå <strong>PascalABC.NET</strong> êëàññû ÿâëÿþòñÿ
|
||
<A href="../Types/value_ref_types.html">ññûëî÷íûìè òèïàìè</A>.
|
||
Ýòî çíà÷èò, ÷òî ïåðåìåííàÿ òèïà êëàññ õðàíèò â äåéñòâèòåëüíîñòè ññûëêó íà
|
||
îáúåêò. </p>
|
||
<p>Ïåðåìåííûå òèïà êëàññ íàçûâàþòñÿ <b><font color="#ff0000"><i>îáúåêòàìè</i></font></b>
|
||
èëè <b><font color="#ff0000"><i>ýêçåìïëÿðàìè êëàññà</i></font></b>. Îíè
|
||
èíèöèàëèçèðóþòñÿ âûçîâîì <A href="constrdestr.html">êîíñòðóêòîðà</A> êëàññà -
|
||
ñïåöèàëüíîãî ìåòîäà, âûäåëÿþùåãî ïàìÿòü ïîä îáúåêò êëàññà è èíèöèàëèçèðóþùåãî
|
||
åãî ïîëÿ:</p>
|
||
<blockquote>
|
||
<p><code><strong>var</strong> p: Person := new Person('Èâàíîâ',20);</code></p>
|
||
</blockquote>
|
||
<p>Ïîñëå èíèöèàëèçàöèè ÷åðåç ïåðåìåííóþ òèïà êëàññ ìîæíî îáðàùàòüñÿ ê ïóáëè÷íûì
|
||
÷ëåíàì êëàññà (ïîëÿì, ìåòîäàì, ñâîéñòâàì), èñïîëüçóÿ òî÷å÷íóþ íîòàöèþ:</p>
|
||
<blockquote>
|
||
<p><code>Print(p.Name,p.Age);<br>p.Print;</code></p>
|
||
</blockquote>
|
||
<h2>Âûâîä ïåðåìåííîé òèïà êëàññ</h2>
|
||
<p>Ïî óìîë÷àíèþ ïðîöåäóðà <code>Write</code> äëÿ ïåðåìåííîé òèïà êëàññ âûâîäèò
|
||
ñîäåðæèìîå å¸ ïóáëè÷íûõ ïîëåé è ñâîéñòâ â êðóãëûõ ñêîáêàõ ÷åðåç çàïÿòóþ:</p>
|
||
<blockquote>
|
||
<p><code>Write(p); // Èâàíîâ 20</code></p>
|
||
</blockquote>
|
||
<p>×òîáû èçìåíèòü ýòî ïîâåäåíèå, â êëàññå ñëåäóåò
|
||
<A href="../Classes/virtual.html">ïåðåîïðåäåëèòü</A> âèðòóàëüíûé ìåòîä
|
||
<code>ToString</code> êëàññà <code>Object</code> - â ýòîì ñëó÷àå èìåííî îí áóäåò
|
||
âûçûâàòüñÿ ïðè âûâîäå îáúåêòà. </p>
|
||
<p>Íàïðèìåð:</p>
|
||
<blockquote>
|
||
<p><code><b>type</b><br>
|
||
Person = <b>class<br>
|
||
|
||
...<br>
|
||
function</b> ToString:
|
||
string; <b>override</b>;<br>
|
||
<b> begin</b><br> Result :=
|
||
|
||
$'Èìÿ: {Name} Âîçðàñò: {Age}'; <br>
|
||
<b> end</b>;<br>
|
||
<b> end</b>;<br>
|
||
...<br>
|
||
<b>var</b> p: Person := new Person('Èâàíîâ',20);<br>
|
||
Writeln(p); // Èìÿ: Èâàíîâ Âîçðàñò: 20</code></p>
|
||
</blockquote>
|
||
<h2>Ïðèñâàèâàíèå è ïåðåäà÷à â êà÷åñòâå ïàðàìåòðîâ ïîäïðîãðàìì</h2>
|
||
<p>Ïåðåìåííàÿ òèïà êëàññ ÿâëÿåòñÿ ññûëêîé è õðàíèò ññûëêó íà îáúåêò, ñîçäàâàåìûé
|
||
âûçîâîì êîíñòðóêòîðà.</p>
|
||
<p>Êàê ññûëêà ïåðåìåííàÿ òèïà êëàññ ìîæåò õðàíèòü çíà÷åíèå <code>
|
||
<b>nil</b></code>:</p>
|
||
<blockquote>
|
||
<p><code>p :=<b> nil</b>;<br>
|
||
...<br>
|
||
if p =<b> nil</b> then ...</code></p>
|
||
</blockquote>
|
||
<p>Ïðè ïðèñâàèâàíèè ïåðåìåííûõ òèïà êëàññ êîïèðóåòñÿ òîëüêî ññûëêà. Ïîñëå
|
||
ïðèñâàèâàíèÿ îáå ïåðåìåííûå òèïà êëàññ áóäóò ññûëàòüñÿ íà îäèí îáúåêò
|
||
è ñîâìåñòíî ìîäèôèöèðîâàòü åãî:</p>
|
||
<blockquote>
|
||
<p><code><b>var</b> p1,p2: Person;<br>
|
||
...<br>
|
||
p1 := new Person('Ïåòðîâ',20);<br>
|
||
p2 := p1;<br>
|
||
p1.IncAge;<br>
|
||
p2.Print; // Èìÿ: Ïåòðîâ
|
||
Âîçðàñò: 21</code></p>
|
||
</blockquote>
|
||
<h2>Ñðàâíåíèå íà ðàâåíñòâî</h2>
|
||
<p>Ïðè ñðàâíåíèè ïåðåìåííûõ òèïà êëàññ íà ðàâåíñòâî ñðàâíèâàþòñÿ ññûëêè, à íå
|
||
çíà÷åíèÿ. </p>
|
||
<blockquote>
|
||
<p><code><b>var</b> p1 := new Person('Ïåòðîâ',20);<br><b>var</b> p2 := new
|
||
Person('Ïåòðîâ',20);<br>writeln(p1=p2); // False<br>
|
||
p2 := p1; <br>
|
||
writeln(p1=p2); // True</code></p>
|
||
</blockquote>
|
||
<p>Ýòî ïîâåäåíèå ìîæíî èçìåíèòü, <A href="operoverloading.html">ïåðåãðóçèâ</A>
|
||
îïåðàöèþ = äëÿ êëàññà.</p>
|
||
</body>
|
||
|