Tuesday, October 28, 2014

Asas-asas pengaturcaraan berorientasi objek(OOP)



Pengenalan kepada pengaturcaraan berorientasikan objek
Pengaturcaraan berorientasi objek (OOP) adalah satu cara menyusun kod di dalam program dengan kumpulan ke dalam objek-individu unsur-unsur yang termasuk maklumat (nilai-nilai data) dan fungsi. Dengan menggunakan pendekatan berorientasikan objek untuk menganjurkan program yang membolehkan anda untuk mengumpul  maklumat tertentu (misalnya, maklumat muzik seperti tajuk album, tajuk, atau nama artis) bersama-sama dengan fungsi yang sama atau tindakan yang berkaitan dengan maklumat (seperti "menambah trek ke senarai main" atau "memainkan semua lagu-lagu oleh artis ini"). Ruangan ini digabungkan menjadi satu item, sesuatu objek (contohnya, "Album" atau "MusicTrack").


Tugas biasa Berorientasikan objek pengaturcaraan
Pengaturcaraan berorientasi objek mempunyai dua bahagian iaitu  strategi dan teknik, untuk  membentuk program (sering dipanggil reka bentuk berorientasikan objek).
Tugas-tugas biasa yang terdapat dalam OOP:
■ Mewujudkan ciri-ciri, kaedah,mendapat dan mencapai (accessor methods)
■ Mengawal akses kepada classes, properties, methods, and accessors(mencapai)
■ Mewujudkan ciri-ciri statik dan kaedah
■ Mewujudkan struktur penghitungan
■ Mendefinisikan dan menggunakan antara muka
■ Bekerja unsur-unsur kelas utama



Konsep penting dan terma
Senarai rujukan berikut mengandungi istilah penting yang perlu tahu:
■ Attribute: Satu ciri yang diberikan kepada elemen kelas (seperti property or method) dalam
definisi kelas. Sifat-sifat yang biasa digunakan untuk menentukan sama ada property atau
method boleh didapati untuk diakses pada bahagian-bahagian program yang lain. Sebagai contoh,
sifat private  dan  public . Kaedah private hanya boleh dipanggil oleh kod dalam
kelas, manakala kaedah public boleh dipanggil oleh mana-mana kod dalam program ini.
■ Class: Struktur dan kelakuan jenis objek tertentu (seperti template atau rangka tindakan untuk objek jenis data).
■ Class hierarchy: Struktur yang pelbagai kelas, berkaitan dengan kelas fungsi dari kelas lain.
■ Data type: Jenis maklumat pembolehubah tertentu yang boleh menyimpan. Secara amnya, data type adalah perkara yang sama seperti kelas.
■ Operator Dot: (.) Tanda tempoh yang ada pada ActionScript (banyak pengaturcaraan lain bahasa) digunakan untuk menunjukkan bahawa nama merujuk kepada Child elemen objek (seperti property atau method). Sebagai contoh, dalam ungkapan myObject.myProperty, titik operator menunjukkan bahawa myProperty istilah ini merujuk kepada beberapa nilai yang unsur objek yang dinamakan myObject.
■ Enumeration (Penghitungan) : Satu set nilai yang tetap , dikumpulkan bersama untuk menjadikan  satu kelas.
■ Inheritance:  Mekanisme OOP  membolehkan satu definisi kelas untuk memasukkan semua fungsi definisi kelas yang berlainan (untuk menambah fungsi ).
■ instance: Objek yang sebenar diwujudkan dalam program.
■ Namespace (Ruang nama): Pada dasarnya sifat , membolehkan kawalan yang lebih baik di mana kod boleh mengakses kod lain


Classes
Classes adalah persembahan abstrak objek. Maklumat  kelas mengenai jenis data yang objek boleh memegang dan mempamerkan tingkah laku pada objek. Kebergunaan mungkin tidak ketara apabila menulis skrip  yang mengandungi hanya beberapa objek yang berinteraksi  satu sama lain. Bagaimanapun, bilangan objek yang perlu diuruskan akan meningkat, mendapati kelas membolehkan untuk mengawal bagaimana objek diwujudkan dan bagaimana mereka berinteraksi antara satu sama lain dengan lebih baik. ActionScript 1.0, pengaturcara ActionScript boleh menggunakan objek Fungsi yang boleh menyerupai kelas. ActionScript 2.0 menambah sokongan untuk kelas dengan kata kunci seperti class dan extends. ActionScript 3.0 bukan sahaja  menyokong kata kunci yang diperkenalkan pada ActionScript 2.0, tetapi juga boleh menambah beberapa keupayaan baru, seperti kawalan akses yang dipertingkatkan dengan ciri-ciri yang protected dan internal, dan kawalan kata kunci yang lebih baik.
(Jika anda pernah mencipta kelas dalam bahasa pengaturcaraan seperti Java, C ++, atau C #, anda akan mendapati ActionScript yang menyediakan satu pengalaman yang biasa)


Definisi kelas
Definisi kelas ActionScript 3.0 menggunakan sintaks yang sama seperti yang digunakan dalam ActionScript 2.0 . Sintaks yang betul untuk definisi kelas memerlukan kata kunci kelas diikuti oleh nama kelas. Badan kelas, yang tertutup oleh pendakap kerinting ({}), berikut nama kelas. Sebagai contoh, kod berikut mewujudkan kelas dinamakan Shape yang mengandungi satu pembolehubah, dinamakan visible:

public class Shape                         nama kelas
{
var visible:Boolean = true;
}

Satu perubahan yang ketara melibatkan sintaks definisi kelas yang berada di dalam pakej. dalam ActionScript 2.0, jika kelas yang berada di dalam satu pakej, nama pakej yang perlu dimasukkan ke dalam kelas declaration. Dalam ActionScript 3.0, yang memperkenalkan satu kenyataan pakej, nama pakej hendaklah dimasukkan ke dalam akuan pakej dan bukannya dalam akuan kelas. Sebagai contoh, pengisytiharan kelas berikut menunjukkan bagaimana kelas BitmapData, yang merupakan sebahagian daripada pakej flash.display, ditakrifkan dalam ActionScript 2.0 dan ActionScript 3.0:
// ActionScript 2.0
class flash.display.BitmapData {}
// ActionScript 3.0
package flash.display
{
public class BitmapData {}
}

Sifat-sifat kelas
ActionScript 3.0 membolehkan anda untuk mengubah suai definisi kelas menggunakan satu daripada empat sifat-sifat:
Attribute (sifat)
Definition
Dynamic
Benarkan properties yang akan ditambah kepada keadaan pada run time.
Final
Mesti tidak dilanjutkan kepada kelas yang lain.
Internal(default)
Boleh dilihat di dalam pakej semasa.
Public
Untuk rujukan mana-mana

Bagi setiap sifat-sifat ini, kecuali untuk internal, sifat mesti jelas termasuk untuk mendapatkan tingkah laku yang berkaitan. Sebagai contoh, jika tidak  meletakkan sifat Dynamic apabila mentakrifkan kelas, anda tidak akan dapat menambah properties untuk contoh kelas pada run time. Perlu menetapkan sifat dengan dengan jelas pada awal definisi kelas, kod berikut menunjukkan secara meletakkan sifat:
Dynamie class Shape {}
Perhatikan bahawa senarai ini tidak termasuk satu sifat yang dinamakan abstract. Ini kerana abstrak
kelas tidak disokong di ActionScript 3.0. Perhatikan juga bahawa senarai ini tidak termasuk sifat-sifat yang dinamakan private dan protected. Sifat-sifat ini mempunyai makna hanya di dalam kelas definisi, dan tidak boleh digunakan untuk kelas sendiri.

Class Body
Class body, yang tertutup oleh pendakap, digunakan untuk menentukan pembolehubah, pemalar, dan kaedah kelas. Contoh berikut menunjukkan pengisytiharan untuk akses kelas dalam API Adobe Flash Player:
public final class Accessibility
{
public static function get active():Boolean;
public static function updateProperties():void;
}

Anda juga boleh menentukan ruang nama di dalam badan kelas. Contoh berikut menunjukkan bagaimana ruang nama boleh ditakrifkan dalam badan kelas dan digunakan sebagai satu sifat kaedah yang ada dalam class:
public class SampleClass
{
public namespace sampleNamespace;
sampleNamespace function doSomething():void;
}

ActionScript 3.0 membolehkan anda untuk memasukkan bukan sahaja definisi dalam badan kelas, tetapi juga kenyataan. Kenyataan yang berada di dalam badan kelas, tetapi di luar definisi kaedah, adalah dilaksanakan dengan tepat apabila definisi pertama dan kelas yang berkaitan objek dicipta. Contoh berikut termasuk panggilan kepada fungsi luaran, hello (), dan kenyataan trace yang output mesej pengesahan apabila kelas ditakrifkan:
function hello():String
{
trace("hola");
}
class SampleClass
{
hello();
trace("class created");
}
// output when class is created
hola
class created

Berbeza dengan versi ActionScript terdahulu, dalam ActionScript 3.0 adalah dibenarkan untuk menentukan property statik dan instance property dengan nama yang sama di dalam badan kelas yang sama. Sebagai contoh, kod berikut mengisytiharkan pemboleh ubah statik bernama message dan pembolehubah dengan nama yang sama:

class StaticTest
{
static var message:String = "static variable";
var message:String = "instance variable";
// In your script
var myST:StaticTest = new StaticTest();
trace(StaticTest.message); // output: static variable
trace(myST.message); // output: instance variable
Sifat-sifat Class property
Dalam perbincangan model objek ActionScript, istilah property bermakna apa-apa yang boleh terdapat pada kelas, termasuk pembolehubah, pemalar dan kaedah. Ini berlainan daripada cara istilah ini digunakan dalam ActionScript 3.0 Languane and component Reference, Dalam ActionScript 3.0, terdapat satu set ciri-ciri yang boleh digunakan dengan mana-mana class property. Berikut senarai jadual set sifat-sifat.
Attribute
Definition
Internal
Rujukan di dalam pakej yang sama.
Private
Sebutan dalam kelas yang sama.
Protected
Sebutan dalam kelas yang sama dan kelas yang diperolehi.
Public
Untuk rujukan mana-mana.
Static
Menetapkan bahawa property yang dimiliki oleh kelas, bertentangan dengan contoh-contoh kelas.
UserDefinedNamespace
Custom nama ruang nama yang ditakrifkan oleh pengguna.




Terdapat 4 jenis fungsi dalam sesebuah kelas. Antara fungsi-fungsi yang diperlukan adalah seperti
1.       Constructor methods -fungsi yang berkongsi Nama yang sama seperti nama kelas di mana ia ditakrifkan
class Example
{
public var status:String;
public function Example()
{
status = "initialized";
}
}
var myExample:Example = new Example();
trace(myExample.status); // output: initialized

2.       Statis methods -juga dikenali sebagai class methods. methods yang diisytiharkan dengan kata kunci yang statik

contoh Date Class, seperti
sebagai getMonth ().

3.       Instance methods-kaedah yang diisytiharkan tanpa kata kunci yang statik
public class CustomArray extends Array
{
public static var arrayCountTotal:int = 0;
public var arrayNumber:int;
public function CustomArray()
{
arrayNumber = ++arrayCountTotal;
}
public function getArrayPosition():String
{
return ("Array " + arrayNumber + " of " + arrayCountTotal);
}
}

4.       Bound methods - juga dikenali sebagai kaedah penutupan, adalah satu kaedah yang diekstrak

class ThisTest
{
private var num:Number = 3;
function foo():void // bound method defined
{
trace("foo's this: " + this);
trace("num: " + num);
}
function bar():Function
{
return foo; // bound method returned
}
}
var myTest:ThisTest = new ThisTest();
var myFunc:Function = myTest.bar();
trace(this); // output: [object global]
myFunc();
/* output:
foo's this: [object ThisTest]
output: num: 3 */

No comments:

Post a Comment