However, I saw that there was no clear idea about Interface and Abstract class design in the code. I say this because I saw some empty function in parent classes. Obviously, the programmer of parent classes wish subclass programmer to implement those empty functions. But, I did not see any code there to force subclass programmer to implement the function. The way to solve this is very simple, we only need to add a
throw statement in parent class. Ext.define('jia.blog.ParentClass', {
greeting : function(){
throw "Unimplemented method.";
}
}
Ext.define('jia.blog.ChildClass', {
extend: 'jia.blog.ParentClass',
greeting : function(){
alert('I implemented a abstract method');
}
}
About using Interface in Ext JS, I think the new feature mixins introduced in Ext JS 4.0 can be good candidate as it is invented to solve multiple inherent. In Java, we know that one class can only extends from one and only one parent class. But, it can implement multiple Interfaces. So, for my opinion, I will declare my interface as
mixins as below,//a mixins class to be used as Interface
Ext.define('jia.blog.TechnicalManager', {
level : 'manager',
meetingWithPM : function() {
throw "unimplemented method";
}
});
//a mixins class to be used as Interface
Ext.define('jia.blog.Mother', {
sex : 'female',
feedChild : function() {
throw "unimplemented method";
}
});
Ext.define('jia.blog.WorkingMom', {
mixins: {
inWork: 'jia.blog.TechnicalManager',
atHome: 'jia.blog.Mother'
}
meetingWithPM : function() {
alert('I am meeting with project manager');
}
feedChild : function() {
alert('I am feeding my kids');
}
});
Of course, you can put "abstract" method in
mixins too. I did not do it here just because I want to show how I use mixins as Interface in OOP manner. Actually, Javascript has no class at all. Class here should be called as Ext JS class as Ext JS 4.0 create the infrastructure of Class and Object. extend and mixins are both preprocessors in ExtJS 4.0. I list default preprocessors and postprocessors as below. - default preprocessors (defined in Class.js):
'extend', 'statics', 'inheritableStatics', 'mixins', 'config'
- default postprocessors (defined in ClassManager.js):
'alias', 'singleton', 'alternateClassName'
Although ExtJS tries to implement a Class infrastructure for OOP, it is not a sophisticated OOP environment after all. For example, the
throw statement we used above does not really force subclass developer to implement methods. Subclass developer will not know until he run the code. This happens there is no something like ExtJS compiler or interpreter. But, we can apply certain OO design concept with it. Also, we need to be careful not to make same properties or function names in different preprocessors or postprocessors as, obviously, ExtJS class functions will deal with these processors in sequence.
Great Job..
ReplyDeletedo you have an example to define a component which extending from Panel and add a few component on it?
ReplyDeleteThanks,
Pat