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

Змесціва выдалена Змесціва дададзена
кляс=кляса
Радок 1:
{{Іншыя значэньні|КлясКляса}}
 
У [[аб'ектна-арыентаванае праграмаваньне|аб'ектна арыентаваным праграмаваньні]] '''кляскляса''' — канструкцыя [[мова праграмаваньня|мовы праграмаваньня]], якая выкарыстоўваецца для групаваньня зьвязаных [[поле (праграмаваньне)|палёў]] і [[мэтад (праграмаваньне)|мэтадаў]] і пад якой разумеецца пэўная сутнасьць, якая вызначае пэўныя агульныя паводзіны для [[аб'ект (праграмаваньне)|аб'ектаў]]. Мэтад, які ў пэўных мовах праграмаваньня называецца функцыяй, — набор інструкцый, якія маюць дачыненьне да клясуклясы. У залежнасьці ад мовы праграмаваньня, клясы могуць падтрымліваць множнае [[спадкаваньне (праграмаваньне)|спадкаваньне]] або патрабаваць выкарыстаньне [[інтэрфэйс (праграмаваньне)|інтэрфэйсаў]] для пашырэньня іншых клясаў. Таксама кляскляса можа проста паказваць, што пэўны мэтад існуе. Такія клясы вядомыя як «абстрактныя клясы».
 
Фактычна [[аб'ектна-арыентаванае праграмаваньне]] часьцей за ўсё зводзіцца да стварэньня пэўнага набору клясаў, апісаньня сувязяў паміж гэтымі клясамі і іх уласьцівасьцяў і далейшага выкарыстаньня атрыманых клясаў. [[аб'ектна-арыентаванае праграмаваньне|Аб'ектна-арыентаваны падыход]] падчас свайго разьвіцьця накапіў мноства рэкамэндацыяў ([[шаблёны праектаваньня|шаблёнаў праектаваньня]]) па стварэньні клясаў і гіерархій клясаў.
Радок 7:
== Структура клясаў ==
 
У шматлікіх [[аб'ектна-арыентаваная мова праграмаваньня|аб'ектна-арыентаваных мовах праграмаваньня]] стварэньне клясуклясы адбываецца шляхам напісаньня пэўнай структуры, якая ўтрымлівае набор палёў, мэтадаў і канструктараў.
 
Функцыі [[канструктар (праграмаваньне)|канструктара]] і [[дэструктар (праграмаваньне)|дэструктара]] ў рэалізацыі клясуклясы прызначаныя для стварэньня і разбурэньня [[аб'ект (праграмаваньне)|аб'ектаў]] клясуклясы. Асноўная функцыя канструктара — стварыць правільны экзэмпляр клясуклясы. Асноўная функцыя дэструктара — разбурыць аб'ект і прыбраць усе спасылкі на яго ў [[праграма|праграме]].
 
[[поле (праграмаваньне)|Палі]] прызначаныя для захоўваньня ўнутраных дадзеных клясуклясы, а [[мэтад (праграмаваньне)|мэтады]] — для іхнай апрацоўкі, рэалізацыі лёгікі і ўзаемадзеяньня зь іншымі клясамі.
 
У клясе таксама могуць быць рэалізаваныя дапаможныя функцыі, якія часам называюцца функцыямі клясуклясы або статычнымі мэтадамі. Статычныя функцыі часта выкарыстоўваюцца, каб знайсьці, стварыць ці разбурыць экзэмпляр клясуклясы. Канструктары і дэструктары часам бываюць статычнымі. Часта мэханізмы перасылкі аб'екта ў іншае месца ці функцыі зьмены клясуклясы аб'екта робяцца статычнымі.
 
=== Спэцыфікатары доступу ===
 
Мэтады і палі клясуклясы могуць быць спраектаваныя як public, private або protected. Гэтыя парамэтры называюцца спэцыфікатарамі доступу. Яны вызначаюць, хто можа атрымліваць доступ да мэтадаў і палёў клясуклясы, якія апісаныя пры дапамозе спэцыфікатара доступу.
 
'''Private''' ([[Ангельская мова|анг.]] асабісты) абмяжоўвае доступ для ўсіх, апроч самогасамой клясуклясы. Толькі мэтады, якія зьяўляюцца часткай самогасамой клясуклясы, могуць атрымліваць доступ да такіх палёў ці мэтадаў.
 
'''Protected''' ([[Ангельская мова|анг.]] абаронены) дазваляе самомусамой клясуклясе і ўсім ягонымейным падклясам зьвяртацца да палёў і мэтадаў клясуклясы.
 
'''Public''' ([[Ангельская мова|анг.]] агульны) азначае, што ўсе могуць атрымаць доступ да поля ці мэтада клясуклясы па ягонымейным іміімені.
 
У дадатак, некаторыя мовы праграмаваньня, напрыклад [[C++]], падтрымліваюць мэханізм, калі функцыя ці кляскляса, апісаныя як сябар клясуклясы, могуць атрымліваць доступ да ягояе палёў і мэтадаў, вызначаных як private і protected.
 
== Адносіны між клясамі ==
 
* Спадкаваньне — аб'екты аднагоадной клясуклясы (нашчадка) спадкуюць усе ўласьцівасьці іншагаіншай клясуклясы (продка)
* Асацыяцыя — аб'екты клясаў узаемадзейнічаюць адзін з адным.
* Агрэгацыя — аб'екты аднагоадной клясуклясы ўваходзяць у склад іншагаіншай клясуклясы.
* Кампазыцыя — аб'екты аднагоадной клясуклясы ўваходзяць у склад іншагаіншай клясуклясы і залежаць адзін ад аднога па часе жыцьця.
* КлясКляса-мэтаклясмэтакляса — адносіны, пры якіх экзэмплярамі аднагоадной клясуклясы зьяўляюцца іншыя клясы.
 
== Віды клясаў ==
 
* Базавая (бацькоўская) кляса
* Базавы (бацькоўскі) кляс
* ВытворныВытворая кляскляса (нашчадак)
* Абстрактная (віртуальная) кляса
* Абстрактры (віртуальны) кляс
 
== Прыклады ==
Радок 74:
</source>
 
Гэты прыклад паказвае, як на C++ стварыць клясклясу з назвай «Hello». ЁнЯна мае прыватнае радковае поле з назвай «what» і агульны мэтад з назвай «say».
 
=== [[Java]] ===
Радок 83:
public class Example1
{
// Гэта кляскляса на мове Java, ёняна аўтаматычна пашыраеццапаходзіць ад клясуклясы Object
public static void main (String args[]) {
System.out.println("Hello world!");
Радок 90:
</source>
 
Гэты прыклад паказвае, як апісаць самысамую простыпростую Java-клясклясу.
 
==== Прыклад 2 ====
Радок 97:
public class Example2 extends Example1
{
// Гэта кляскляса, якіякая пашыраеццапаходзіць ад клясуклясы, створанагастворанай ўу першым прыкладзе.
protected int data;
 
public Example2()
{
// Гэта канструктар клясуклясы. Ён не вяртае ніякага значэньня.
data = 1;
}
Радок 118:
</source>
 
Гэты прыклад паказвае клясклясу, якіякая мае вызначаны канструктар, адно поле дадзеных, мэтад атрыманьня доступу да дадзеных (getData) і мэтад зьмяненьня дадзеных (setData) для поля. ЁнЯна пашырае клясклясу, прыведзеныпрыведзеную ў папярэднім прыкладзе. У Java усе клясы аўтаматычна пашыраюцьпаходзяць клясад клясы Object. Гэта стварае магчымаць пісаць унівэрсальны код, які можа працаваць з аб'ектамі любога тыпу.
 
=== [[PHP]] ===
Радок 174:
</source>
 
Гэты прыклад дэманструе традыцыйна прыклад «Hello world!» на мове [[C#]]. КлясКляса Program складаецца з адзінага статычнага мэтада Main(), які выклікае System.Console.WriteLine, каб вывесьці тэкст на кансоль.
 
==== Прыклад 2 ====
Радок 205:
</source>
 
Гэта згаданы вышэй прыклад на мове C++, перапісаны на мове C#. КлясКляса, якіякая называецца Hello, ствараецца канструктарам, які прымае радковы парамэтар. Калі выклікаецца мэтад Say(), экзэмпляр клясуклясы Hello выведзе «Hello {what}!» на кансоль. Тут варта зьвярнуць увагу на тое, што мэтад Main() (кропка ўваходу) утрымліваецца ў самімсамой клясе.
 
=== [[Object Pascal]]/[[Delphi]] ===