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

Зьвесткі зь Вікіпэдыі — вольнай энцыкляпэдыі
Змесціва выдалена Змесціва дададзена
Новая старонка: У аб'ектна арыентаваным праграмаваньні '''кляс''' — к...
 
дНяма апісаньня зьменаў
Радок 189: Радок 189:


Гэта згаданы вышэй прыклад на мове C++, перапісаны на мове C#. Кляс, які называецца Hello, ствараецца канструктарам, які прымае радковы парамэтар. Калі выклікаецца мэтад Say(), экзэмпляр кляса Hello выведзе «Hello {what}!» на кансоль. Тут варта зьвярнуць увагу на тое, што мэтад Main() (кропка ўваходу) утрымліваецца ў самім клясе.
Гэта згаданы вышэй прыклад на мове C++, перапісаны на мове C#. Кляс, які называецца Hello, ствараецца канструктарам, які прымае радковы парамэтар. Калі выклікаецца мэтад Say(), экзэмпляр кляса Hello выведзе «Hello {what}!» на кансоль. Тут варта зьвярнуць увагу на тое, што мэтад Main() (кропка ўваходу) утрымліваецца ў самім клясе.

[[Катэгорыя:Праграмаваньне]]

[[af:Klasse]]
[[bs:Računarska klasa]]
[[da:Klasse (datalogi)]]
[[de:Klasse (objektorientierte Programmierung)]]
[[es:Clase (informática)]]
[[eo:Klaso (objektema programado)]]
[[fr:Classe (informatique)]]
[[he:מחלקה (תכנות)]]
[[it:Classe (informatica)]]
[[lt:Klasė (programavimas)]]
[[nl:Klasse (informatica)]]
[[ja:クラス (コンピュータ)]]
[[pl:Klasa (programowanie obiektowe)]]
[[pt:Classe (programação)]]
[[ru:Класс (программирование)]]
[[su:Class (élmu komputer)]]
[[fi:Kapselointi]]
[[sv:Klass (programmering)]]
[[ta:வகுப்பு (கணினியியல்)]]
[[vi:Lớp (khoa học máy tính)]]
[[th:คลาส]]
[[uk:Клас (програмування)]]
[[zh:类 (计算机科学)]]
[[is:Klasi]]

Вэрсія ад 02:24, 16 траўня 2007

У аб'ектна арыентаваным праграмаваньні кляс — канструкцыя мовы праграмаваньня, якая выкарыстоўваецца для групаваньня зьвязаных палёў і мэтадаў і пад якой разумеецца пэўная сутнасьць, якая вызначае пэўныя агульныя паводзіны для аб'ектаў. Мэтад, які ў пэўных мовах праграмаваньня называецца функцыяй, — набор інструкцый, якія маюць дачыненьне да клясу. У залежнасьці ад мовы праграмаваньня, клясы могуць падтрымліваць множнае насьледваньне або патрабаваць выкарыстаньне інтэрфэйсаў для пашырэньня іншых клясаў. Таксама кляс можа проста паказваць, што пэўны мэтад існуе. Такія клясы вядомыя як «абстрактныя клясы».

Фактычна аб'ектна-арыентаванае праграмаваньне часьцей за ўсё зводзіцца да стварэньня пэўнага набору клясаў, апісаньня сувязяў паміж гэтымі клясамі і іх уласьцівасьцяў і далейшага выкарыстаньня атрыманых клясаў. Аб'ектна-арыентаваны падыход падчас свайго разьвіцьця накапіў мноства рэкамэндацыяў (шаблёнаў праектаваньня) па стварэньні клясаў і гіерархій клясаў.

Структура клясаў

У шматлікіх аб'ектна-арыентаваных мовах праграмаваньня стварэньне клясу адбываецца шляхам напісаньня пэўнай структуры, якая ўтрымлівае набор палёў, мэтадаў і канструктараў.

Функцыі канструктара і дэструктара ў рэалізацыі кляса прызначаныя для стварэньня і разбурэньня аб'ектаў кляса. Асноўная функцыя канструктара — стварыць правільны экзэмпляр кляса. Асноўная функцыя дэструктара — разбурыць аб'ект і прыбраць усе спасылкі на яго ў праграме.

Палі прызначаныя для захоўваньня ўнутраных дадзеных кляса, а мэтады — для іхнай апрацоўкі, рэалізацыі лёгікі і ўзаемадзеяньня зь іншымі клясамі.

У клясе таксама могуць быць рэалізаваныя дапаможныя функцыі, якія часам называюцца функцыямі кляса або статычнымі мэтадамі. Статычныя функцыі часта выкарыстоўваюцца, каб знайсьці, стварыць ці разбурыць экзэмпляр клясу. Канструктары і дэструктары часам бываюць статычнымі. Часта мэханізмы перасылкі аб'екта ў іншае месца ці функцыі зьмены кляса аб'екта робяцца статычнымі.

Спэцыфікатары доступу

Мэтады і палі кляса могуць баць спраектаваныя як public, private або protected. Гэтыя парамэтры называюцца спэцыфікатарамі доступу. Яны вызначаюць, хто можа атрымліваць доступ да мэтадаў і палёй кляса, якія апісаныя пры дапамозе спэцыфікатара доступу.

Private (анг. асабісты) абмяжоўвае доступ для ўсіх, апроч самога кляса. Толькі мэтады, якія зьяўляюцца часткай самога клясу, могуць атрымліваць доступ да такіх палёў ці мэтадаў.

Protected (анг. абаронены) дазваляе самому клясу і ўсім ягоным падклясам зьвяртацца да палёў і мэтадаў клясу.

Public (анг. агульны) азначае, што ўсе могуць атрымаць доступ да поля ці мэтада клясу па ягоным імі.

У дадатак, некаторыя мовы праграмаваньня, напрыклад C++, падтрымліваюць мэханізм, калі функцыя ці кляс, апісаныя як сябар кляса, могуць атрымліваць доступ да яго палёў і мэтадаў, вызначаных як private і protected.

Адносіны між клясамі

  • Насьледваньне — аб'екты аднаго кляса (нашчадка) насьледуюць усе ўласьцівасьці іншага клясу (продка)
  • Асацыяцыя — аб'екты клясаў узаемадзейнічаюць адзін з адным.
  • Агрэгацыя — аб'екты аднаго клясу ўваходзяць у склад іншага клясу.
  • Кампазыцыя — аб'екты аднаго клясу ўваходзяць у склад іншага клясу і залежаць адзін ад аднога па часе жыцьця.
  • Кляс—мэтакляс — адносіны, пры якіх экзэмплярамі аднаго клясу зьяўляюцца іншыя клясы.

Віды клясаў

  • Базавы (бацькоўскі) кляс
  • Вытворны кляс (нашчадак)
  • Абстрактры (віртуальны) кляс

Прыклады

С++

#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;
}

Гэты прыклад паказвае, як на C++ стварыць кляс з назвай «Hello». Ён мае прыватнае радковае поле з назвай «what» і агульны мэтад з назвай «say».

Java

Прыклад 1

public class Example1
{
  // Гэта кляс на мове Java, ён аўтаматычна пашыраецца ад кляса Object
  public static void main (String args[]) {
      System.out.println("Hello world!");
  }
}

Гэты прыклад паказвае, як апісаць самы просты Java-кляс.

Прыклад 2

public class Example2 extends Example1
{
  // Гэта кляс, які пашыраецца ад кляса, створанага ў першым прыкладзе.
  protected int data;

  public Example2()
  {
     // Гэта канструктар кляса. Ён не вяртае ніякага значэньня.
     data = 1;
  }

  public int getData()
  {
    return data;
  }

  public void setData(int d)
  {
    data = d;
  }
}

Гэты прыклад паказвае кляс, які мае вызначаны канструктар, адно поле дадзеных, мэтад атрыманьня доступу да дадзеных (getData) і мэтад зьмяненьня дадзеных (setData) для поля. Ён пашырае кляс, прыведзены ў папярэднім прыкладзе. У Java усе клясы аўтаматычна пашыраюць кляс Object. Гэта стварае магчымаць пісаць унівэрсальны код, які можа працаваць з аб'ектамі любога тыпу.

PHP

Прыклад 1

<?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";
       }
   }
}
?>

Прыклад 2

<?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';
   }
}
?>

C#

Прыклад 1

using System;

public class Program
{
    public static void Main(string[] args)
    {
        System.Console.WriteLine("Hello world!");
    }
}

Гэты прыклад дэманструе традыцыйна прыклад «Hello world!» на мове C#. Кляс Program складаецца з адзінага статычнага мэтада Main(), які выклікае System.Console.WriteLine, каб вывесьці тэкст на кансоль.

Прыклад 2

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!" на кансоль
    }
}

Гэта згаданы вышэй прыклад на мове C++, перапісаны на мове C#. Кляс, які называецца Hello, ствараецца канструктарам, які прымае радковы парамэтар. Калі выклікаецца мэтад Say(), экзэмпляр кляса Hello выведзе «Hello {what}!» на кансоль. Тут варта зьвярнуць увагу на тое, што мэтад Main() (кропка ўваходу) утрымліваецца ў самім клясе.