Bu sayfadaki yazılar
Sayfanın metni
Sayfa 60
"Usta... ActionScript 3.0 üzerine pişmişinden OOP kes, az da MVC döküver..."
class as scripts.SlideShow3 ( public function SlideShow3 () (
public static function movie:String)
var m empty:MovieClip - —root.createEmptyMovieClip( "m empty", 100); m empty. x - 100; m empty. y - 100; m empty.loadMovie(s movie);
Bu class üzerinden türetilen her objede IMovie metodu var gibi gözüküyor. Ama normal şekilde
import as seripts.*; Var a:SlideShow3 - new SlideShow3(); a.lMovie("../images/pic 1.İpg");
şeklinde bir kullanımda "error message: Static members can only be accessed directly through classes." gibi bir hatayla karşılaşırsınız.
SlideShow3 class'ının IMovie metoduna erişmek için.
import as scripts.*; SlideShow4.lMovie("../images/pic 1.İpg");
şeklinde doğrudan o class'a erişmeniz gerekiyor. Aynı şekilde bir property'yi de Static tanımlamanız gerektiğinde
class as scripts.SlideShow3right public static var s movie:String - public function SlideShowâright () ( ) public static function 1Movie () (| var s mymovie:String s movie; var m empty:MovieClip - —root.createEmptyMovieClip( "m empty", 100); m empty. x - 100; m empty. y - 100; m empty.loadMovie(s mymovie);
ile değişkeni static olarak tanımlamalısınız. Aksi halde statik olan metodumuz, statik olmayan (ve her kopyada yer alan) değişkene erişmeye çalıştığında "error message: Instance variables cannot be accessed in static functions." şeklinde bir hata verecektir.
Get / Set
OOP'un güzel yanı, oluşturduğumuz objelerin kapalı birer kutu gibi davranabilmesi ve yazan kişinin izin verdiği ölçüde dışarıya bilgi vermesidir. Class'ın içinde çok karışık hesaplamalar yapabiliriz. İçeride onlarca, hatta yüzlerce değişken kullanabiliriz, ama bu her değişkeni, her an erişime sunabileceğimiz demek değildir. Daha önceden kullandığımız getProperty ve setProperty metodları class'ımızda çalışacaktır. Ama OOP'un temelinde bir değişkene erişmek istiyorsak, ona erişen bir getter ya da onu değiştiren bir setter fonksiyon yazmak daha düzenli ve kontrollü olmamızı sağlar. Getter, değer döndüreceği için return kullanmamız kaçınılmaz. Aynı zamanda metoda :Number tanımlamasıyla bir rakam döndüreceğini belirtebiliriz. :Void ile setter metodunun herhangi bir geri dönüşü olmayacağını belirtiriz.
class as scripts.Adjust xy ( private var nu xDistance:Number; private var nu yDistance:Number; private var mo fclip:MovieClip; private var m clip:MovieClip; public function Adjust xy (mo fclip) 1
j
function get Fix() :Number
1 )
function set Fix(nu xDistance) :Void
(
) function get Fiy() :Number
1 )
function set Fiy(nu yDistance) :Void m clip. y nu yDistance;
m clip mo fclip;
return m clip. x;
m clip. x nu xDistance;
return m elip.
)
MVC
Zen, daha üst seviyede algılamakla ilgilidir. Bir bayrak dalgalandığında herkes onun dalgalandığını görür. Bir Zen öğrencisi ise bayrağı dalgalandıran rüzgarı algılar. Daha ileri seviyedeki bir Zen öğrencisi ise ne bayrak, ne de rüzgarı dikkate alır, onu algılayışımızın düşünme biçimimizle ilgili olduğunu görür. Hayat içerisindeki acı ve sevinçlerimizin düşünme biçimimizin yarattığı prangalarımız olduğu Budist düşünüş biçiminin temellerini oluşturur.
MVC'yi programlamanın Zen'i olarak görebiliriz. Karışık yapıları yüzünden bize acı çektiren birçok hata prangasından kurtulmak da daha üst bir bakış açısıyla olabilir. Zen'i kavramanın bir kitap okumakla olamayacağı gibi MVC'nin de kemikleşmesi bol pratik yapmakla ve bu yaklaşımı sürekli hale getirmekle ilgili. Aslında Zen gibi, MVC de çok basit ve herkesin kolaylıkla kullanabileceği bir yapıdır. http://en.wikipedia.org/wiki/Design_pattern_(computer_science) başlığında benzer çeşitli yazılım şablonlarını bulabilirsiniz.
MVC'nin açılımı Model-View-Controller'dır. Gösterim, veri ve denetleme mekanizmalarını birbirinden ayrı tutarak daha odaklı halde kod yazmamızı sağlayan bu yaklaşım, daha organize çalışmamızı sağlar. Model, veritabanı, veri alışverişi gibi bilginin kaydedildiği ve okunduğu program kısımlarını içerir. View, içeriğin görselleştirildiği, kullanıcıyla iletişimin kurulduğu, front-end olarak düşünebildiğimiz bölümlerdir. Controller ise bu ikisi arasında durarak hangi durumda hangi veriyi getirileceğini, hangi gösterim şablonlarının kullanılacağını belirleyen mekanizmadır.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 61
"Usta... ActionScript 3.0 üzerine pişmişinden OOP kes, az da MVC döküver..."
Verinin geçireceği dönüşümler de genellikle Controller içerisinde tanımlanır. MVC, özellikle ölçeklenebilir yapılarda işimizi rahatlatan yapısal bir tasarımdır. Daha modüler bir yapı, özellikle iş bölümü yapılmasında ve herkesin bir bölüme odaklanmasında rahatlık sağlar. Kodu ayrıştırdığı için kısmi müdahaleler ya da yapının başka bir zaman değiştirilmesi, radikal bir çalışma olmaz. Yapıyı yeni bir veritabanına adapte etmek, farklı bir görsel arabirim hazırlamak ya da işlevsel kısımları geliştirmek çok daha pratik gerçekleşir.
Aşağıdaki basit örnek, dört dosyadan oluşuyor. Dosya düzeni de aşağıdaki gibi olmalı. mvctest.fla'yı compile edip çalıştırdığınızda controller, yeni bir model yaratacak ve ardından mvctest.fla üzerinden view'ın out() fonksiyonu çalıştırılacak. Görüldüğü gibi çok basit halde verinin Model ile, ekrana çıkışın View ile, genel kontrolün de Controller ile yapılmasını sağlıyoruz. Bunu geliştirip istediğimiz uygulamaları veri alışveriş ve ekran şablonu sistemine oturtup Event sistemini de devreye alarak çeşitli durumlara göre kendi kontrollerini idare eden bir yapıya dönüştürebiliriz.
Bu örneğin dosyalarını http://www.obsesif.net/files/mvc.rar adresinden çekebilirsiniz.
mve/ com/ mvctest/ Controller.as Model.as View.as mvctest.fla
*/ /* dosya ismi: mvctest.fla #4 */ import com.mvctest.*; var mc - new Controller(); */ /* dosya ismi: com/mvctest/Controller.as #4 ze */ package com.mvctest (| import com.mvctest.*; public class Controller private var dataset; public function Controller ( ) this.dataset new Model(); public function out ( ) (| var viewset new Viewl this.dataset.getCoords( ) ); ) ysk /* dosya ismi: com/mvctest/Model.as &f ys package com.mvctest ( public class Model (| private var xPos:Number; private var yPos:Number; public function Model ( ) ( this.xPos - 100; this.yPos - 100; public function getCoords ( ):String (|
"xPos: ", yPos:
return *
“4k Vk Ehis.yPos;
)
KA /* dosya ismi: com/mvctest/View.as */
package com.mvctest (| public class View ( public function View( content:String )(1 trace( content );
)