Posted in

C# OOP

Objektorienteeritud programmeerimise mõisted. Ajalugu

Objektorienteeritud programmeerimine (OOP) on programmeerimise paradigma, mis kasutab “objekte” – andmestruktuure, mis koosnevad andmeväljadest ning meetoditest. Kasutusel võivad olla selliseid võtted nagu andmete abstraktsioon, kapseldamine, modulaarsus, polümorfism ning pärimine. Kuni 1990-ndateni polnud objektorienteeritud programmeerimine tarkvaraarenduses kuigivõrd levinud, kuid tänapäeval on selle tugi juba paljudesse programmeerimiskeeltesse sisse ehitatud.


Объектно-ориентированное программирование (ООП) — это парадигма программирования, которая использует «объекты» — структуры данных, состоящие из полей данных и методов. Могут использоваться такие приемы, как абстракция данных, инкапсуляция, модульность, полиморфизм и наследование. До 1990-х годов объектно-ориентированное программирование не было широко распространено в разработке программного обеспечения, но сегодня его поддержка уже встроена во многие языки программирования.

Põhilised ideed

Klass

Pikemalt artiklis Klass (programmeerimine)

Klass defineerib olemi (objekti) abstraktsed omadused, muuhulgas ka olemi iseloomustavad omadused ning olemi käitumise ja oskused. Klass on nagu šabloon, mis kirjeldab millegi olemust. Näiteks klass Koer koosneks kõigile koertele omastest omadustest nagu näiteks tõug ja kasuka värv ning oskustest nagu haukumine ja istumine. Objektorienteeritud programmis on klassid need, mis pakuvad modulaarsust ning struktuuri.

Näide:

public class Inimene
{
    public string Nimi;
    public int Vanus;

    public void Tervita()
    {
        Console.WriteLine("Tere! Mina olen " + Nimi);
    }
}


Класс определяет абстрактные свойства объекта, в том числе его характерные черты, поведение и навыки. Класс — это как шаблон, который описывает сущность чего-либо. Например, класс «Собака» состоит из свойств, присущих всем собакам, таких как порода и окрас шерсти, а также навыков, таких как лай и сидение. В объектно-ориентированной программе классы обеспечивают модульность и структуру.

Objekt

Objekt on klassi eksemplar.

<private>, <protected>, <public>

Eksemplar

Klassist saab luua eksemplari. Eksemplar on tegelik objekt, mis tekitatakse programmi täitmisajal. Objekt Pauka on klassi Koer eksemplar. Objekti olekuks nimetatakse tema atribuutide väärtust. Objekt koosneb olekust ning käitumisviisidest, mis on defineeritud selle objekti klassis.


Из класса можно создать экземпляр. Экземпляр — это реальный объект, который создается во время выполнения программы. Объект Pauka является экземпляром класса «Собака». Состояние объекта определяется значениями его атрибутов. Объект состоит из состояния и поведения, которые определены в классе этого объекта.

Meetod

Meetod on objekti võime midagi teha. Meetodeid märgitakse tegusõnaga. Pauka on Koer, seega on tal võime haukuda. Seega haugu() on üks Pauka meetoditest. Tal võib olla ka teisi meetodeid, näiteks istu(), söö() või kõnni(). Meetod mõjutab tavaliselt ainult ühte kindlat objekti. Kõik Koer tüüpi objektid suudavad haukuda, kuid on vaja panna üks kindel koer haukuma.


Метод — это способность объекта что-то делать. Методы обозначаются глаголом. Паука — это собака, поэтому она умеет лаять. Таким образом, гавкать() является одним из методов Паука. У него могут быть и другие методы, например сидеть(), есть() или ходить(). Метод обычно влияет только на один конкретный объект. Все объекты типа Собака могут гавкать, но нужно заставить гавкать одну конкретную собаку.

Pärimine

Alamklassid on klassi kitsam versioon, mis pärib omadused ja käitumise oma ülemklassilt ning võivad lisada enda omi. Näiteks klass Koer võib omada alamklasse Terjer, Taks. Pauka võiks ka olla klassi Koer alamklassi Hurt eksemplar. Oletame, et klass Koer defineerib meetodi haugu() ning omaduse kasukaVärv. Iga selle alamklass pärib need liikmed ehk kood tuleb kirjutada ainult üks kord. Iga alamklass saab ka muuta oma päritud omadusi, näiteks vaikimisi oleks kasukaVärv Taks tüüpi objektidel pruunikas. Pärimine on “x on y” seose tüüp. Hurt on Koer, Pauka on Hurt. Seega omab objekt Pauka omadusi nii klassist Hurt kui ka klassist Koer.


Подклассы — это более узкие версии классов, которые наследуют свойства и поведение от своих родительских классов и могут добавлять свои собственные. Например, класс «Собака» может иметь подклассы «Терьер» и «Такса». Паука также может быть экземпляром подкласса «Хорт» класса «Собака». Предположим, что класс «Собака» определяет метод haugu() и свойство kasukaVärv. Каждый его подкласс наследует эти члены, то есть код нужно писать только один раз. Каждый подкласс может также изменять свои унаследованные свойства, например, по умолчанию kasukaVärv для объектов типа Такса будет коричневым. Наследование — это тип связи «x является y». Шерсть — это Собака, Паука — это Шерсть. Таким образом, объект Паука имеет свойства как от класса Шерсть, так и от класса Собака.

Abstraktsioon

Abstraktsioon on keerulise reaalse probleemi lihtsustamine modelleerides probleemile vastavaid klasse ning probleemile vastaval pärimisastmel. Näiteks võib Paukat, kes on Koer, käsitleda kui Koer tüüpi objekti suurem osa ajast, Hurt tüüpi objekti, kui on vaja ligi pääseda tema hurdalikele omadustele ja käitumisele ning Loom tüüpi objekti (Koer ülemklass), kui Juku tahab kokku lugeda, kui palju on tal lemmikloomi. Abstraktsiooni saavutatakse ka kompositsiooni abil. Näiteks klass Auto sisaldab Mootor, Käigukast, Roolisüsteem ja palju muid tüüpi objekte. Klassi Auto loomiseks ei ole vaja teada, kuidas erinevad komponendid sisemiselt töötavad, kuid on vaja teada, kuidas nendega suhelda (saata ja vastu võtta teateid).


Абстракция — это упрощение сложной реальной проблемы путем моделирования классов, соответствующих проблеме, и уровня наследования, соответствующего проблеме. Например, Паукат, который является Собакой, может рассматриваться как объект типа Собака большую часть времени, объект типа Хорт, когда необходимо получить доступ к его шерстистым свойствам и поведению, и объект типа Животное (надкласс Собака), когда Юку хочет подсчитать, сколько у него домашних животных. Абстракция также достигается с помощью композиции. Например, класс «Автомобиль» содержит «Двигатель», «Коробка передач», «Рулевая система» и многие другие типы объектов. Для создания класса «Автомобиль» не нужно знать, как работают различные компоненты внутри, но нужно знать, как с ними взаимодействовать (отправлять и принимать сообщения).

Kapseldamine

Kapseldamine eraldab klassi funktsionaalse sisu ja liidese. Meetodi haugu() sisu defineerib, kuidas haukumine toimub (hingaSisse(), hingaVälja(), teeTeatudKõrgusegaHäält()). Juku ei pea teadma, kuidas see kõik tegelikult toimub, talle on vaja teada, kuidas seda esile kutsuda. Kapseldamise saavutamiseks kirjeldatakse, millised klassid võivad objekti liikmeid kasutada. Tulemuseks on see, et objekt eksponeerib igale klassile kindla liidese – liikmed, mis on sellele klassile kättesaadavad. Eesmärgiks on see, et selle liidese kliendid ei sõltuks realisatsiooni nendest osadest, mis võivad tulevikus muutuda. Muudatuste tegemine muutub aga lihtsamaks.


Капсулирование отделяет функциональное содержание класса и интерфейс. Содержание метода haugu() определяет, как происходит лай (hingaSisse(), hingaVälja(), teeTeatudKõrgusegaHäält()). Juku не должен знать, как все это происходит на самом деле, ему нужно знать, как это вызвать. Для достижения инкапсуляции описывается, какие классы могут использовать члены объекта. В результате объект экспонирует для каждого класса определенный интерфейс — члены, доступные для этого класса. Цель состоит в том, чтобы клиенты этого интерфейса не зависели от тех частей реализации, которые могут измениться в будущем. При этом внесение изменений становится проще.

Polümorfism

Polümorfism võimaldab programmeerijal käsitleda päritud klassi eksemplare kui ülemklassi eksemplare. Polümorfism tähendab seda, et erinevat tüüpi objektid reageerivad sama nimega meetodi väljakutsetele, kuid käitumine sõltub objekti tüübist. Olgu meil klassid Koer ja Siga, mis on mõlemad päritud klassist Loom, mis sisaldab meetodit ütleMidagi(). Nii Siga kui ka Koer tüüpi objektid sisaldavad meetodit ütleMidagi(), kuid selle meetodi sisu on kahel erinev. Kui meil on Koer tüüpi objekt koer ja Siga tüüpi objekt siga, aga me käsitleme neid kui Loom tüüpi objekte, siis on mõlemad võimalik panna häälitsema, kasutades meetodit ütleMidagi(), objekti koer puhul aga kutsutakse objektisiseselt välja meetod haugu() ning objekti siga puhul meetod röhitse().


Полиморфизм позволяет программисту рассматривать экземпляры унаследованного класса как экземпляры суперкласса. Полиморфизм означает, что объекты разных типов отвечают на вызовы методов с одинаковым именем, но поведение зависит от типа объекта. Рассмотрим классы Dog и Pig, оба из которых унаследованы от класса Animal, который содержит метод saySomething(). Оба объекта Pig и Dog содержат метод saySomething(), но содержимое этого метода для них различно. Если у нас есть объект типа Dog и объект типа Pig, но мы рассматриваем их как объекты типа Animal, то оба можно заставить издавать звук с помощью метода saySomething(), но в случае объекта Dog внутри вызывается метод bark(), а в случае объекта Pig внутри вызывается метод burp().

Leave a Reply

Your email address will not be published. Required fields are marked *