|
ArcaOS 5.0 Russian
Russian ARCAOS exists and it's available since the middle of 2017.
All versions are supported: 5.0, 5.0.1, 5.0.2.
eCo Software is able release OS/2 LIP packages for any other language
(German, Dutch, Brazilian Portuguese, Spanish, Sweden, etc)
|
Object-Oriented Programming in eComStation, Part 1: Introduction |
TITLE: Object-Oriented Programming in eComStation, Part 1: Introduction
DATE: 2006-05-05 03:49:17
AUTHOR: Yuri Prokushev
Please use online translator go to http://translate.google.com and request the translation of http://ru.ecomstation./showarticle.php?id=144 to your language |
........
...... .... ...... ........ ............ .. ..... ........-................
................ . ....... eComStation . ....... ......... ...... SOM. ......
.......... .... ...... ............. . ............ ......... ...... .
......... ......... ......., ............ .. ...... .......
. ....... ..... ..... ...... ... ........... ......... ...........:
- Developer's Toolkit (. ....... eComStation)
- Open Watcom (. ....... eComStation)
- Free Pascal
.............., ... ........ ...... . ........-...............
................. . ........ ..... C/C++/Delphi, . ..... .......
........ ............. ....... eComStation.
... ..... SOM?
SOM (System Object Model, ......... ......... ......) - ... ......... ......, ........... .. ........... ..... ................, ............... ... ........ . ........ ........ ......... ........ SOM ............ ..... .... .. ........ .......... .......... . ....... ............ ..........
........-............... ................ (...) .........
.............. ......... . ........ ........ ..........
...... ........... ............. ............ ... ..............
................ ......... ......., ............... ..........
.............. ..., ........, ......, ......... . ....... VAC, .. .....
........ ............. Watcom ... GCC. . . ...... ...... ...... ...
..... ...... ..... ........ ...... .... ... ............. ...... . ....
.. ..........., .. ...... .......
SOM ....... ... ............ ....., ......... SOM, .............. .......... ....... . ........ .. ...... ......... ..... ..... ...., SOM ............ ....... .. ...... ... ............. eComStation. ......... ......... SOM ........... . .. ............. ........... . ..... .......... . ..... ...... .................
. SOM ......... ...... ...... ........... . ....... ..... IDL (Interface Definition Language, .... ........... ..........), ....... ..... .... ............ . .......... ........... ..... ................. ..., ........, ... ............. ..... C ... ......... ......, .... IDL
..... ............ . ..... ...... .C . .H, ....... . .......... ............ ... ...... ... ......... .......... SOM ... ...... SOM. . ....... .. ........., ........... C++ ... Delphi, ...... SOM ..... .... ..... ........ . ..... ...... ......
SOM ............ . ......... ..........., . ........., ......... ........ ..... WPS (Workplace Shell) ......... ........ .. .... SOM. ..... ...., SOM ........ ..... VX-REXX . VisPro REXX. ...... ......... ...... ............. ...... SOM - ... OpenDoc. ..........., ..... .........., ............ .. WPS, ........ ........... SOM. ........ ..... ..........
........... ....... . ...... ......... ............ ........ ..... Object Desktop . xWorkplace . .......... ...... ............, ... Audio-Data CD Creator . CW Multimedia Classes.
...... SOM ..... ............ . .... DLL- ... EXE-....... ............. DLL .... ....... ........ ...... . ....... DLL WPS ........ ............... .... ............ ............. .. EXE . ... ....... . ... ....... .... ... .......... .. ........, ............ . ...... .... C++.
.............. ..........
DSOM (Distributed System Object Model, .............. ......... ......... ......) ......... ........ SOM ........ . ......... .......... ... ........ ..... ......... ... .. ..... ......, ... . .. ..........., ............. . ..... ............, ..... ...... ...... ....... ......... .......... WPS ........... ..... ......., ... ... ........ ....... .... .. WPS ... ....... . .............. ........ DSOM, .. ....... WPS-.......... ........... .. ..........., ..... ...., ... . .... ...... ......... .. ........... .......... .... .......... ....., . .. ... .......... WPS ........
DSOM ............. ............ CORBA (Common Object Request Broker Architecture), ....... .......... ........ .............. ..... ........... ........... . ............ .....
............ CORBA .... ........... ............ Object Management Group, ............
..... 300 ........ - ........... ............ ........... . ............, . ..... ............ .. .......... . .......... ...... ... ........ ............ ....., ... .......... ... ............ ........
............ CORBA ........ ...... ..... ........ ......... ... .............. ........., ........... OMA (Object Management Architecture, ........... .......... .........). CORBA .......... ........... .......... .......... ....... (Object Request Broker - ORB), ....... ......... ............... ..... ......... . ........... ............ ..... ORB ..... ........ ....... ..... .........., ........... .. ..... ......, ... ..... ........ . ..... DSOM ............ ..... .......... CORBA ORB.
Developers Toolkit ............ . ........... ............. ......, ....... ........ "Replication Framework", ......... ....... ............ . .......... ......... ............, .... . ........ ..... ......... . ..... ............. ....... ..... ........ .. .... ...... ........ ... .... . ...... ...... ...... .. ............. ...... .......... - "Persistence Framework" - ............ ... ........, ........... .. ...... "Event Management Framework" ..... .... ............ ... ............ ........, .......... .. ........, ........ ....... ......... Presentation Manager. ....... ....., ... ....... ............ SOM .. ..........
. .......... ........ .. ........ . ....... ......... ......... ..... .........
........ ..........
........ . SOM ..... ......... ..... ........ . ...... ........ ............ ........, .. ...... ..... ..... .......
COM (Component Object Model, ............ ......... ......), .......... ........ ........... CORBA. ...... .......... .......... ...... ........ .......... ............ ...... ...... Windows ........ Microsoft. ......., ......, ... ............... COM .......... ..... .... ..... .......... . ....-.. ..... .....-...... .......... .. .......
...... . COM ....... ........ .......... XPCOM (Cross Platform COM), ............... . ...... .......
Mozilla. . ....... .. COM, XPCOM ............... ... ........... ...... ......... ......... ............. .............. .......... ....... ........ ........, ... ....... ............... .......... Mozilla.
.. ....... ..... ........ ......... .......... CORBA. .. ...... ..... ....
ORBit2 - .......... CORBA ... ....... GNOME2. ...... (...., ..... ...., . ......) .... ..........
MICO. ......., ........... .. ..... .. ..... ......, .... ......... ....... ...... ..... ... ........... .......... .......... ............... .. ......... ..... ................: C, C++, Delphi, Java . ...
SOM ...... C++/Delphi
......, ..... .. ............ ............. . .......... ......... SOM . Toolkit, ....... .......... ...-...... SOM.
....... ....... .........., ... .......... ... ... ...... ...? SOM .......... ...... ..... ............... .. ...... .........., . .. ..... ... C++ . Delphi ...... ... ..... ............. .. ...... ........... . ...... SOM ... ........, ... ...... ......., ....... ..... ....... ..., ........, ...... ....... ....... ........... ... ...... ........ .. ..... ...........
...... .......... .. ..... .. ......... ....:
- .......... .. ........ (.. .........)
- .......... .. .....
- .......... . ....... dispatch-.......
........... ...... .......... .. ........ ........ ........... .......... .... .. ........ .......... ........... ........ C++ . Delphi. ..... .......... .. ..... ......... ........ ..... ......, ... ....... .......... .. ... ..., .... ......... .. ......... ........ ...... . .............. ..... - ..... .......... . ....... dispatch-........ ...... ..... ......... ........ ...... . ........... .. ............. ............ ........... . ....... .. C++, SOM .. .........
........... (...... ...... .......... ......., ...... .......... ...., "...............". .... . .. .. .. ..... ......) ...... .
..........
... ............. .. C++ ... Delphi ...... ......... ........ .........
......... . .......... . C++ . Delphi ..... ....... ........ ........ ......
...... . ...... ...... ........ ........... (static) ....... ....... . ......
SOM ........ ..... . .......... ........., ...... ........ ............
..........., . ....... ........ ............ ........ ......... ........
... ....... . ......, ........... . ....... ...... ....., ......... .....
........ ...... . ......, ....... . C++ . Delphi .... ... ........ .........
............, . ....... ........., ........, .............
....... ...... 1
....... ....... ...... "Hello World" ......... IBM . ....... .....-......
...... . ....... ...... . HELLO.IDL.
#ifndef hello_h
#define hello_h
#include <somcls.idl>
interface M_Hello;
interface Hello : SOMObject
.
string hello_();
attribute string hellomsg;
void sayHello();
#ifdef __SOMIDL__
implementation
.
releaseorder: hello_, _get_hellomsg, _set_hellomsg,sayHello;
callstyle=oidl;
filestem = hello;
metaclass = M_Hello;
somInit: override;
.;
#endif /* __SOMIDL__ */
.;
interface M_Hello : SOMClass
.
attribute string ClassData;
Hello HelloCreate(in string msg);
// ...... ..... ....... .......... ...... Hello
// . .......... ........ "msg" ... ... ...............
#ifdef __SOMIDL__
implementation
.
releaseorder: HelloCreate,_get_ClassData,_set_ClassData;
callstyle=oidl;
filestem = hello;
functionprefix=M_;
somInitMIClass: override;
somInit: override; // ...... .... ... ........ ........ ............. ......
.;
#endif /* __SOMIDL__ */
.;
#endif /* hello_h */
. ..... Hello ... ........ ..... void sayHello(). . ......... M_Hello ...
........ ....... string ClassData. ........... ........ ............. ........
. ........ ....... _get_ . _set_, ............... ... ......... . ..........
... ........ ............... ... .. IBM ..... .... ...... . ........
\som\samples\somk\cpp\derived SOMObjects toolkit, .... .......
SOM .... ............ ... ... ...... sayHello() ....... ..... ...... .....
............, ... ..... .......... ...... . ...... ....... .......... ...
....... .. C++.
SOM_Scope void SOMLINK sayHello(Hello *somSelf)
.
//... ... ....... ............. ......... ............ SOM
HelloData *somThis = HelloGetData(somSelf);
HelloMethodDebug("Hello","sayHello");
// ........ ......... ......
M_Hello *helloCls=(M_Hello *)somSelf->somGetClass();
somPrintf("%s .......... ...... %s\n",somSelf->_get_hellomsg(),helloCls->_get_ClassData());
.
... .. ........, ..... ...... . ...... . ......... .............. .
....... ....... _get_ . _set_ ...... ...... ............. ..... .........
....., ...... ...... ........ . ....... ......... .. .........
.......... M_Hello.
.........: M_Hello ........ ........... ... ...... Hello.
. ...... ....... ........ ....... .. ..... ........
int main(int argc, char *argv[])
.
Hello *a,*b,*c;
// ....... ......... .......... M_Hello (........ ...... helloClsObj)
M_Hello *helloClsObj=HelloNewClass(Hello_MajorVersion,Hello_MinorVersion);
//......... ...... ......
helloClsObj->_set_ClassData("Class 1");
//....... ..... ...... M_Hello HelloCreate ... ........ ..........
//...... Hello (....... a, b, c)
a=helloClsObj->HelloCreate("...... .. ....... A");
b=helloClsObj->HelloCreate("...... .. ....... B");
c=helloClsObj->HelloCreate("...... .. ....... C");
//....... ..... sayHello ... ....... .......
a->sayHello();
b->sayHello();
c->sayHello();
// ........... .......
a->somFree();
b->somFree();
c->somFree();
return 0;
.
..... .......... . ....... ......... .. ....... .........:
...... .. ....... A .......... ...... Class 1
...... .. ....... B .......... ...... Class 1
...... .. ....... C .......... ...... Class 1
..... . ......... ... OpenWatcom . .... .......
....... ...... 2
....... ...... ........ ......... ... .... ....... ...... ....., ...
........ ...... ...... .......... ....... ... .......... ... .... .........
....., ... .............. . ....... ..... ........... .......... IDL.
.......... ...... ........ ...:
#include <somcls.idl>
// ......... ........... ....... .......
interface Demo : SOMObject
// ........... ...... Demo, ....... ........ ........ SOMObject
.
attribute string DemoWord;
// .....-...... ..... ........ ......
void sayDemoWord();
// .....-...... ..... ........ .....
.;
... .., ........, ........, ..... ... ....... ............ .............,
............ ..... ...... ....... .......... ............. ......... ......
....... ..... ........ ............ .........., .... ......... . .........
........... ...... (........). ....... ..... ......... ..... .. .....
........ .......
..... ...., ... .. ....... ......... ...... ...... ......, .... .. ......
........ ... ........... .......... ... ...... ...... ............. ..... C.
... ..... ........ .. .......... ............... ....... ... ..... ........
... ........:
sc -sh;ih;c;def demo.idl
. .......... .. ........ .....:
'''....''' | '''........''' |
demo.c | ...... ..... .......... ...... |
demo.ih | .... ......... .......... ...... |
demo.h | .... ......... ... ....... |
demo.def | ...... ... ........ .......... ...... |
........ ... ...... ........., ....... ..... ......... ... .......... ......
Demo, ............. ........ ........ DemoWord . ........ ..... sayDemoWord.
....... .. .. .... ......: C . C++. ... ...... ..... ....... ......., C++:
// ........ ........... .......... ...... Demo ... C++
#include "demo.xh"
int main(int argc, char *argv[])
.
// ........ ...... .. .........
Environment *ev = somGetGlobalEnvironment();
// ....... .......... ...... Demo (....... demo1 . demo2)
Demo *demo1 = new Demo;
Demo *demo2 = new Demo;
//............. ........ ........ DemoWord
demo1->_set_DemoWord(ev, "123");
demo2->_set_DemoWord(ev, "321");
// ........ ...... sayDemoWord
demo1->sayDemoWord(ev);
demo2->sayDemoWord(ev);
// ........... .......
delete demo1;
delete demo2;
// ...........
return 0;
.
...... ......: "... ..... .... demo.xh?". ....., ......., .........
............. . ....... sc:
sc -sxh demo.idl
. .......... .. ........ .... demo.xh. ..... ....... ........, ... ..
......... Developer's Toolkit .. ........ ...... xh. .. ....... .............
. ....... .......
somxh
.. ......... . .......... ........, ..... ... .......:
- ... ...... ..... .............. ........ ev
- ............ ........... ....... C++ ... ........ . ........ ........
........ ev (.......... ... .......... ............ callstyle=oidl) ........ .. ...... ......... . ............, ........, ... ........... . ........, ..... ........... callstyle=oidl ... ......... .......... ..... ......, ..... ...... ..... ........ . .......... ... .......... ............. . CORBA . ........ ....... ............. . ..... ....... ........ SOM.
....... ...... ... ......... ..... .. ... ... ..... C:
#include "demo.h"
int main(int argc, char *argv[])
.
// ........ ...... .. .........
Environment *ev = somGetGlobalEnvironment();
// ....... .......... ...... Demo (....... demo1 . demo2)
Demo *demo1 = DemoNew();
Demo *demo2 = DemoNew();
//............. ........ ........ DemoWord
Demo__set_DemoWord(demo1, ev, "123");
Demo__set_DemoWord(demo2, ev, "321");
// ........ ...... sayDemoWord
Demo_sayDemoWord(demo1, ev);
Demo_sayDemoWord(demo2, ev);
// ........... .......
_somFree(demo1);
_somFree(demo2);
// ...........
return 0;
.
... ....., ... ............. ...... SOM .. ......... ....... . .....
......... ........ ... ........
...... .. ..... .... ... ... ........ ...... ....... ......... ......
... ...... .... .. ...... ... ............ ........... ..... .. ..... C,
.. ....... ............... ..... .... demo.c . ....... ........... ...:
/*
* This file was generated by the SOM Compiler and Emitter Framework.
* Generated using template emitter:
* SOM Emitter emitctm: 2.23.1.9
*/
#ifndef SOM_Module_demo_Source
#define SOM_Module_demo_Source
#endif
#define Demo_Class_Source
#include "demo.ih"
/*
* .....-...... ..... ........ .....
*/
SOM_Scope void SOMLINK sayDemoWord(Demo *somSelf, Environment *ev)
.
DemoData *somThis = DemoGetData(somSelf);
DemoMethodDebug("Demo","sayDemoWord");
somPrintf("...... %s\n",_get_DemoWord(somSelf, ev));
.
... ....., . ..... ...... ......... ..... ......: ........ ........ ........ . ....... ... .. ...... ... .. ....... . ........ ....... ......, ... ... ...... ...... ...... somSelf ........ ......... ........ ....... somThis ............ ... ....... . ...... (.........) ....... .......... .......
...... ............ . ........ .......... . ........ ......... ...........
... ..... ........ Makefile:
CPPC = wpp386
CC = wcc386
INC = -I. -I$(SOMBASE)\include
SC = $(SOMBASE)\bin\sc
SCFLAGS =
LINKER = wlink
LDFLAGS =
LIBLIST = $(SOMBASE)\lib\somtk.lib
all: $(SOMBASE)\include\somxh.bld test.exe testc.exe
test.exe: test.obj demo.obj
$(LINKER) $(LDFLAGS) file demo.obj file test.obj library $(LIBLIST) name test.exe
test.exe
testc.exe: testc.obj demo.obj
$(LINKER) $(LDFLAGS) file demo.obj file testc.obj library $(LIBLIST) name testc.exe
testc.exe
clean: .symbolic
-del *.err *.obj *.exe *.map *.xh *.ih *.h $(CLEANFILES) >nul 2>&1
$(SOMBASE)\include\somxh.bld:
@echo ...... ...... ....... ...... .......... C++
@echo ......... . ....... ....... somxh.
@exit 1
testc.obj: test.c demo.h
$(CC) $(INCLUDEPATH) $(CCFLAGS) $[ -fo=testc.obj
test.obj: test.cpp demo.xh
$(CPPC) $(INCLUDEPATH) $(CPPCFLAGS) $[
demo.obj: demo.c demo.ih
$(CC) $(INCLUDEPATH) $(CCFLAGS) $[
demo.ih: demo.idl demo.h
$(SC) -sih $(SCFLAGS) $[
demo.h: demo.idl
$(SC) -sh $(SCFLAGS) $[
demo.xh: demo.idl
$(SC) -sxh $(SCFLAGS) $[
..... .... ... ...... ......... ........ ....... wmake, .. ....... ... .....:
test.exe . testc.exe. ...... - .......... .. C++, ...... - .. C. ........ .
....... ............. .........:
...... 123
...... 321
......., ... .. ..... .......... .. ....... ......... ..............,
............ ...., ... .. ...... ....... ............ ........ . ......
.......... ....... ....... ............ .. ...... ......, ... ..........
....... ....... ... ..... ........... ...... ............
".. . ... ..?" - ...... .. ........ - ". ... .. .......... .......?". .......
........ ..... ........... ... ..... ...... ...... ... ........... . Makefile:
CPPC = wpp386
CC = wcc386
INC = -I. -I$(SOMBASE)\include
SC = $(SOMBASE)\bin\sc
SCFLAGS =
LINKER = wlink
LDFLAGS =
LIBLIST = $(SOMBASE)\lib\somtk.lib
all: $(SOMBASE)\include\somxh.bld test.exe testc.exe testdll.exe
test.exe: test.obj demo.obj
$(LINKER) $(LDFLAGS) file demo.obj file test.obj library $(LIBLIST) name test.exe
test.exe
testc.exe: testc.obj demo.obj
$(LINKER) $(LDFLAGS) file demo.obj file testc.obj library $(LIBLIST) name testc.exe
testc.exe
testdll.exe: testdll.obj demo.lib demo.dll
$(LINKER) $(LDFLAGS) file testdll.obj library $(LIBLIST) library demo.lib name testdll.exe
testdll.exe
demo.dll: demodll.obj demoinit.obj demo.def
$(LINKER) format os2 lx dll initinstance $(LDFLAGS) file demodll.obj file demoinit.obj
library $(LIBLIST) name demo.dll export DemoCClassData, DemoClassData, DemoNewClass, SOMInitModule
demo.lib: demo.def
implib $@ $[
clean: .symbolic
-del *.dll *.def *.lib *.err *.obj *.exe *.map *.xh *.ih *.h $(CLEANFILES) >nul 2>&1
$(SOMBASE)\include\somxh.bld:
@echo ...... ...... ....... ...... .......... C++
@echo ......... . ....... ....... somxh.
@exit 1
testc.obj: test.c demo.h
$(CC) $(INCLUDEPATH) $(CCFLAGS) $[ -fo=testc.obj
testdll.obj: testdll.c demo.h
$(CC) $(INCLUDEPATH) $(CCFLAGS) $[
test.obj: test.cpp demo.xh
$(CPPC) $(INCLUDEPATH) $(CPPCFLAGS) $[
demo.obj: demo.c demo.ih
$(CC) $(INCLUDEPATH) $(CCFLAGS) $[
demodll.obj: demo.c demo.ih
$(CC) $(INCLUDEPATH) $(CCFLAGS) -bd $[ -fo=demodll.obj
demoinit.obj: demoinit.c demo.ih
$(CC) $(INCLUDEPATH) $(CCFLAGS) -bd $[
demo.ih: demo.idl demo.h
$(SC) -u -sih $(SCFLAGS) $[
demo.h: demo.idl
$(SC) -sh $(SCFLAGS) $[
demo.xh: demo.idl
$(SC) -sxh $(SCFLAGS) $[
demo.def: demo.idl
$(SC) -sdef $(SCFLAGS) $[
. .......... .. ........ .......... demo.dll . ...... ......., . .
testdll.exe ..... ...... ............. ...... ...........
......., ... ... ........ .......... .......... .............. ..... 3 (!)
......., ..... .......... ...... .. ..... ....... . ...... ............. .
DSOM ... ObjectREXX ... ........... ........ ... .... ......., ....... .....
.............. ..... (..... .., ......... .. .. .... .......). ..... ....,
... .......... DSOM . ObjectREXX ... ........... ...... ...... . ...... .
........... ........... (......... - . ......... ........). ...... ......
. ...... . ........... ........... ..... . ....... ..... -u ...........
SOM . ........ IR.
........ ...... ..... ....... . ........ ........ .............. ..
ObjectREXX:
/* ...... - ...... ... .... ...... . ....... */
parse version . rxlevel .
if rxlevel<='4.00' then do
say '... .......... ....... ....... ......... ObjectREXX'
exit
end
/* ....... ....... */
a=.Demo~new
b=.Demo~new
/* ............. ........ */
a~_set_DemoWord('123')
b~_set_DemoWord('321')
/* ........ */
a~sayDemoWord
b~sayDemoWord
/* ....... .......... .. ...., REXX ... .. ...... */
/* .............. ...... SOM */
::Class Demo Public EXTERNAL 'SOM Demo'
..... . ......... ... OpenWatcom . .... .......
. ......... .......
.. ....... ............ . ........ ............ . ........ SOM. .....
.. ......... ....... .......... ..... ....... . ...... INI . ........
... . .... .......... ........
.............. ..........:
Kommentare: Martin Böhme 2006-05-10 01:03:51 | Hi,
I'm interessted ist this articale. Is there a translation to german/english?
Regards,
Martin Böhme | AVB 2006-05-10 12:58:37 | To: Martin
"Exploring IBM’s SOM," Part 1, Garbrielle Gagnon, PC Magazine, October 10, 1995
| Yuri Prokushev 2006-05-11 10:03:47 | To: Martin
Most probably, will not be translated. But I published something like this in EDM/2
To: AVB
;) Only first paragraph. | Yuri Prokushev 2006-05-11 10:11:31 | [url]
| ....... .... 2012-10-23 16:13:39 | . ..... ...... ............. .. Delphi, . Delphi .... ....... ........... .... TClass, . . .......... .... TClass ..... ........ ......, ....., ... ClassName. . ...... "class of ...–......" ..... ...... ........ .... .... ........... ..........., .. . ....... ......... ...... ...... ..., ... ........... ..... class function ... class procedure, . ........ SOM .. ....... ....... ..........
........ .... TClass . Delphi .. ........ .......... .......... .. .... .. ...., class function . class procedure ... ... .......... .. ........ ..... ......–........ . ...... .......–........ ..... .... ...... ......, .. ...... ... . ....... .. ..... .... ... ..... ....... ... ...... .... ......... . ....... . ..... ......, . ...... ......, .. ...., ...........
. Java ...... ........ (..., .. ....... ...., ............) ......... .... java.lang.Class, .. ... ...... ....... . .... ........ ... ... .., ... . . ....... . . SOM — ..... |
Kommentiere diesen Artikel.
|
It's easy to maintain eComStation: a) Fast installation (20 minutes and it's ready), b) Universal drivers, replace a device - the system boots and continues work, c) Use eCS to recover damaged Windows (no danger to be infected by virus) |
|
|