Използване на Обекти

,
Този урок предвижда запознаване с обектите. Той описва, на по-високо ниво, това, което е обекта, а след това се въвеждат литералите инстанция на променлива и инстанция на функция. Този урок предлага Address и Customer примери , които показват как обектите се използват и прилагат.

Съдържание:

1. Какво е Обект?
2. Деклариране на Обектни литерали
3. Синтаксис на обектните литерали
4. Извикване на обект функции



Какво е Обект?
JavaFX Script езика за програмиране е обектно-ориентиран.
Но какво означава това?
Какво точно е обект?
Просто казано, обект е дискретен софтуерен пакет, който има определено съдържание и поведение. За да разберем по-добре софтуерните обекти, нека излезем навън от софтуера за минутка и си помислим за понятията, с който вече сте запознати.
Вашият телевизор например е обект. Има и двете: състояние (текущ канал, ниво на звук, включен или изключен) и поведение (промяна на канали, регулирате нивото на звука, включване или изключване). Склонни сме да мислим за телевизора като един предмет, но в действителност е един телевизор, съставен от много други обекти (бутоните по лицето, както и различните компоненти-обекти вътре в самия телевизор). В много случаи тези малки обекти също са съставени от други обекти.
Ние можем да разглобим телевизора на компоненти, докато не достигне до точката, където можем да отидем (винт, например наистина е само една единствена цел, той не е съставен от нещо друго). Ако някога сте си купували някакъв комплект за сглобяване, който съдържа диаграма за сглобяването му и съответните изисквания , вие вероятно сте виждали в документацията са показани всеки един обект съдържащ се в конструкцията. С един поглед можете да разберете колко обекти съществуват, и как тези обекти работят всички заедно. Същото важи и за .fx сорс файловете, вие можете лесно да видите как скрипт обектите работят всички заедно, за да образуват пълното програмно приложение.

Деклариране на обектни литерали
Как действително софтуерният обект изглежда по отношение на кода? В JavaFX скрипт език за програмиране, обекта е създаден с обектен литерал (object literal):

Address {
street: "1 Main Street";
city: "Santa Clara";
state: "CA";
zip: "95050";
}


Това създава Address обекта, за използване в хипотетична адресна книга. В обекта се инициализират с конкретни стойности неговите променливи street, city, state, zip. В реално приложение, можете да си представите, че в адресната книга GUI компонентите ще бъдат синхронизирани с данните на Address обекта, така че това, което се появява на екрана, е отражение на реалните данни, които се съхраняват от програмата.
Но преди да се опитате да компилирате този код, трябва да знаете още нещо: компилатора има нужда от специално "описание" (наречено „class“), което описва точно какви данни Address обекта ще съдържа. (В този пример, ние казваме, че Address има street, city, state,zip, но компилатора няма да знае това, докато не се представи class файла, който предоставя тази информацията.) Ние няма да обсъждаме писането на ваши собствени класове до края на ръководството, защото JavaFX (API) съдържа голяма библиотека от вградения класове, които са готови да се използват в собствените ви програми. Освен това, тъй като JavaFX програмния език е изградена на основа на Java платформата, можете да получите достъп до езика за програмиране Java и неговото API.
Можем да компилираме Address примера чрез сваляне на файла Address.fx (който осигурява дефиницията на Address класа) и да го поставите в същата директория като примереният код показан по-горе. (Само не забравяйте да запазите примерен код във файл с друго име, като например AddressTest.fx). Нищо в този код не произвежда някакъв изход, но факта, че се компилира правилно е доказателство, че обекта е създаден успешно.

Забележка: Address обект променливите (уstreet, city, state, zip) в този пример са технически известни, като instance variables. Вие можете да мислите за instance variables, като множество от вградени атрибути, които всеки обект е гарантирано, че съдържат. Всъщност, терминът "атрибут" е използван в ранните версии на JavaFX (може да го срещнете в по-стари документации и демонстрации.) В света на обектно-ориентирано програмиране, думите "instance" и "object "са синоними, това е мястото, от където това понятие идва.


Синтаксис на обектните литерали
Синтаксиса на обектните литерали е едновременно лесен за учене и интуитивен за използване. От нашия пример, първата дума (Address) определя вида на обекта, който създавате. Скобите определят тялото на обекта. Всичко останало (street, city, state, zip) инициализира инстанциите на променливите на обекта.



Имайте предвид, че при обявяване на обект променливите те могат да бъдат разделени със запетаи, шпация или точка и запетая. Можете да използвате и другите, но по принцип се придържаме към точка и запетая в този урок. За по-формално описание на този синтаксис, вижте Figure 6.38 в JavaFX Script Programming Language Reference.

Можете също така да декларирате новосъздадения обект на променлива за по-късен достъп:

def myAddress = Address {
street: "1 Main Street";
city: "Santa Clara";
state: "CA";
zip: "95050";
}


Или да го вложите един обект вътре в друг:

def customer = Customer {
firstName: "John";
lastName: "Doe";
phoneNum: "(408) 555-1212";
address: Address {
street: "1 Main Street";
city: "Santa Clara";
state: "CA";
zip: "95050";
}
}

В последния пример, Customer обекта въвежда няколко нови променливи, след което декларира оригиналния Address обект в променлива наречена address. Забележете как е вложен кода на обекта. Реалните приложения обикновено съдържат много вложени обекти, този вложен модел помага лесено да се види с един поглед какви обекти принадлежат къде. За да компилирате този пример, ще трябва да добавите Customer.fx към вашата текуща директория.

Пример от реалния свят: Video Puzzle





Този видео пъзел заема стрийминг видеото разделя го на пасажи за да може да се сглоби на пъзел. Тук имаме подчертан участък от кода, който използва обект литерали. Би трябвало да разпознаете синтаксиса, дори ако не сте запознати с дадения клас. В този откъс от код, visible и content инстанция променливите принадлежат към Group обекта. x, y, width, height, arcWidth, arcHeight, fill, blockMouse инстанциите променливи принадлежат към Rectangle обект. Group обект се съхранява в променлива наречена previewDimOverlay за по-късно достъп.


Извикване на обект функции
Както променливи, обекта може да съдържа и функции.Вие може да извиквате обект функциите като напишете името на променливата ( customer в следния пример), следван от точка ("."), следвана от функцията, която искате да извикате:

def customer = Customer {
firstName: "John";
lastName: "Doe";
phoneNum: "(408) 555-1212"
address: Address {
street: "1 Main Street";
city: "Santa Clara";
state: "CA";
zip: "95050";
}
}

customer.printName();
customer.printPhoneNum();
customer.printAddress();


Това води до следния изход:

Name: John Doe
Phone: (408) 555-1212
Street: 1 Main Street
City: Santa Clara
State: CA
Zip: 95050


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