| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| \x3a\x6f\x29 Registriert seit: Apr 2004 Ort: paris
Beiträge: 806
| Namespaces
Lasst uns mal ein bisschen zusammentragen. Bisher habe ich Probleme die Namespaces sinnvoll einzusetzen. Ich würde gerne wissen, wie ihr das hinbekommt. Z.b. könnte ich mir vor mein BitmapData neu zu definieren. var x: BitmapData = new ImageProcessing::BitmapData(); Oder so ähnlich. Bisher kriege ich aber einen ganz dämlichen Fehler. Code: package ip.img
{
namespace ImageProcessing;
public class Image
{
public function Image()
{
}
}
}
//fehler: file found in an actionscript-classpath can not have more than one externally visible definition. ip.img:ImageProcessing;ip.img:Image Wieso geht auch das nicht: Code: package ip.img
{
public class Image
{
public function Image()
{
}
}
public class B
{
}
}
//fehler: A file found in an actionscript-classpath can not have more than one externally visible definition. ip.img:Image;ip.img:B Wenn ja, wie? Und: Wieso kann ich in einer *.as Datei nicht zwei sichtbare Klassen haben? Das macht mich grade stuzig. |
| | |
| | #2 (permalink) |
| \x3a\x6f\x29 Registriert seit: Apr 2004 Ort: paris
Beiträge: 806
|
Beim teste grade, sehr confusing. Code: namespace RGBMath;
namespace BinMath;
RGBMath function distance(a: int, b: int): int
{
return a-b;
}
BinMath function distance(a: int, b: int): int
{
return a*b;
} |
| | |
| | #3 (permalink) |
| \x3a\x6f\x29 Registriert seit: Apr 2004 Ort: paris
Beiträge: 806
|
Bisher scheinen mir Namespaces wenig nützlich, wenn ich nicht einmal eine Klasse in einem Namespace deklarieren kann? Theoretisch ist jetzt so etwas möglich wie, bei einer Vektor-Klasse, dass man eine Klasse hat, die 2D und 3D ermöglicht. So könnte(!) man überladen. Beispiel: Code: public class VectorMath
{
namespace Math2D;
namespace Math3D;
Math3D static function distance( a: Vector3D, b: Vector3D ): Number
{
return ...
}
Math2D static function distance( a: Vector2D, b: Vector2D ): Number
{
return ...
}
} VectorMath.Math3D::distance( a, b ); VectorMath.Math2D::distance( c, d ); Bisher alles nicht so wirklich das, was ich von Namespaces kenne :o) |
| | |
| | #4 (permalink) |
| \x3a\x6f\x29 Registriert seit: Apr 2004 Ort: paris
Beiträge: 806
|
so wie ich es jetzt durchblicke funktioniert ein namespace bisher nur innerhalb einer klasse. somit ist auch das vektor-beispiel quark, denn es funktioniert nur in der selben klasse. use ist übrigens auch noch nicht implementiert, von daher ist das alles nicht so spaßig. schade :o( |
| | |
| | #5 (permalink) |
| [+] Registriert seit: Dec 2002 Ort: cologne
Beiträge: 2.271
|
Hast du auch ein Beispiel, was funktioniert ? Wahrscheinlich sind diese Namespaces eher für Applikation gedacht und nicht für die Engineentwicklung (schnelle Views) geeignet. Sympathisch finde ich diese Doppelpunktschreibweise eh nicht. |
| | |
| | #6 (permalink) |
| \x3a\x6f\x29 Registriert seit: Apr 2004 Ort: paris
Beiträge: 806
| Code: import flash.util.trace;
public class VectorMath
{
namespace Math2D;
namespace Math3D;
static public function test(): void {
trace( 'VectorMath.test' );
Math2D::distance(0,0);
Math3D::distance(0,0);
}
Math2D static function distance( a: int, b: int ): Number
{
trace( 'Math2D::distance' );
return 0;
}
Math3D static function distance( a: int, b: int ): Number
{
trace( 'Math3D::distance' );
return 0;
}
} André: Benutzt du Miranda? Weil dann solltest du mal updaten :o) |
| | |
| | #7 (permalink) |
| www.kruesch.de Registriert seit: Feb 2002
Beiträge: 1.057
|
Das neue Namespace Konzept ist wirklich etwas verwirrend. Grundsätzlich gibt es eine Unterscheidung zwischen Packages, das ist die Art von Namespaces, die man im Zusammenhang mit OOP normalerweise kennt - und das Namespace Konzept das mit E4X eingeführt wurde. Das ist das Namespace Konzept von XML, wo einem Element Attribute aus verschiedenen XML-Namensräumen hinzugefügt werden können. Namespaces machen also hauptsächlich dann Sinn, wenn Du mit XML hantierst. Vielleicht klärt das ein paar Deiner Fragen. Gruss Florian
__________________ www.planet-xaml.net |
| | |
| | #8 (permalink) |
| Nagelneuer User Registriert seit: Dec 2005
Beiträge: 924
|
Ich habe irgendwo mal gelesen, dass private und public auch über Namespaces realisiert sind. Ich habe mir das noch nicht näher angeschaut, ist das überhaupt möglich? Mit den doppelten Doppelpunkten wohl kaum.
__________________ The fact that you've got "Replica" written on the side of your gun and the fact that I've got "Desert Eagle written on the side of mine ... :D |
| | |
| | #9 (permalink) |
| 0x2b | ~0x2b; Registriert seit: Jan 2003 Ort: Rocky Beach
Beiträge: 370
|
Nicht nur das. Namespaces verhindern auch die Kollision von Variablen/Methoden mit gleichem Namen. Die flash.util.Proxy Klasse benutzt dafür z.B. den Namespace flash_proxy. Anstelle von :: kann man auch ein use benutzen, um einen Namespace auszuwählen. Neben der Zugriffskontrolle lässt sich über Namespaces aber auch Verhalten implementieren. Hier ein Beispiel aus der Doku, das Namespaces zur Unterscheidung der zu verwendenen Füllfarbe bei einem Rollover benutzt: ActionScript:
Gruß, bort.
__________________ http://www.flexperten.de |
| | |
| | #10 (permalink) |
| \x3a\x6f\x29 Registriert seit: Apr 2004 Ort: paris
Beiträge: 806
|
Danke für die Antworten. Damit klärt sich einiges. Die implementierung der Namespaces habe ich wohl auch falsch gesehen. Eine Math-Klasse für Vektoren wäre somit immernoch möglich, wenn ich vorher immer das Namespace umstelle. Dann würde die add() Funktion 2D Vektoren addieren oder so. Interessant ![]() Das Button Beispiel finde ich von MM schlecht gewählt. Da würde ich glaube ich einfach den Namen der Variablen mit einem Suffix wie Over, Out und Pressed versehen. Bort: Unter welchem Link hast du das in der Doku gefunden? Habe auch mal gesucht, aber nicht viel gefunden. |
| | |
| | #11 (permalink) |
| 0x2b | ~0x2b; Registriert seit: Jan 2003 Ort: Rocky Beach
Beiträge: 370
|
In der API Doku: Top Level --> Namespace http://livedocs.macromedia.com/labs/...Namespace.html Gruß, bort.
__________________ http://www.flexperten.de |
| | |
| | #12 (permalink) |
| flachzange Registriert seit: Jun 2003 Ort: berlin
Beiträge: 3.932
|
Die Namespaces für XML sind wohl notwendig und auch OK. Aber das Konzept auf Klassen umzuwälzen finde ich ein wenig obskur. Mir fällt zumindest nichts ein was ich nicht auch mit herkömmlichen Features realisieren könnte. Außerdem verleitet es stark dazu alles in einer Klasse zu definieren. Ich kann mir aber vorstellen das die Namespaces einen kleinen Performanceschub geben.
__________________ |
| | |
| | #13 (permalink) |
| \x3a\x6f\x29 Registriert seit: Apr 2004 Ort: paris
Beiträge: 806
|
bort: Das ist ja die Dokumentation zur Namespace Klasse. Ich dachte jetzt eher an etwas wie zum arbeiten mit den Namespaces. Es gibt ja auch irgendwo etwas über private, protected und public. Und eben das auch über Namespaces. Nur habe ich es nicht gefunden bisher. Elias: Namespaces sind doch toll. Aber, ich kann verstehen wenn man die für unnütz empfindet, denn eigentlich sind die Packages schon ein Ersatz (in Flash, in C++ nicht). |
| | |
| | #14 (permalink) |
| www.kruesch.de Registriert seit: Feb 2002
Beiträge: 1.057
|
Ich kann mir vorstellen, dass man das vielleicht für UI Programmierung einsetzen kann, um so was ähnliches wie Dependency Properties in XAML zu erreichen. Oder, wenn man die Sichtbarkeit von Methoden/Eigentschaften im Zusammenspiel von Klassen feiner regeln will als über private/protected/public. Das Beispiel aus der Doku finde ich aber total daneben... ![]() Florian
__________________ www.planet-xaml.net |
| | |
| | #15 (permalink) |
| 0x2b | ~0x2b; Registriert seit: Jan 2003 Ort: Rocky Beach
Beiträge: 370
|
Ok, hier ein Beispiel mit einem privaten Namespace, der nur von Klassen aufgerufen werden kann, die ein bestimmtes Interface implementieren. In der Klasse SecuredNameSpace ist ein privater Namespace deklariert. Die Funktion getHiddenNamespace prüft, ob das übergebene Objekt vom Typ ISecure ist. Wenn ja, dann wird der private Namespace zurückgegeben. Code: // Main.as
package {
import flash.display.Sprite;
import flash.util.trace;
public class Main extends Sprite
{
public function Main()
{
try
{
var testA:NameSpaceTestA = new NameSpaceTestA();
trace(testA.tryToGetText());
var testB:NameSpaceTestB = new NameSpaceTestB();
trace(testB.tryToGetText());
}
catch (e:Error)
{
trace("Error: " + e.message);
}
}
}
}
interface ISecure
{
}
class SecuredNameSpace
{
private namespace hidden_namespace;
public function getHiddenNamespace (obj:Object):Namespace
{
return (obj is ISecure)? hidden_namespace : null;
}
hidden_namespace function getText():String
{
return "Hidden Text";
}
}
class NameSpaceTestA implements ISecure
{
public function tryToGetText():String
{
var securedNameSpace:SecuredNameSpace = new SecuredNameSpace();
var ns:Namespace = securedNameSpace.getHiddenNamespace (this);
return securedNameSpace.ns::getText();
}
}
class NameSpaceTestB
{
public function tryToGetText():String
{
var securedNameSpace:SecuredNameSpace = new SecuredNameSpace();
var ns:Namespace = securedNameSpace.getHiddenNamespace (this);
return securedNameSpace.ns::getText();
}
} bort.
__________________ http://www.flexperten.de Geändert von bort (20-02-2006 um 16:23 Uhr) |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |