Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Иван FXS
Зарегистрирован: 26.09.2002 Сообщения: 12
|
Добавлено: Чт Сен 26 2002 11:08 Заголовок сообщения: "двухслойное" программирование? |
|
|
Здравствуйте, коллеги.
Я хотел бы обсудить следующую тему. Пусть у нас есть некая сложная задача, под которую мы пишем сложный большой проект ... (У меня, в самом деле, есть такая задача, я пишу на VBA.)
Каждая "система" программирования (язык, оболочка и т.п.) дает некоторый фиксированный инструментарий для написания программ: более или менее мощный, с одной стороны, и - более или менее "дружелюбный" (легко осваиваемый и комфортный и применении) - с другой.
С другой стороны, - если мы имеем достаточный кругозор и какой-то достаточно обширный набор идей о том, что такое "эффективное программирование", - то у нас неизбежно возникает желание применить эти идеи в своем проекте ... Соответственно, постепенно выстраивается целый пласт своих собственных инструментов, расширяющих стандартные возможности используемой системы программирования. При этом на любом современном языке программирования (например, на VB) можно создавать эти "специальные инструменты программирования" практически неограниченной сложности и мощности ...
Соответственно, у меня есть три вопроса: первый - достаточно абстрактный - как должен быть устроен этот слой собственных инструментов программирования, и как должен он взаимодействовать с основным "предметным" проектом?
Второй вопрос - организационный: где в рунете обсуждаются подобные вопросы (желательно - на материале VB)? Как мне найти "единомышленников" по данной теме?
Третий вопрос более конкретный: предположим, я хочу, чтобы основной текст кода проекта был написан в стандартных средствах VB, но чтобы на всем протяжении этого "стандартно-предметного" кода были расставлены специальные "люки", через которые программа уходила бы "наверх" в слой мета-программы, обеспечивающей эти самые дополнительные, повышающие эффективность проекта как целого процедуры ... Есть ли у кого-нибудь какие-то наработки, или идеи, или интересы в этой области? Существуют ли в этой сфере какие-то "стандарты", или, например, библиотеки мета-инструментов?
НП, Иван FXS |
|
Вернуться к началу |
|
|
Skip A.
Зарегистрирован: 29.09.2002 Сообщения: 24 Откуда: Newark
|
Добавлено: Вс Сен 29 2002 00:38 Заголовок сообщения: Re: "двухслойное" программирование? |
|
|
На мой скромный взгляд подводный камень скрывается в архитектуре процессора И/или совеременных процессорах. Мы все как-то привыкли к x86.... Соответственно вряд ли можно вырваться из окружения "потоков" и "процессов". Вас просто не отпустит операционная система. (типа windows). Это только в DOS уходить... или еще куда. но вряд ли вам это понравится с вашим VBA. Можете серьезно меня материть, буду рад, если я не прав. |
|
Вернуться к началу |
|
|
Иван FXS
Зарегистрирован: 26.09.2002 Сообщения: 12
|
Добавлено: Пн Сен 30 2002 22:27 Заголовок сообщения: Re: "двухслойное" программирование? |
|
|
2 Skip: Сорри, я не понял, зачем нужно "вырваться из окружения "потоков" и "процессов""?
2 All. Здравствуйте, коллеги Например, конструкция "люка на второй этаж" могла бы выглядеть так, как в приведенном ниже листинге. В качестве комментария: 1. "Вставки" в процедуры нижнего этажа состоят из стандартного набора строк, от процедуры к процедуре меняется только конкретный литерал - значение константы cnst_ThisSFP_Name 2. Вставка составлена так, что если мы у Static SFP поменяем тип с SFP_Type на SFP0_Type, то вставка превратится в "баластную", но весьма необременительную: эквивалентную просто трем "холостым" GoTo.
'############################ Project First_Floor ################ Public Const cnst_ThisProject_Name = "First_Floor" ... '================== Module myModule_bas ======================= Const cnst_ThisVBC_Name = "myModule_bas" ... Function mySin(x As Double) Const cnst_ThisSFP_Name = "Function mySin(x As Double)" SFP0: Static SFP As SFP_Type: On SFP.o.SFPEntry GoTo SFP1, SFP2, SFP3, SFPEnd: GoTo SFP3 SFP1: SFPInit cnst_ThisSFP_Name, cnst_ThisVBC_Name, cnst_ThisProject_Name, SFP.o: GoTo SFP0 SFP2: Stop SFP3: '------------------ body of function ------------------ mySin = Sin(x) '------------------------------------------------------ EndSF.. On SFP.o.SFPExit GoTo SFP1, SFP2, SFP3, SFPEnd, SFP0 SFPEnd: End Function ... '====================== EndOf Module ========================== ... '###################### EndOf Project ############################# '############################ Project Second_Floor ################ Public Const cnst_ThisProject_Name = "Second_Floor" ... '================== Module SFP_bas ============================ Const cnst_ThisVBC_Name = "SFP_bas" Type o0_Type: Entry As Byte: SFPExit As Byte: End Type Public Type SFP0_Type: o As o0_Type: End Type '----------------------------------------------------------- Pu.. Type SFP_Type: o As New SFP_cls: End Type Public Current_SFP As New SFP_cls Public SFPs_Collection As New Collection, SFPsCollection_Counter As Long ... '=================== EndOf Module ============================= ... '=================== Class SFP_cls ============================ Const cnst_ThisVBC_Name = "SFP_cls" Public Class_Name As String Public id_in_Collection As Long ... Public Function SFPEntry() As Byte Set Current_SFP = Me ... SFPEntry = ... If SFPEntry = 4 Then Set Current_SFP = Nothing SFPEnd: End Function
Public Function SFPExit() As Byte Set Current_SFP = Me ... SFPExit = ... If SFPExit = 4 Then Set Current_SFP = Nothing SFPEnd: End Function ... Private Sub Class_Initialize() Let Class_Name = cnst_ThisVBC_Name SFPsCollection_Counter = SFPsCollection_Counter + 1 id_in_Collection = SFPsCollection_Counter SFPs_Collection.Add Me, CStr(id_in_Collection) ... Debug.Print "Class_Initialize:" & cnst_ThisVBC_Name & " " & id_in_Collection EndSFP: End Sub
Private Sub Class_Terminate() SFPs_Collection.Remove ... |
|
Вернуться к началу |
|
|
|