Похоже на нормальное нарабатывание опыта. В крайности ООП вы уже были, осталась крайность функционального и скоро все придет в баланс. Концепции процедурного подхода важны для понимания сущности ООП - т.е. от чего и когда хотели избавиться создавая его. Ведь уже сейчас вам навороты страна-объект кажутся странными? Пишите что-нибудь как хочется и пересматривайте свои приемы, подходящий момент настал.
америкосы в магазин за 10м ездят на специальных машинках, а кто не, тот покупает себе стульчики с мотором и ездит на них. При этом едят если сало, то только безкалорийное, тк эпидемия ожирения. Почему ездят? Потому, что это круто! Да и как это можно - "не ездить"?
Из за таких концепций рождаются глючища типа 1С . Проще да, char address написать, чем создавать модель.
osrootd Ну так я же говорю, если нужен доступ отдельно к составляющим адреса, то нужна структура... А если адрес это просто какая-то "атомарная" характеристика чего-то - то строка...
osrootd Еще раз, мы обсуждаем ентерпрайз приложение? статические методы ведут к статическим данным, а статические данные не только для чтения требуют синхронизации, а синхронизации нужно избегать всеми способами
ой, ну и все как обычно про опенжл вспомнили! Код (Text): #pragma pack(1) struct Entity{ int Index; // [i]ndex byte Type; // shape byte ef; // effect bool mat; // sunblicks on/off bool globed;// is camera vovement-independent Entity*Dependant; byte collision; DWORD reserved; GLdouble R; // -color GLdouble G; // -| GLdouble B; // -' GLdouble A; // -alpha GLdouble PosX; // -basic position GLdouble PosY; // -¦ GLdouble PosZ; // -' GLdouble RotX; // -rotation GLdouble RotY; // -¦ GLdouble RotZ; // -' GLdouble ScalX; // -scale GLdouble ScalY; // -¦ GLdouble ScalZ; // -' GLdouble pPosX; // -collisions backups GLdouble pPosY; // -¦ GLdouble pPosZ; // -' };//Entity; ... void Scale(pobj H,GLdouble x,GLdouble y,GLdouble z){ H->ScalX=x; H->ScalY=y; H->ScalZ=z; } void ScaleP(pobj H,GLdouble x,GLdouble y,GLdouble z){ H->ScalX+=x; H->ScalY+=y; H->ScalZ+=z; } void SetPos(pobj H,GLdouble x,GLdouble y,GLdouble z){ H->PosX=x; H->PosY=y; H->PosZ=z; } void MoveOLD(pobj H,GLdouble x,GLdouble y,GLdouble z){ H->PosX+=x; H->PosY+=y; H->PosZ+=z; } void Move(pobj H,GLdouble x,GLdouble y,GLdouble z){ ///X H->PosX-= x *dcos(H->RotY); H->PosX-= z *dsin(H->RotY); ///Y H->PosY+= y *dcos(H->RotX); H->PosY+= z *dsin(-H->RotX); ///Z H->PosZ+= x *dsin(H->RotY); H->PosZ-= z *dsin(H->RotY+90); } ... pobj PutEnt(byte tp=0,Entity* rel=0){ if(ocnt==mxsz) return ojs[ocnt-1]; if(!ojs[ocnt]){ ojs[ocnt]=(pobj)GlobalAlloc(GMEM_ZEROINIT,sizeof(Entity)); DBG("Allocated %03d:%p",ocnt,ojs[ocnt]); }else ZeroMemory(ojs[ocnt],sizeof(Entity)); // DBG("put %x %d",(int)ojs[ocnt]%1024,GetLastError()); ojs[ocnt]->Type=!tp?_tCUBE:tp; ojs[ocnt]->Index=ocnt; ojs[ocnt]->ScalX=1.0; ojs[ocnt]->ScalY=1.0; ojs[ocnt]->ScalZ=1.0; if(rel){ ojs[ocnt]->PosX=rel->PosX; ojs[ocnt]->PosY=rel->PosY; ojs[ocnt]->PosZ=rel->PosZ; ojs[ocnt]->RotX=rel->RotX; ojs[ocnt]->RotY=rel->RotY; ojs[ocnt]->RotZ=rel->RotZ; } ocnt++; if(ocnt>mxsz){ ocnt=0; MessageBeep(MB_ICONASTERISK); } return ojs[ocnt-1]; // inc count after ret } pobj glFree(pobj H){ int indx=H->Index; DBG("del %03d:%p",indx,ojs[indx]); GlobalFree(ojs[indx]); // ZeroMemory(ojs[indx],sizeof(Entity)); pobj t=ojs[indx];/// 1 ojs[indx]=ojs[--ocnt];/// 2 if(ojs[indx])ojs[indx]->Index=indx; // ojs[ocnt]=t; /// 3 for(int i=0;i<ocnt;i++){ if(ojs[i]->Dependant==t){ DBG(" found depended %03d:%p from current %x, deleting..",i,ojs[i],(int)H%0x1000); glFree(ojs[i]); } } ZeroMemory(t,sizeof(Entity)); return 0; }... вот такой вот опенжл без ооп, и всё прекрасно создаётся/обрабатывается/рисуется и работает без лишних тормозов, и килограммов лишнего жира в бинаре.
Да Видать я не так сформулировал: Код (Text): Class Country { static Country getNew ( [Список параметров извлечения страны] ){ Country TemporaryCountryBuild = new Country(); *** код инициализации ** return TemporaryCountryBuild; } } Так яснее?
osrootd fasm, masm32 ) покодь в своё удовольствие - отдохни душевно ) если работа мешает - возьми творческий отпуск новые силы которые ты в нём обретёшь выведут тебя на новый уровень понимания и окупят издержки scf считаешь лучше когда этот идентификатор неявно подставляется компилятором? а по моему лучше всегда знать что же происходит на самом деле, даже если прячешь что-то из-за удобства в ООП. вовсе не обязательно всё зависит от реализации, особенно когда "статические методы" это просто функции ) а вот мысли: загромождают мозг и мешают медитации над кодом
osrootd это называется "фабрика": Код (Text): public Class Country{ public static final class Factory{ public static Country newInstance( [Список параметров извлечения страны]){ return new Country( [Список параметров извлечения страны]); } } }
varnie Это строго по паттерну. Иногда бывает неуместно. Делать фабрику стран - онанизм тот еще. У тебя получится Country.Factory.newInstance(mixed params); Можно страну по ссылке передавать конструктору адресов ( у меня так по крайней мере реализовано ) Address.Country.getCountry ( mixed[] ), причем getCountry перегруженный метод. Была как-то реализация в виде дерева. Класс AddressTreeModel implements CorporateObjectTreeModel - позаимствовал из TreeModel нативного.. Ты не в теме чуть-чуть. У нас энтерпрайз кодинг. Там такого нету Либо Persistense работает на подстановку (если применяется), либо - сам кодер.
А что есть такие заказчики,для которых важно ооп или структурное программирование?Мне казалось заказчику до лампочки, как написано лиж бы работало по заказу.
Y_Mur Мне врача прислали. Щас проект на ооп закончу и... В общем, девайс принесли для контроля термальной радиации. К нему драйвер нужен. Он от USB работает. Есть документация, даже с примером драйвера, так что скоро пойду лечиться.
scf ООП надо понимать как простоту разработки. Она невсегда нужна. Главное знать где кончается одно и начинается другое.
K10 Можно пример модифицируемых данных, не требующих синхонизации? Кроме конечно классов, которые синхронизируюся сами "изнутри" Ты не прав. Заказчику нужно, чтобы эту систему можно было дорабатывать когда ты свалишь. osrootd Статические методы - почти всегда плохой подход. 1. многопоточность - см. выше 2. если сейчас этот метод не ссылается на внешние ресурсы, значит будет ссылаться потом и тебе придется убирать static и перефигачивать код в месте использования. Pavia +1 Главное - видеть золотую середину. Что приходит только с опытом.
scf Могу, конечно, ошибаться, но например DWORD? Запись/чтение производятся атомарно. DWORD'ом может быть и указатель на какую-то структуру, в этом случае вся структура подменяется атомарно...