В асме тоже ООП нет. И ничего, пишут. А вообще можно половину раскидать по DLL
Если правильно прикрутить COM, то он вполне годится для ООП.
jangle писал(а):Поделитесь советами. Как лучше разбивать функциональность на блоки. Какая структура проекта и #include файлов. ООП то нет. Сотни неинкапсулированных функций, десятки глобальных переменных.. Это задница однако! Классы нужны, навигатор проекта и т.д. Все-таки VB IDE не такая уж и плохая штука
'----------------------------------------------------
FUNCTION DSP_PERF_ASSERT_COUNTER ALIAS "DSP_PERF_ASSERT_COUNTER" () EXPORT AS LONG
'function takes
' nothing
'
'function returns
' long - %DSP_OK = 0& on success or error code on error
'
'notes: function sets the internal high frequency
' performance counter and stores the current
' value in a persistent variable. this function
' should be called right before any dsp function
' the caller wishes to time. right after the
' dsp function is complete the caller should
' call DSP_PERFORMANCE_COUNT to return the
' elapsed time or clocks that the function took.
' this function will fail if the hardware does
' not support a high frequency performance
' counter.
LOCAL l AS LONG
IF g_HRPF = 0&& THEN ' does this system support the high resolution performance counter?
FUNCTION = %DSP_ERR_HRPC_NOT_SUPPORTED ' set error if hrpc does not exist
EXIT FUNCTION ' return
END IF
l = QueryPerformanceCounter(g_HRPC) ' get the performance counter
IF l = 0& THEN ' did the call fail
FUNCTION = %DSP_ERR_HRPC_CALL ' set error code
END IF
END FUNCTION
Часть глобальных переменных можно кинуть в глобальные структуры
jangle писал(а):Часть глобальных переменных можно кинуть в глобальные структуры
Интересная мысль! Так можно значительно сократить и упорядочить глобальные переменные.
jangle писал(а):ООП то нет. Сотни неинкапсулированных функций, десятки глобальных переменных.. Это задница однако!
jangle писал(а):Классы нужны, навигатор проекта и т.д. Все-таки VB IDE не такая уж и плохая штука
Классы нужны, навигатор проекта и т.д. Все-таки VB IDE не такая уж и плохая штука
навигатор проекта = http://www.zippety.net/
и еще прикрепил архивчик, не помню где его надыбал, - примеры реализации ООП, хотя наверное все таки привычка, мне проще создать свои include файлы с именами отвечающими за их назначение.
jangle писал(а):в архиве только include файлы, примеров нет.
'OOP in PB.bas
'An Introduction to Object Oriented Programming
'By Colin Schmidt, placed into Public Domain 2003-11-21
'Praxis Enterprises, Chilliwack, BC, Canada
'Colin(at)PraxisEnt.com
#COMPILE EXE
#INCLUDE "OOP in PB.inc" 'Win32API declares, used IncLean
#INCLUDE "Object.inc"
#INCLUDE "ObjectOne.inc" 'Parent, has lMyVar1 and lMyVar2
#INCLUDE "ObjectTwo.inc" 'Second Parent, has lMyVar3 and lMyVar4
#INCLUDE "ObjectOne_A.inc" 'Example of Child, has spMyVar1 and spMyVar2
#INCLUDE "ObjectOne_A_A.inc" 'Example of Grandchild, has spMyVar 1,2,3,4
#INCLUDE "ObjectOneWithTwo.inc" 'Example of Child with two Parents, has lMyVar 1,2,3,4
FUNCTION PBMAIN
LOCAL loObjBasic AS oObject
LOCAL loObjOne AS oObjectOne
LOCAL loObjTwo AS oObjectTwo
LOCAL loObjOne_A AS oObjectOne_A
LOCAL loObjOne_A_A AS oObjectOne_A_A
LOCAL loObjOneWithTwo AS oObjectOneWithTwo
loObjBasic = NewObject
IF loObjBasic = %False THEN : MSGBOX "Failed to create Object" : EXIT FUNCTION
loObjOne = NewObjectOne
IF loObjOne = %False THEN : MSGBOX "Failed to create ObjectOne" : EXIT FUNCTION
loObjTwo = NewObjectTwo
IF loObjTwo = %False THEN : MSGBOX "Failed to create ObjectTwo" : EXIT FUNCTION
loObjOne_A = NewObjectOne_A
IF loObjOne_A = %False THEN : MSGBOX "Failed to create ObjectOne_A" : EXIT FUNCTION
loObjOne_A_A = NewObjectOne_A_A
IF loObjOne_A_A = %False THEN : MSGBOX "Failed to create ObjectOne_A_A" : EXIT FUNCTION
loObjOneWithTwo = NewObjectOneWithTwo
IF loObjOneWithTwo = %False THEN : MSGBOX "Failed to create ObjectOneWithTwo" : EXIT FUNCTION
'Test Object
MSGBOX FORMAT$(@loObjBasic.lActive), , "@loObjBasic.lActive = 1"
'Test ObjectOne
MSGBOX FORMAT$(@loObjOne.lMyVar1), , "@loObjOne.lMyVar1 = 1"
@loObjOne.lMyVar1 = 3
MSGBOX FORMAT$(@loObjOne.lMyVar1), , "@loObjOne.lMyVar1 = 3"
MSGBOX FORMAT$(@loObjOne.lMyVar2), , "@loObjOne.lMyVar2 = 2"
mObjCall(loObjOne, @loObjOne.eSet2From1, 0)
MSGBOX FORMAT$(@loObjOne.lMyVar2), , "@loObjOne.lMyVar2 = 3"
'Test ObjectTwo
MSGBOX FORMAT$(@loObjTwo.lMyVar3), , "@loObjTwo.lMyVar3 = 3"
MSGBOX FORMAT$(@loObjTwo.lMyVar4), , "@loObjTwo.lMyVar4 = 4"
mObjCall(loObjTwo, @loObjTwo.eSet4From3, 0)
MSGBOX FORMAT$(@loObjTwo.lMyVar4), , "@loObjTwo.lMyVar4 = 3"
'Test ObjectOne_A
MSGBOX @loObjOne_A.@spMyVar1, , "@loObjOne_A.@spMyVar1 = 1"
MSGBOX @loObjOne_A.@spMyVar2, , "@loObjOne_A.@spMyVar2 = 2"
mObjCall(loObjOne_A, @loObjOne_A.eSet2From1, 0)
MSGBOX @loObjOne_A.@spMyVar2, , "@loObjOne_A.@spMyVar2 = 1"
'Test ObjectOne_A_A
MSGBOX @loObjOne_A_A.@spMyVar1, , "@loObjOne_A_A.@spMyVar1 = 1"
MSGBOX @loObjOne_A_A.@spMyVar2, , "@loObjOne_A_A.@spMyVar2 = 2"
MSGBOX @loObjOne_A_A.@spMyVar3, , "@loObjOne_A_A.@spMyVar3 = three"
MSGBOX @loObjOne_A_A.@spMyVar4, , "@loObjOne_A_A.@spMyVar4 = four"
mObjCall(loObjOne_A_A, @loObjOne_A_A.eSet4From1, 0)
MSGBOX @loObjOne_A_A.@spMyVar4, , "@loObjOne_A_A.@spMyVar4 = 1"
mObjCall(loObjOne_A_A, @loObjOne_A_A.eSet2From1, 0)
MSGBOX @loObjOne_A_A.@spMyVar2, , "@loObjOne_A_A.@spMyVar2 = 1"
'Test ObjectOneWithTwo
MSGBOX @loObjOneWithTwo.@spName, , "@loObjOneWithTwo.@spName = no name"
@loObjOneWithTwo.@spName = INPUTBOX$("Your first and last name in lowercase:", _
"@loObjOneWithTwo.@spName", _
@loObjOneWithTwo.@spName)
mObjCall(loObjOneWithTwo, @loObjOneWithTwo.eSetMCase, 0)
MSGBOX @loObjOneWithTwo.@spName, , "@loObjOneWithTwo.@spName = Your Name"
MSGBOX FORMAT$(@loObjOneWithTwo.@lpMyVar1), , "@loObjOneWithTwo.@lpMyVar1 = 1"
MSGBOX FORMAT$(@loObjOneWithTwo.@lpMyVar2), , "@loObjOneWithTwo.@lpMyVar2 = 2"
MSGBOX FORMAT$(@loObjOneWithTwo.@lpMyVar3), , "@loObjOneWithTwo.@lpMyVar3 = 3"
MSGBOX FORMAT$(@loObjOneWithTwo.@lpMyVar4), , "@loObjOneWithTwo.@lpMyVar4 = 4"
mObjCall(loObjOneWithTwo, @loObjOneWithTwo.eSet2From1, 0)
MSGBOX FORMAT$(@loObjOneWithTwo.@lpMyVar2), , "@loObjOneWithTwo.@lpMyVar2 = 1"
mObjCall(loObjOneWithTwo, @loObjOneWithTwo.eSet4From3, 0)
MSGBOX FORMAT$(@loObjOneWithTwo.@lpMyVar4), , "@loObjOneWithTwo.@lpMyVar4 = 3"
mObjCall(loObjOneWithTwo, @loObjOneWithTwo.eSet4From1, 0)
MSGBOX FORMAT$(@loObjOneWithTwo.@lpMyVar4), , "@loObjOneWithTwo.@lpMyVar4 = 1"
KillObject loObjBasic
KillObjectOne loObjOne
KillObjectTwo loObjTwo
KillObjectOne_A loObjOne_A
KillObjectOne_A_A loObjOne_A_A
KillObjectOneWithTwo loObjOneWithTwo
END FUNCTION
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1