Създаване на класове дървета
Глава 22. ООП: цялостна картина
защо този модел се нарича обектно-ориентиран - винаги има обект, върху които се извършват действия. Повече Реа listichnom Например, ние може да се нарече метод наречен giveRaise, приложен като атрибут към класа на служителите, - обадете се на този метод би бил безсмислен без работникът или служителят, който дава почасово заплащане.
Както ще видим по-късно, Python предава метод включва специален екземпляр на първия аргумент в съответствие с с покани наричат себе си. Знаем също така, че може да ви методи както чрез свързване елементи (например, bob.giveRaise ()) и Th нарязани класове (например, Employee.giveRaise (Боб)), и двете от които се образува Ур rayut същата роля в нашата сценарии. За да видите как Мето ди вземат предполагаемите случаи ние трябва да се помисли за програмиране примери.
Въпреки абстрактност нашите разговори, обаче, за лисиците Ku на всички тези идеи е истински код. Ние създаваме дървета и предмети в тях с помощта на инструкции класа и кол класовете, които по-късно ще разгледаме по-подробно. С две думи:
• Всяка инструкция клас създава нов обект клас.
• Всеки път, когато един клас се нарича, той създава нов обект екв zemplyara.
• Копия са автоматично свързани с класовете, от които те са били създадени.
• класове са свързани с техните superclasses изброени в скоби по отношение заплодени за първи път с глава клас инструкция - от порядъка на списъка определя реда на дървото.
За да създадете дървото е показано на фиг. 22.1, например, можем да използваме следния код (тук свалих изпълнителните класове zatsiyu):
# Свързани с техните класове
Тук ние се изгради един клас от обекти дърво от следните три instruk клас ТА, и две копия на обекта като се обаждате клас С1 два пъти, за това дали ЕС би било, че това е обичайна характеристика. Копия помнят класа на кото бодното са създадени и клас C1 осъзнава своята суперкласа.
От техническа гледна точка, този пример се използва това, което се нарича множествено наследяване. което означава, че не е реплика клас има повече от един суперкласа от един клас в дървото.
Обектно-ориентиран от височина 30000 фута
Езикът на Python, когато инструкция клас enumerable в кръгли скоби Лено повече от един суперкласа (в случая на C1 клас в най-малко) им ред, определя реда, от ляво на дясно на ИМ ка атрибути в superclasses.
Защото от функциите за търсене в дървото наследство има големи стойности от които на обектите се присъединиха един или друг атрибут - по този начин, определен от неговия обхват. Атрибути Присъединете mye за случаи да принадлежи само на конкретният случай рамки, но атрибути, които се прикрепят към един клас, споделете усмихнати всички подкласовете и инстанции. По-късно ще разгледаме по-подробно на кода, който изпълнява атрибути за свързване на тези обекти. Можем да видим, че:
• атрибути обикновено се прикрепват към класове, използвайки instruk ции за присвояване в клас обучение, а не в вложени деф придружаващи инструкциите, определяне на функцията.
• атрибути обикновено се прилагат за модел посредством стойности при svaivaniya специален спор с името на себе си, отново, че дадено от функциите в рамките на часове.
Например, класове определят поведението на техните функции случаи Pomo schyu да инструктира дефиниция в клас инструкция. Тъй като вложени деф обучение се извършва на имена svaivanie рамките на един клас, те са свързани с обекти под формата на класове и атрибути ще бъде наследен от всички инстанции и подкласове:
Синтаксис деф инструкции в този контекст - напълно нормално. От функционална гледна точка, когато се появи отчета за деф рамките клас обучение, както в този пример, това е често Me + Тод се обади и автоматично заема специално първото спор с IME то себе си, който съдържа позоваване на конкретния екземпляр. 1
Тъй класовете са мелници способни да продуцират набор от случаи, техните методи обикновено използват този получава
1 Ако някога трябва да използвате езика C ++ или Java, вие лесно ще се разбере, че себе си в името на Python - това е същото като указател към това, но в Python аргумент самостоятелно винаги се използва изрично да ETS лат боравене атрибути по-очевидна ,
Глава 22. ООП: цялостна картина
автоматичен, самостоятелно аргумент за или промяна на конкретен случай на стойностите на атрибутите, които се обработват Мето къща. В предишния кодовият фрагмент име се използва самостоятелно etsya да спаси името на служител в конкретен случай.
Подобно на прости променливи, класове, както и случаи на атрибути не са обявени предварително, и там, когато за първи път се извършва прехвърляне на ценности. Когато методът задава стойност на атрибут чрез използване на името на себе си, по този начин той създава инстанция на атрибута на ходене в дървото класове ниско ниво (тоест, в един от най-правоъгълници), тъй като името е автоматично самостоятелно се отнася до случай на Тива зърно.
В действителност, се дължи на факта, че всички обекти в дървото клас - това е просто пространство от имена на обекти, ние може да получи или да установим някои от техните атрибути, като се използват съответните имена. Например, C1.setname същия израз важи както I1.setname, с уговорката, че C1 и I1 са имената в кода на VD Mosti.
В момента C1 клас не добавите име атрибут ekzemp lyaram до метод setname се нарича. Всъщност, опитът да се назоват Obra titsya I1.name I1.setname до резултати за разговор за грешка информиране на неопределена име. Ако даден клас ще трябва да се гарантира, че атрибутът като име, винаги ще бъде най-не се появи в копията, а след това трябва да се създаде този атрибут на сцената на класа, както е показано по-долу:
В този случай, интерпретатора на Питон автоматично извиква метод наречен __init__ всеки път, когато създавате инстанция на класа. Новият модел ще бъде прехвърлена към метода на __init__ като първи аргумент на самия себе си, както и всички стойности, които са посочени в скоби, когато се обаждате на класа, ще бъдат предадени във втората и последващите аргументи, които стоят зад него. В резултат на това инициализация на копията ще се проведе в момента на създаването им, без да се налага да се обадя ителн методи за реклами.
__init__ метод е известен като конструктор. тъй като тя започва от инстанция на етапа на проектиране. Този метод е представител на голям клас методи наречени метод Е + претоварване оператор. Подробности за тези методи ще се разглеждат в следващите глави. Такива методи са наследени в дървото на класа, както обикновено, а имената им започват и завършват с два
Обектно-ориентиран от височина 30000 фута
подчертава, да се подчертае тяхната специална за провеждане. Преводачът Python ги повдига автоматично, когато ekzemp lyary, които ги подкрепят, са въвлечени в съответните сделки, и те са най-вече просто алтернатива на предизвикателствата todov IU. Освен това, те са по избор: ако няма такива случаи съответните операции, които не се поддържат.
Например, за да се реализира на кръстовището от наборите на класа могат предварително dusmotret изпълнение пресичат метод или претоварване на Описвайки логиката на работата му в метод, наречен __and__. Тъй като сте използвали копия от декларациите прави по-скоро като на вградения видове, като ви дава възможност да предоставят определени класове neprotivore безпокоя и естествен интерфейс и да са съвместими със софтуера кода на Ним, която включва редица операции на даден обект E вграждани в апаратите.
Обектно-ориентиран - това е повторно използване на код
Тук, в общи линии, както и всички описания на ООП в Python език (с изключение на някои синтактични функции). Разбира се, присъствието на ООП "съществува не само наследство. Например, натоварването на оператори може да се използва много по-широко, отколкото е описано досега - п чревната класове предоставят на своите собствени дейности, като например дос тъп до елементи от техния индекс, като получените стойности са атрибутите, вие, водни и много други. Но най-общо казано, ООП изпълнява търсене атрибути другар в дърветата.
Тогава защо ни е нужно, за да се потопите в тънкостите на създаването на едно дърво на обектите и да ги търся? Трябва да спечелят някои опит и да видим как, ако се използват класове подкрепят повторното използване на кода ОД БАМИ, които не са налични в други софтуерни компоненти. Ние ще използваме класа, ние програмирате, персонализиране на софтуера на писане, а не да се промени съществуващата код или да пишете код за всеки нов проект.
От фундаментална гледна точка, класовете - това е наистина само на игрални опаковки и други имена, които приличат на модули по много начини. Въпреки това, автоматичното търсене на атрибутите в дървото Nasledova Ния, която получаваме, като използвате предоставя възможности за адаптиране на софтуер за по-широк, отколкото е възможно с модули и функции класове. Освен това, класовете са удобен структура осигурява компактно подреждане на изпълним код и променливи, които помага за отстраняване на грешки.
Например, методи - са общи характеристики със специален първи аргумент, за да можем да подражават някои характеристики на поведението им, ръчно преминаване обекти, за да се справят с обичайната функция
Глава 22. ООП: цялостна картина
tsiyam. Въпреки това, методите, включени в наследството на класа ни позволява да се адаптира естествено съществуващ софтуер се изисква печене, създаване на нови подкласове, определящи нови методи, а не да се промени съществуващата код. Ной прилика е невъзможно в случай на модули и функции.
Като пример, да приемем, че сте привлечени от прилагането на приложение на база данни, която съхранява информация за служители. Като програмист, използвайки обектно-ориентиран сингулярност на Python, бихте могли да започнете с изпълнението на обща суперкласа, който определя общото поведение на всички служители в категория Ry във вашата организация:
# Обадете версия на метода за този обект
Това е друг вид полиморфизъм - идея, която е била поставена преди глава 4 и повторно обсъдени в Глава 15. Не забравяйте, полиморфизъм означава, че по смисъла на операцията зависи от обекта, на които се работи. Тук computeSalary метод се определя в хо де търсенето във всеки обект в дървото наследство пред-то ще се нарича. В други приложения, полиморфизъм може да използва, за да скриете IP (т.е. капсулиране) разлики институт terfeysov. Например, една програма, която обработва потока от данни, които могат да работят с обекти, които имат входни и изходни методи, не се грижат за това, че тези методи всъщност правят:
Def процесор (четец, конвертор, писател): а 1:
данни = четец. чете (), ако не информация: пауза данни = конвертор (данни), писател. пишат (данни)
Минавайки случаи на класове с необходимата интерфейс IU на todami четат и пишат, специализирана за различни източници на данни, можем да използваме един и същи процесор функцията да работи с всеки източник на данни, съществуващи, така и за тези, които се появяват в бъдеще:
1 Моля, имайте предвид, че списъкът на компанията в този пример може да спести къмпинг във файл, за да се осигури постоянно съхранение на базата данни на информация TION на работниците и служителите (с помощта на модула туршия, въведен в глава 9
"Използване на файлове" раздел). В допълнение, съставът включва Python модул време рафт, който може да си позволи да се запази случаи на класове
файлове, които имат достъп до ключ - едностранно развитие, системата ZODB един дава възможност за реализиране на едно и също нещо, но има по-добра поддръжка за обектно-ориентирани бази данни за търговска употреба.
Глава 22. ООП: цялостна картина
Освен това, поради факта, че вътрешната изпълнението на четене и запис методи е разделена видовете източници на данни, можете да промените, без да докосвате на кода, подобен на този, който ги използва. Всъщност процесор самата функция може да бъде в класа на логиката за изпълнение на функцията на конвертор преобразуване, които могат да наследят подкласове, както и позволява да се вгради случаи, работещи на четене и писане, в съответствие с принципа на SCM състав (по-нататък в тази част е показана като Реа lizuetsya ).
Когато свикнете с програма в този стил (адаптация на софтуера на), ще откриете, като се започне да пише нова про грама, че повечето от вашия проблем вече е изпълнен, и си на вила в общи линии се свежда до, за да се вдигне на съществуващата Су perklassy които прилагат поведение изисква от вашите програми IU. Например, може би някой друг, за една напълно различна програма, вече е писано класа на служителите, Читалня и авторът на този пример. В този случай, можете да използвате вече готови за grammnym код "за това."
На практика в много области на приложение, можете да получите или да си купи суперкласа колекция, известен като платформа. в Coto ryh изпълнени общи задачи Prog клас-базирани, готови за употреба във вашия Ap niyah. Такива платформи могат да предоставят интерфейси до базите данни на данни, че протоколите за изпитване, инструменти за създаване на графичен между лицето и така нататък. Г. В средата на платформата често ще бъдат достатъчни, за да се създаде един подклас на добавяне на един или двама от неговия метод и работата по Основи на Ная ще бъдат изпълнявани от класове платформа изхвърлят в E-горе в дървото наследство. Програмиране в света на обектно-ориентиран - това е само въпрос на сглобяване вече отстранени грешки код и да го настроите като пишете ваши собствени подкласове.
Разбира се, фактът, да се разбере как да се използват класовете на Hon zheniya този идеал обектно-ориентиран, той ще отнеме време. Обектно-ориентиран практика води до голямо количество предварително инженерство, които са разбрани в стъпка предимства са получени от използването на класове; за тази цел, програмистите започнаха да има списък с общи решения в ООП, известен като моделите на дизайна - да помогне за решаването на проблемите на дизайна. В този случай, обектно-ориентиран код grammny за езика толкова просто, че това само по себе си не е пречка за развитието на ООП. За да проверите това, трябва да се премине към глава 23.
За да продължите с изтеглянето, което трябва да се съберат на снимка: