面向對象的三大特性:繼承、封裝、多态,都可以在Flex開發中找到它們的身影,ArcGIS Flex API充分利用了Flex面向對象的文法機制進行了設計和擴充,前一篇談到的事件就是繼承了flash.events.Event,這篇文章将通過一個典型GeoRSS Demo分析Flex的面向對象。
最基本的一個類封裝:
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 package com.esri.ags.samples
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 {
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public class Namespaces
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public static const RDF_NS:Namespace = new Namespace("http://www.w3.org/1999/02/22-rdf-syntax-ns#");
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public static const DC_NS:Namespace = new Namespace("http://purl.org/dc/elements/1.1/");
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public static const SY_NS:Namespace = new Namespace("http://purl.org/rss/1.0/modules/syndication/");
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public static const CO_NS:Namespace = new Namespace("http://purl.org/rss/1.0/modules/company/");
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public static const TI_NS:Namespace = new Namespace("http://purl.org/rss/1.0/modules/textinput/");
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public static const RSS_NS:Namespace = new Namespace("http://purl.org/rss/1.0/< /span>");
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public static const ATOM_NS:Namespace = new Namespace("http://www.w3.org/2005/Atom");
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public static const ATOM_03_NS:Namespace = new Namespace("http://purl.org/atom/ns#");
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public static const XHTML_NS:Namespace = new Namespace("http://www.w3.org/1999/xhtml");
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public static const CONTENT_NS:Namespace = new Namespace("http://purl.org/rss/1.0/modules/content/");
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public static const GEORSS_NS:Namespace = new Namespace("http://www.georss.org/georss");
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public static const GEOWGS_NS:Namespace = new Namespace("http://www.w3.org/2003/01/geo/wgs84_pos#");
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public static const GEO_NS:Namespace = new Namespace("http://www.w3.org/2003/01/geo/");
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public static const GML_NS:Namespace = new Namespace("http://www.opengis.net/gml");
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public function Namespaces(singletonEnforcer:SingletonEnforcer)
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 {
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 }
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 }
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 class SingletonEnforcer
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 首先是Flex有package的概念,易于将類分類存放,并且可以避免命名相同的情況,其次public、class、static、const關鍵字都是我們非常熟悉的,它們的含義和常見OO語言的相同,代碼申明了多個靜态常量,存儲RSS來源。
Namespaces 類中有一個構造函數,和Java、C#相同,需要注意的是ActionScript不支援函數重載,最初這一點讓大家不是很了解,但要知道,ActionScript和Javascript一樣,都遵從ECMAScript 262規範,後面的同名函數會覆寫前面的,從另外一個角度去考慮,在as和js中,函數就是一個對象,同名的對象不可能同時存在于一個命名空間下,這點和 Java、C#有很大差別,是以要解決函數重載問題,要麼使用不同名函數,要麼通過一個參數去判斷調用哪個函數。
是以我們可以這樣來設計多态:
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 function doWithString(arg:string)
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 return arg;
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 function doWithInteger(arg:int)
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 或者是:
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 style="color: #0000ff;">if (arguments.length == 1)
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 if (arguments[0] typeof 'String')
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 doWithString(arg);
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 if (arguments[0] typeof 'Int')
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 doWithInteger(arg);
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 else if (arguments.length == 2)
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 Flex繼承采用了prototype原型,經過封裝之後我們可以直接使用extends關鍵字實作常用繼承功能:
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public class GeoRSSProvider extends EventDispatcher
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 可以發現,Flex在ECMAScript 262基礎上還是做出了不少工作以支援正常面向對象的設計理念,開發者可以很友善的将OO思想應用到Flex之中,Flex裡可以發現 Javascript、Java的身影,并加入了自己的一些文法習慣,例如變量類型或執行個體類型都放置在後面,和正常使用習慣稍有出入。
再看GeoRSSUtil功能類,提供了一系列靜态方法來解析資源中所提供的地理資訊:
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 import com.esri.ags.geometry.Geometry;
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 import com.esri.ags.geometry.MapPoint;
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 import com.esri.ags.geometry.Polygon;
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 import mx.utils.StringUtil;
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public class GeoRSSUtil
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 private static const GEORSS : Namespace = Namespaces.GEORSS_NS;
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 private static const GEOWGS : Namespace = Namespaces.GEOWGS_NS;
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 private static const GEO : Namespace = Namespaces.GEO_NS;
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 private static const GML : Namespace = Namespaces.GML_NS;
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public function GeoRSSUtil(singletonEnforcer:SingletonEnforcer)
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 public static function toGeometry( x : XML ) : Geometry
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 const geoLat : String = String(x.GEOWGS::lat );
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 const geoLon : String = String(x.GEOWGS::long );
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 if( geoLat && geoLon )
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 {
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 return new MapPoint( Number( geoLon ), Number( geoLat ));
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 }
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 const georssPoint : String = String(x.GEORSS::point);
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 if( georssPoint )
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 return parseGeoRSSPoint(georssPoint);
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 const pointList : XMLList = x.GEO::point;
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 if( pointList && pointList.length() > 0 )
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 const geoPoint : XML = pointList[0];
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 const geoPLat : Number = Number(geoPoint.GEO::lat);
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 const geoPLon : Number = Number(geoPoint.GEO::long);
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 return new MapPoint( geoPLon, geoPLat );
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 const georssPolygon : String = String(x.GEORSS::polygon);
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 if( georssPolygon )
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 return parseGeoRSSPolygon( georssPolygon);
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 }
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 const whereList : XMLList = x.GEORSS::where;
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 if( whereList && whereList.length() > 0 )
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 const pos : String = whereList[0].GML::Point[0].GML::pos[0];
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 const arr : Array = pos.split(" ");
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 const gmlLat : Number = Number(arr[0]);
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 const gmlLon : Number = Number(arr[1]);
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 return new MapPoint( gmlLon, gmlLat );
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 }
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 return null;
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 private static function parseGeoRSSWhere( x : XML ) : Geometry
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 private static function parseGeoRSSPoint( text : String ) : Geometry
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 const tokens : Array = StringUtil.trim(text).split(" ");
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 const lat : Number = Number(tokens[0]);
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 const lon : Number = Number(tokens[1]);
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 return new MapPoint( lon, lat);
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 private static function parseGeoRSSPolygon( text : String ) : Geometry
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 const path : Array = [];
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 for( var i:int=0, j:int=1; j < tokens.length; i+=2, j+=2 )
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 var lat : Number = Number(tokens[i]);
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 var lon : Number = Number(tokens[j]);
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 path.push( new MapPoint( lon, lat) );
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 return new Polygon([path]);
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 {
ArcGIS Flex API 中的 Flex 技術(二)--面向對象
ArcGIS Flex API 中的 Flex 技術(二)--面向對象 package、import、class、public、private、static、const,就像設計一個Java Util類,相比js庫如ext、dojo,flex對ECMAScript 262規範腳本封裝的更為完美,絲毫感覺不到是在用腳本語言進行程式設計。parseGeoRSSPoint從GeoRSS資源中擷取點狀要素,parseGeoRSSPolygon從GeoRSS資源中擷取面狀要素,從這些代碼中我們可以學習到GEORSS、GEOWGS、GEO、GML的解析方法。
本文轉自Flyingis部落格園部落格,原文連結:http://www.cnblogs.com/flyingis/archive/2008/12/09/1350778.html,如需轉載請自行聯系原作者