Обектно програмиране. Клас. Обект. Свойства. Метод Понятие за обектно-ориентирано програмиране



Дата11.06.2016
өлшемі88 Kb.
#128540
ТЕМА14

Обектно програмиране. Клас. Обект. Свойства. Метод




  1. Понятие за обектно-ориентирано програмиране

Обектно-ориентираното програмиране се е наложило като стандарт при почти всички съвре­менни езици за програмиране. То предоставя мощно средство за модели­ране на обектите от реалния свят и взаимоотношени­ята между тях, позволява добро структу­риране на програмния код и улес­нява неговото преизползване. В основата на ООП стоят обектите, моделиращи обекти от реалния свят и взаимодействията между тях. Това позволява изграждането на софту­ерни сис­теми, които въпреки сложността си са разбираеми и в следствие на то­ва - лесни за разширяване и поддръжка. Даден обект, представящ същ­ност от ре­ал­ния свят, би могъл (почти) без изменения да играе ро­ля­та на същия фи­зи­чес­ки обект в друга софтуерна система.

Трите основни принципа на ООП са капсулация на данните, наследяване и полиморфизъм. Те са основните характеристики, които определят един език за програмиране като обектно-ориентиран.


  • Капсулация на данните


Основна концепция в ООП е обектът да се разглежда като "черна кутия" – из­ползващите обекта "виждат" само атрибутите и операциите, които са присъщи на обекта от реалния свят, без да се интересуват от конкретната им реализация – клиентът на обекта трябва да знае само какво може да прави обектът, а не как го прави. В такъв смисъл "капсулация" означава скриване на ненужните детайли за обектите и откриване към външния свят само на важните техни характе­ристики и свойства.

Обектите в ООП съдържат своите данни и средствата за тяхната обра­ботката, капсулирани като едно цяло.


  • Наследяване


Ако един обект съдържа всички свойства и действия на друг, първият може да го наследи. По този начин наследеният обект освен собствените си атрибути и операции приема и тези на "родителя" си (базовия клас), като така се избягва повторното им дефиниране и се позволява съз­да­ването на йерархии от класове, моделиращи по естествен начин за­ви­симостите от реалността.

За да изясним това понятие, ще си послужим с класическият в OOП пример за класа от обекти Animal, който пред­ставлява абстракция за мно­жест­вото от всички животни. Всички обек­ти от този клас имат общи ха­рак­те­ристики (например цвят и възраст) и обща функционалност, например операциите Eat и Sleep, докато за класът Dog, представляващ мно­жест­во­то от всички ку­че­та, които също са животни, би могъл да предоставя опе­ра­циите Eat, Sleep и Bark. Удачно е кла­сът Dog да наследи Animal – тогава той ще съдържа описание само на соб­стве­ното си действие Bark, докато те­зи на Eat и Sleep ще получи от ба­зо­ви­я си клас.


  • Полиморфизъм


Полиморфизъм буквално означава приемането на различни форми от един обект. Нека е даден базов клас, представящ категория от обекти, които ре­ализират общо действие, което се наследява от множество класове, опис­­ващи по-тесни категории. Въпреки, че те всички споделят това дей­ствие, те могат да го реализират по различен начин. Когато раз­по­ла­га­ме с обек­ти от базовия клас, знаем че всички те реализират това дей­ствие, не­за­ви­си­мо на кой наследен клас принадлежат. Поради това можем да го из­пол­зваме без да се интересуваме от конкретната му реализация. На­при­мер, ако кла­сът Animal предоставя действието Talk и разгледаме нас­ле­дя­ва­щите го кла­сове Dog и Cat, всеки от тях го ре­а­ли­зи­ра по кон­кретен начин. И ако има­ме животно, което издава звук и то е ку­че – ще лае, а ако е котка – ще мяучи.

Полиморфизмът позволява унифицираното извършване на действие над различни обекти, които го реализират. В този случай издаването на звук от животно е по­ли­мор­фно действие – такова, което се реализира по раз­ли­чен начин в раз­лич­ни­те наследници на базовия клас.


Основни понятия в ООП


Без да претендираме за изчерпателност ще даден кратка дефиниция за основните понятия от ООП, които ще използваме по-нататък. Ако откри­вате, че повечето от тези термини са ви напълно непознати, ви препоръч­ваме първо да се запознаете с принципите на обектно-ориентираното програмиране от някоя специализирана книга по ООП, а след това да продължите нататък. В настоящата тема ще направим преглед на реализа­цията на ООП в .NET Framework, а не на ООП като идеология.
  • Клас


Класовете са категории от обекти, споделящи общи свойства и операции, които могат да се извършват върху тях. Например класът "студент" пред­ста­вя мно­жеството от всички студенти. Класът не съществува реално като фи­­­зи­­чес­ка същност, а по-скоро можем да го разгледаме като описание на не­­го­ви­те обекти.
  • Обект


Обект наричаме конкретен елемент от даден клас (инстанция), например студентът Тодор Георгиев, трети курс, ядрена физика в СУ.
  • Инстанциране


Про­цесът на създаване на обект от даден клас е инстанциране. Обектите, съз­­дадени при инстанциране на даден клас, се наричат негови ин­стан­ции. Например в резултат от инстанцирането на класа "студент" можем да получим обекта "Иван Петров", който е инстанция на класа "студент".
  • Свойство


Свойство се нарича видима за външния свят характеристика (атрибут) на обектите от даден клас. Например свойства на класа "студент" са личните имената му, личните му данни, оценките му и др.
  • Метод


Метод е действие, което всички обекти от даден клас могат да извършват. Например всички обекти от класа "студент" могат да извършват действи­ето "явяване на изпит".
  • Интерфейс


Интерфейсът е описание на съвкупност от действия, които даден обект може да из­вър­шва. Ако един обект може да извършва всички действия от даден ин­тер­фейс, казваме че обек­тът реализира, или имплементира интер­фейса. Кла­сът "студент", на­пример, би могъл да реализира интер­фейса "учащ" съдържащ действието "учене".
  • Наследяване на класове


Наследяване в ООП наричаме възможността един клас, наричан нас­ледник, да при­добие свойства и действия на друг клас – родител (базов клас). Например класът "пре­къс­нал студент" би могъл да наследи класа "студент", като към наследените методи и свойства добави собствени, например "получаване на призовка от военните власти".
  • Абстракция на данните


Абстракция на данните наричаме възможността да работим с данни без да се интересуваме от тяхното вът­реш­но представяне, а само от операциите, които можем да извършваме над тях. Удачно е този подход да се осъще­стви чрез използването на ин­тер­фейси.

Структури от данни, които дефинират група от операции, но не разкриват информация как са имплементирани тези операции, се наричат абстракт­ни структури от данни.


  • Абстракция на действията


Абстракцията на действията е възможността да изпълняваме действия, без да се интересуваме от кон­крет­ната им реализация. Обикновено се постига чрез полиморфизъм. Например ако извикваме даден метод от даден клас през неговия базов клас или интерфейс, ние реално извикваме абстрактно действие от базовия клас, което е реализирано
Visual Basic е обектно-ориентиран език за програмиране, т.е. всичко в него е обект, а целия код е написан за да накара обектите да взаимодействат един с друг, както и с останалия свят. Пример от реалния свят може може да бъде ученик от едно училище. Той има име, егн, месторождение. Ученикът започва да учи и да изпълнява и други дейностти. Една такава функция е участие в спортния отбор на училището.

Всички тези функции и описателни елементи определят ученика като обект, като име, егн, месторождение са неговте атрибути, а реалните функции се определят като методи и събития. Обектите могат да съдържат други обекти. Например ученикът е в различен клас, различни специалности. Във всеки клас има определен брой ученици. Класът в училище е сбор от обекти. Във VB2008 всичко е обект, а целия код е написан, за да накара обектите да взаимодействат един с друг.

Всеки обект има:


  • Определен брой описателни елементи, наречени атрибути (свойства)

  • Методи (подпрограми или функции)

  • Събития (специални подпрограми, свързани с определен брой условия)

Общо тези елементи на всеки обект създават клас. Всички тези елементи на обекта се обединяват за да образуват структурата на един обект. Тази структура при писане на код е дефинирана като клас.

Пример: Контролите са класове и имат:



  • Атрибути

  • Методи

  • Свойства

(Филм VB2005/06VB1- първия филм)


  1. Създаване на потребителски клас

Project – Add – Class

Добавя се нов модул за клас с име (зададено от потребителя) и се дефинира като Public, което означава, че всяка част от приложението може да използва класа. Създаването на клас позволява да се дефинират собствени обекти в проекта – такива, които притежават свойства, методи, събития.




  1. Атрибути за класа (class)

А) променливи

Добавят се променливи, които съхраняват информацията. Поставят се най-отгоре в структурата на класа и се дефинират по-същият начин като в друг модул.



  • Private (частни) достъпни само в рамките на класа

  • Public (публични) достъпни в класа и всяка част на проекта

  • Friend позволява на други части от проекта да има достъп до променливите

  • Protected разширение на Private и позволява на класовете, които наследяват поведението на други класове, да виждат техните класове.

Всяко свойство има две изявления:

  • Get – показва стойността на полето, когато е поскано

  • Set – преписва стойността в елемента който желаем

Б) създаване на атрибути (свойства)

За да се създаде атрибут се използва структурата Property със следния синтаксис:

Тип Property име()

Get

Return променлива



End Get

Set(ByVal променлива As тип)

променлива = стойност

End Set


End Property

Атрибута трябва да има име и тип, който да указва как може да се достигне до него извън класа. В дефиницията на атрибут кодът трябва да се дефинира какво се връща, в случай че кодът се опита да вземе стойността от атрибута (клаузата Get), както и какво действие трябва да се предприеме, в случай, че друга част от програмата се опита да присвои стойност на атрибута (клаузата Set).



  1. Създаване на class – пример

Задача: Създава се проект, който внася собствено, фамилно име и рождена дата на ученици. Пресмята се възрастта на ученицит.

  1. Изграждане на проекта Person Class

  1. Създайте нов проект с име MyPersonClass

  2. Вложете следните контроли:

  • Label1

  • TextBox1

  • TextBox2

  • DateTimePicker

  • Button1




  1. Добавете Class от Project с име Person

  1. Деклариране на променливите на класа

Private Name1 As String

Private Name2 As String



  1. Създаване на свойствата -

Public Property FirstName() As String

Get

Return Name1



End Get

Set(ByVal value As String)

Name1 = value

End Set


End Property
Public Property LastName() As String

Get


Return Name2

End Get


Set(ByVal value As String)

Name2 = value

End Set

End Property



  1. Създаване на метод -

Декларира се функция с име Age, която изисква аргумента Birthday от тип Date, за да направи изчисление. Той използва метода Substract, за да извади рождената дата на ученика от текущото системно време, след което връща получената стойност, изразена в дни, разделена на числото 365.25 – приблизителната продължителност на една година (изразена в дни). Функцията Int конвертира тази стойност в цяло число, което се връща на извикващата процедура чрез конструкцията Return.
Public Function Age(ByVal Birthday As Date) As Integer

Return Int(Now.Subtract(Birthday).Days / 365.25)

End Function

End Class



  1. Създаване на обект на базата на новия Class

Кликнете два пъти върху Button1 на формата и въведете следния код:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Dim Employee As New Person

Dim DOB As Date
Employee.FirstName = TextBox1.Text

Employee.LastName = TextBox2.Text

DOB = DateTimePicker1.Value.Date

MsgBox(Employee.FirstName & " " & Employee.LastName _

& " е " & Employee.Age (DOB) & “години”)

End Sub
Този код служи за съхранение на стойностите, въведени от потребителя в обект, наречен Employee и деклариран с тип Teacher. Ключовата дума New указва, че желаете незабавно да създадете нов екземляр на обекта Employee. Сега за първи път декларирате променлива от тип, създаден предварително Class. В кода се декларира променлива от тип Date, която съхранява въведената от потребителя дата. Свойствата FirstName и LastName на обекта Employee са получили собствено и фамилно име.




  1. Наследяване на базов клас

  1. Използване на ключовата дума Inherits

  • Кликнете в класа Person.vb – View Code и създайте класа Teacher

Public Class Teacher

Inherits Person

Private Level As Short


Public Property Grade() As Short

Get


Return Level

End Get


Set(ByVal value As Short)

Level = value

End Set

End Property



End Class
Конструкцията Inherits свързва Person с въпросния нов клас, като обединява всичките му променливи, свойства и методи. По същество, Teacher е дефиниран като специален тип на класа Person – в допълнение на свопйствата FirstName и LastName, притежава и още едно – Grade, в което се записва класът, в който преподава учителя.

  • Изберете Button1_Click

Dim Employee As New Teacher

Dim DOB As Date

Employee.FirstName = TextBox1.Text

Employee.LastName = TextBox2.Text

DOB = DateTimePicker1.Value.Date

Employee.Grade = InputBox("В кой клас преподава?")

MsgBox(Employee.FirstName & " " & Employee.LastName _



& " преподава " & Employee.Grade & "клас")



Достарыңызбен бөлісу:




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет