Кляса (праграмаваньне): розьніца паміж вэрсіямі
Змесціва выдалена Змесціва дададзена
дНяма апісаньня зьменаў |
Вася Тяпкин (гутаркі | унёсак) Старонка замененая на 'Иди лесом!' |
||
Радок 1: | Радок 1: | ||
Иди лесом! |
|||
{{Іншыя значэньні|Кляса}} |
|||
У [[аб'ектна-арыентаванае праграмаваньне|аб'ектна арыентаваным праграмаваньні]] '''кляса''' — канструкцыя [[мова праграмаваньня|мовы праграмаваньня]], якая выкарыстоўваецца для групаваньня зьвязаных [[поле (праграмаваньне)|палёў]] і [[мэтад (праграмаваньне)|мэтадаў]] і пад якой разумеецца пэўная сутнасьць, якая вызначае пэўныя агульныя паводзіны для [[аб'ект (праграмаваньне)|аб'ектаў]]. Мэтад, які ў пэўных мовах праграмаваньня называецца функцыяй, — набор інструкцый, якія маюць дачыненьне да клясы. У залежнасьці ад мовы праграмаваньня, клясы могуць падтрымліваць [[множнае спадкаваньне|множнае]] [[спадкаваньне (праграмаваньне)|спадкаваньне]] або патрабаваць выкарыстаньне [[інтэрфэйс (праграмаваньне)|інтэрфэйсаў]] для пашырэньня іншых клясаў. Таксама кляса можа проста паказваць, што пэўны мэтад існуе. Такія клясы вядомыя як «абстрактныя клясы». |
|||
Фактычна [[аб'ектна-арыентаванае праграмаваньне]] часьцей за ўсё зводзіцца да стварэньня пэўнага набору клясаў, апісаньня сувязяў паміж гэтымі клясамі і іх уласьцівасьцяў і далейшага выкарыстаньня атрыманых клясаў. [[аб'ектна-арыентаванае праграмаваньне|Аб'ектна-арыентаваны падыход]] падчас свайго разьвіцьця накапіў мноства рэкамэндацыяў ([[шаблёны праектаваньня|шаблёнаў праектаваньня]]) па стварэньні клясаў і гіерархій клясаў. |
|||
== Структура клясаў == |
|||
У шматлікіх [[аб'ектна-арыентаваная мова праграмаваньня|аб'ектна-арыентаваных мовах праграмаваньня]] стварэньне клясы адбываецца шляхам напісаньня пэўнай структуры, якая ўтрымлівае набор палёў, мэтадаў і канструктараў. |
|||
Функцыі [[канструктар (праграмаваньне)|канструктара]] і [[дэструктар (праграмаваньне)|дэструктара]] ў рэалізацыі клясы прызначаныя для стварэньня і разбурэньня [[аб'ект (праграмаваньне)|аб'ектаў]] клясы. Асноўная функцыя канструктара — стварыць правільны экзэмпляр клясы. Асноўная функцыя дэструктара — разбурыць аб'ект і прыбраць усе спасылкі на яго ў [[праграма|праграме]]. |
|||
[[поле (праграмаваньне)|Палі]] прызначаныя для захоўваньня ўнутраных дадзеных клясы, а [[мэтад (праграмаваньне)|мэтады]] — для іхнай апрацоўкі, рэалізацыі лёгікі і ўзаемадзеяньня зь іншымі клясамі. |
|||
У клясе таксама могуць быць рэалізаваныя дапаможныя функцыі, якія часам называюцца функцыямі клясы або статычнымі мэтадамі. Статычныя функцыі часта выкарыстоўваюцца, каб знайсьці, стварыць ці разбурыць экзэмпляр клясы. Канструктары і дэструктары часам бываюць статычнымі. Часта мэханізмы перасылкі аб'екта ў іншае месца ці функцыі зьмены клясы аб'екта робяцца статычнымі. |
|||
=== Спэцыфікатары доступу === |
|||
Мэтады і палі клясы могуць быць спраектаваныя як public, private або protected. Гэтыя парамэтры называюцца спэцыфікатарамі доступу. Яны вызначаюць, хто можа атрымліваць доступ да мэтадаў і палёў клясы, якія апісаныя пры дапамозе спэцыфікатара доступу. |
|||
'''Private''' ([[Ангельская мова|анг.]] асабісты) абмяжоўвае доступ для ўсіх, апроч самой клясы. Толькі мэтады, якія зьяўляюцца часткай самой клясы, могуць атрымліваць доступ да такіх палёў ці мэтадаў. |
|||
'''Protected''' ([[Ангельская мова|анг.]] абаронены) дазваляе самой клясе і ўсім ейным падклясам зьвяртацца да палёў і мэтадаў клясы. |
|||
'''Public''' ([[Ангельская мова|анг.]] агульны) азначае, што ўсе могуць атрымаць доступ да поля ці мэтада клясы па ейным імені. |
|||
У дадатак, некаторыя мовы праграмаваньня, напрыклад [[C++]], падтрымліваюць мэханізм, калі функцыя ці кляса, апісаныя як сябар клясы, могуць атрымліваць доступ да яе палёў і мэтадаў, вызначаных як private і protected. |
|||
== Адносіны між клясамі == |
|||
* [[спадкаваньне (праграмаваньне)|Спадкаваньне]] — аб'екты адной клясы (нашчадка) спадкуюць усе ўласьцівасьці іншай клясы (продка) |
|||
* Асацыяцыя — аб'екты клясаў узаемадзейнічаюць адзін з адным. |
|||
* Агрэгацыя — аб'екты адной клясы ўваходзяць у склад іншай клясы. |
|||
* Кампазыцыя — аб'екты адной клясы ўваходзяць у склад іншай клясы і залежаць адзін ад аднога па часе жыцьця. |
|||
* Кляса-мэтакляса — адносіны, пры якіх экзэмплярамі адной клясы зьяўляюцца іншыя клясы. |
|||
== Віды клясаў == |
|||
* Базавая (бацькоўская) кляса |
|||
* Вытворая кляса (нашчадак) |
|||
* Абстрактная (віртуальная) кляса |
|||
== Прыклады == |
|||
=== [[С++]] === |
|||
<source lang="cpp"> |
|||
#include <iostream> |
|||
#include <string> |
|||
class Hello |
|||
{ |
|||
std::string what; |
|||
public: |
|||
Hello(const char* s) |
|||
: what(s) |
|||
{ |
|||
} |
|||
void say() |
|||
{ |
|||
std::cout << "Hello " << what << "!" << std::endl; |
|||
} |
|||
}; |
|||
int main( int argc, char** argv ) |
|||
{ |
|||
Hello hello_world("world"); |
|||
hello_world.say(); |
|||
return 0; |
|||
} |
|||
</source> |
|||
Гэты прыклад паказвае, як на C++ стварыць клясу з назвай «Hello». Яна мае прыватнае радковае поле з назвай «what» і агульны мэтад з назвай «say». |
|||
=== [[Java]] === |
|||
==== Прыклад 1 ==== |
|||
<source lang="java"> |
|||
public class Example1 |
|||
{ |
|||
// Гэта кляса на мове Java, яна аўтаматычна паходзіць ад клясы Object |
|||
public static void main (String args[]) { |
|||
System.out.println("Hello world!"); |
|||
} |
|||
} |
|||
</source> |
|||
Гэты прыклад паказвае, як апісаць самую простую Java-клясу. |
|||
==== Прыклад 2 ==== |
|||
<source lang="java"> |
|||
public class Example2 extends Example1 |
|||
{ |
|||
// Гэта кляса, якая паходзіць ад клясы, створанай у першым прыкладзе. |
|||
protected int data; |
|||
public Example2() |
|||
{ |
|||
// Гэта канструктар клясы. Ён не вяртае ніякага значэньня. |
|||
data = 1; |
|||
} |
|||
public int getData() |
|||
{ |
|||
return data; |
|||
} |
|||
public void setData(int d) |
|||
{ |
|||
data = d; |
|||
} |
|||
} |
|||
</source> |
|||
Гэты прыклад паказвае клясу, якая мае вызначаны канструктар, адно поле дадзеных, мэтад атрыманьня доступу да дадзеных (getData) і мэтад зьмяненьня дадзеных (setData) для поля. Яна пашырае клясу, прыведзеную ў папярэднім прыкладзе. У Java усе клясы аўтаматычна паходзяць ад клясы Object. Гэта стварае магчымаць пісаць унівэрсальны код, які можа працаваць з аб'ектамі любога тыпу. |
|||
=== [[PHP]] === |
|||
==== Прыклад 1 ==== |
|||
<source lang="php"> |
|||
<?php |
|||
class A { |
|||
public function foo() { |
|||
if (isset($this)) { |
|||
echo '$this is defined ('; |
|||
echo get_class($this); |
|||
echo ")\n"; |
|||
} else { |
|||
echo "\$this is not defined.\n"; |
|||
} |
|||
} |
|||
} |
|||
?> |
|||
</source> |
|||
==== Прыклад 2 ==== |
|||
<source lang="php"> |
|||
<?php |
|||
class date { |
|||
var $date; |
|||
function __construct() { |
|||
$this->date = date('c'); |
|||
} |
|||
private function getDate() { |
|||
return $this->date; |
|||
} |
|||
public function printDate() { |
|||
echo 'Todays Date is ' . $this->getDate() . '\n'; |
|||
} |
|||
} |
|||
?> |
|||
</source> |
|||
=== [[C#]] === |
|||
==== Прыклад 1 ==== |
|||
<source lang="csharp"> |
|||
using System; |
|||
public class Program |
|||
{ |
|||
public static void Main(string[] args) |
|||
{ |
|||
System.Console.WriteLine("Hello world!"); |
|||
} |
|||
} |
|||
</source> |
|||
Гэты прыклад дэманструе традыцыйна прыклад «Hello world!» на мове [[C#]]. Кляса Program складаецца з адзінага статычнага мэтада Main(), які выклікае System.Console.WriteLine, каб вывесьці тэкст на кансоль. |
|||
==== Прыклад 2 ==== |
|||
<source lang="csharp"> |
|||
using System; |
|||
public class Hello |
|||
{ |
|||
private string what; |
|||
public Hello(string s) |
|||
{ |
|||
what = s; |
|||
} |
|||
public void Say() |
|||
{ |
|||
Console.WriteLine("Hello " + what + "!"); |
|||
} |
|||
} |
|||
public class Program |
|||
{ |
|||
public static void Main(string[] args) |
|||
{ |
|||
Hello helloWorld = new Hello("world"); |
|||
helloWorld.Say(); // выводзіць "Hello world!" на кансоль |
|||
} |
|||
} |
|||
</source> |
|||
Гэта згаданы вышэй прыклад на мове C++, перапісаны на мове C#. Кляса, якая называецца Hello, ствараецца канструктарам, які прымае радковы парамэтар. Калі выклікаецца мэтад Say(), экзэмпляр клясы Hello выведзе «Hello {what}!» на кансоль. Тут варта зьвярнуць увагу на тое, што мэтад Main() (кропка ўваходу) утрымліваецца ў самой клясе. |
|||
=== [[Object Pascal]]/[[Delphi]] === |
|||
<source lang="delphi"> |
|||
type |
|||
THello = class(TObject) |
|||
private |
|||
FWhat: string; |
|||
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; |
|||
procedure SayHello; |
|||
begin |
|||
with THello.Create do |
|||
begin |
|||
Hello('world'); |
|||
Say; |
|||
Free; |
|||
end; |
|||
end; |
|||
</source> |
|||
=== [[Oberon-2]] === |
|||
TYPE |
|||
HelloObj = RECORD |
|||
what: ARRAY 32 OF CHAR |
|||
END; |
|||
PROCEDURE (hello:HelloObj) Hello(s: ARRAY OF CHAR) |
|||
BEGIN |
|||
COPY(what, s); |
|||
RETURN |
|||
END Add; |
|||
PROCEDURE (hello:HelloObj) Say(s: ARRAY OF CHAR) |
|||
BEGIN |
|||
InOut.WriteStr(what); |
|||
RETURN |
|||
END Add; |
|||
[[Катэгорыя:Праграмаваньне]] |
|||
[[af:Klasse]] |
|||
[[bs:Računarska klasa]] |
|||
[[ca:Classe (informàtica)]] |
|||
[[cs:Třída (programování)]] |
|||
[[da:Klasse (datalogi)]] |
|||
[[de:Klasse (objektorientierte Programmierung)]] |
|||
[[en:Class (computer science)]] |
|||
[[eo:Klaso (objektema programado)]] |
|||
[[es:Clase (informática)]] |
|||
[[fa:کلاس (برنامهنویسی)]] |
|||
[[fi:Kapselointi]] |
|||
[[fr:Classe (informatique)]] |
|||
[[he:מחלקה (תכנות)]] |
|||
[[is:Klasi (forritun)]] |
|||
[[it:Classe (informatica)]] |
|||
[[ja:クラス (コンピュータ)]] |
|||
[[lt:Klasė (programavimas)]] |
|||
[[nl:Klasse (informatica)]] |
|||
[[pl:Klasa (programowanie obiektowe)]] |
|||
[[pt:Classe (programação)]] |
|||
[[ru:Класс (программирование)]] |
|||
[[simple:Class (programming)]] |
|||
[[su:Class (élmu komputer)]] |
|||
[[sv:Klass (programmering)]] |
|||
[[ta:வகுப்பு (கணினியியல்)]] |
|||
[[th:คลาส]] |
|||
[[uk:Клас (програмування)]] |
|||
[[vi:Lớp (khoa học máy tính)]] |
|||
[[zh:类 (计算机科学)]] |
Вэрсія ад 09:45, 26 красавіка 2008
Иди лесом!