Розьніца паміж вэрсіямі «Кляса (праграмаваньне)»

д
; + крыху артаграфіі і тэрміналёгіі
д (→‎Object Pascal/[[Delphi]]: прыбраў `;' перад `end')
д (; + крыху артаграфіі і тэрміналёгіі)
У [[аб'ектна-арыентаванае праграмаваньне|аб'ектна арыентаваным праграмаваньні]] '''кляс''' — канструкцыя [[мова праграмаваньня|мовы праграмаваньня]], якая выкарыстоўваецца для групаваньня зьвязаных [[поле (праграмаваньне)|палёў]] і [[мэтад (праграмаваньне)|мэтадаў]] і пад якой разумеецца пэўная сутнасьць, якая вызначае пэўныя агульныя паводзіны для [[аб'ект (праграмаваньне)|аб'ектаў]]. Мэтад, які ў пэўных мовах праграмаваньня называецца функцыяй, — набор інструкцый, якія маюць дачыненьне да клясу. У залежнасьці ад мовы праграмаваньня, клясы могуць падтрымліваць множнае [[насьледваньнеспадкаваньне (праграмаваньне)|насьледваньнеспадкаваньне]] або патрабаваць выкарыстаньне [[інтэрфэйс (праграмаваньне)|інтэрфэйсаў]] для пашырэньня іншых клясаў. Таксама кляс можа проста паказваць, што пэўны мэтад існуе. Такія клясы вядомыя як «абстрактныя клясы».
 
Фактычна [[аб'ектна-арыентаванае праграмаваньне]] часьцей за ўсё зводзіцца да стварэньня пэўнага набору клясаў, апісаньня сувязяў паміж гэтымі клясамі і іх уласьцівасьцяў і далейшага выкарыстаньня атрыманых клясаў. [[аб'ектна-арыентаванае праграмаваньне|Аб'ектна-арыентаваны падыход]] падчас свайго разьвіцьця накапіў мноства рэкамэндацыяў ([[шаблёны праектаваньня|шаблёнаў праектаваньня]]) па стварэньні клясаў і гіерархій клясаў.
У шматлікіх [[аб'ектна-арыентаваная мова праграмаваньня|аб'ектна-арыентаваных мовах праграмаваньня]] стварэньне клясу адбываецца шляхам напісаньня пэўнай структуры, якая ўтрымлівае набор палёў, мэтадаў і канструктараў.
 
Функцыі [[канструктар (праграмаваньне)|канструктара]] і [[дэструктар (праграмаваньне)|дэструктара]] ў рэалізацыі клясаклясу прызначаныя для стварэньня і разбурэньня [[аб'ект (праграмаваньне)|аб'ектаў]] клясаклясу. Асноўная функцыя канструктара — стварыць правільны экзэмпляр клясаклясу. Асноўная функцыя дэструктара — разбурыць аб'ект і прыбраць усе спасылкі на яго ў [[праграма|праграме]].
 
[[поле (праграмаваньне)|Палі]] прызначаныя для захоўваньня ўнутраных дадзеных клясаклясу, а [[мэтад (праграмаваньне)|мэтады]] — для іхнай апрацоўкі, рэалізацыі лёгікі і ўзаемадзеяньня зь іншымі клясамі.
 
У клясе таксама могуць быць рэалізаваныя дапаможныя функцыі, якія часам называюцца функцыямі клясаклясу або статычнымі мэтадамі. Статычныя функцыі часта выкарыстоўваюцца, каб знайсьці, стварыць ці разбурыць экзэмпляр клясу. Канструктары і дэструктары часам бываюць статычнымі. Часта мэханізмы перасылкі аб'екта ў іншае месца ці функцыі зьмены клясаклясу аб'екта робяцца статычнымі.
 
=== Спэцыфікатары доступу ===
 
Мэтады і палі клясаклясу могуць быць спраектаваныя як public, private або protected. Гэтыя парамэтры называюцца спэцыфікатарамі доступу. Яны вызначаюць, хто можа атрымліваць доступ да мэтадаў і палёў клясаклясу, якія апісаныя пры дапамозе спэцыфікатара доступу.
 
'''Private''' ([[Ангельская мова|анг.]] асабісты) абмяжоўвае доступ для ўсіх, апроч самога клясаклясу. Толькі мэтады, якія зьяўляюцца часткай самога клясу, могуць атрымліваць доступ да такіх палёў ці мэтадаў.
 
'''Protected''' ([[Ангельская мова|анг.]] абаронены) дазваляе самому клясу і ўсім ягоным падклясам зьвяртацца да палёў і мэтадаў клясу.
'''Public''' ([[Ангельская мова|анг.]] агульны) азначае, што ўсе могуць атрымаць доступ да поля ці мэтада клясу па ягоным імі.
 
У дадатак, некаторыя мовы праграмаваньня, напрыклад [[C++]], падтрымліваюць мэханізм, калі функцыя ці кляс, апісаныя як сябар клясаклясу, могуць атрымліваць доступ да яго палёў і мэтадаў, вызначаных як private і protected.
 
== Адносіны між клясамі ==
 
* НасьледваньнеСпадкаваньне — аб'екты аднаго клясаклясу (нашчадка) насьледуюцьспадкуюць усе ўласьцівасьці іншага клясу (продка)
* Асацыяцыя — аб'екты клясаў узаемадзейнічаюць адзін з адным.
* Агрэгацыя — аб'екты аднаго клясу ўваходзяць у склад іншага клясу.
public class Example1
{
// Гэта кляс на мове Java, ён аўтаматычна пашыраецца ад клясаклясу Object
public static void main (String args[]) {
System.out.println("Hello world!");
public class Example2 extends Example1
{
// Гэта кляс, які пашыраецца ад клясаклясу, створанага ў першым прыкладзе.
protected int data;
 
public Example2()
{
// Гэта канструктар клясаклясу. Ён не вяртае ніякага значэньня.
data = 1;
}
</source>
 
Гэта згаданы вышэй прыклад на мове C++, перапісаны на мове C#. Кляс, які называецца Hello, ствараецца канструктарам, які прымае радковы парамэтар. Калі выклікаецца мэтад Say(), экзэмпляр клясаклясу Hello выведзе «Hello {what}!» на кансоль. Тут варта зьвярнуць увагу на тое, што мэтад Main() (кропка ўваходу) утрымліваецца ў самім клясе.
 
=== [[Object Pascal]]/[[Delphi]] ===
<source lang="delphi">
type
public
procedure Hello(s:string);
procedure Say;
end;
procedure THello.Hello(s:string);
begin
FWhat := s;
end;
procedure THello.Say;
begin
WriteLn('Hello ' + FWhat + '!');
end;
Hello('world');
Say;
Free;
end;
end;
</source>