Важная информация

User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 11

Тема: Объектно-ориентированные принципы на С

  1. #1
    Master
    Регистрация
    27.01.2005
    Сообщений
    905
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Объектно-ориентированные принципы на С

    Давно меня мучали вопросы - как реализовать ООП на С.
    И вот я, наконец, попробовал это сделать.

    Пока есть несколько "классов":

    окно (базовый класс, так как эта библиотека для интерфейса)
    меню (потомок окна)

    драйвер экрана (пока ZX обычный)
    драйвера клавиатуры (PS2 и ZX)

    Реализован событийный интерфейс. Стека окон пока что нет.

    Демо окошек-менюшек тут: https://github.com/salextpuru/sdcc-n...libui/testui.c
    Собственно, библиотека тут: https://github.com/salextpuru/sdcc-n...r/libsrc/libui

    Не пинайте ногами, что всё крайне медленно и неоптимально. Я проверял принципы. Хотя, для многих вещей это уже годится - утилиты разные и проч.

    Общие принципы:
    Один класс - один файл.
    Области видимости разграничены на private (с помощью static функций и переменных) и public.

    Думаю, перспектива есть. Было бы время
    Последний раз редактировалось SfS; 28.04.2018 в 12:36.

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Как шутят в народе, "У дураков мысли сходятся".

    Очень правильный подход к разработке, почему-то тут редко встречаемый. Делал похожее и тоже на С для CP/M когда экспериментировал с IDE/FAT:
    - экран VT52 с собственной текстовой буферизацией чтобы организовывать буфер окон без лазания в видео-ОЗУ или в какие-то расширенные свойства VT-52 (использую только базовые искейпы VT - вывод символа, основные очистки экрана/строк и позиционирование курсора) отчего программа нормально отображается даже в Hyperterm Windows если заломиться им с Винды в CPM Ориона по RS-232 (модуль screen.c)
    - псевдообъектное программирование на структурах и адресах процедур (типа методы), "наследование" - расширением родительской структуры новыми членами и обращение к методам через typecast.
    - "объекты" оконные (стек окон есть) и не оконные (типа TStrings), оконным можно рассылать сообщения (messages) а-ля как у Борланда в VCL было сделано и эти сообщения обрабатывать в тех "классах" (windows.h, controls.h), основной цикл оконного приложения выглядит прям как в VCL CBuilder
    Код:
    void ApplicationLoop()
    {
      short Msg;
      short Param;
      while (GetMessage(&Msg, &Param)) {
        SendMessage(ActiveWindow(), Msg, Param);    /* DispatchMessage(&Msg); */
      }
    }
    - сделал несколько оконных объектов (Окна модальные и немодальные, листбокc, кнопка) - минимум для двухпанельного коммандера, и сам коммандер - оболочку над популярной FatFS от ELM Chan - моего порта под CP/M (menu2.c, menu1.c). Очень понравилась получившаяся организация труда: вместо намолачивания функционала "по месту", заранее пишешь объекты со свойствами, а далее в командере назначаешь их связи, и любое изменение (например количество столбцов в панели=листбоксе - full/brief, или количество кнопок на форме) уже элементарно: присвоил свойству значение, вызвал Object.Update() и всё заверте....

    ЗЫ. Как там наш ESP-адаптер?
    Последний раз редактировалось Error404; 28.04.2018 в 13:18.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  4. #3
    Guru Аватар для Shiny
    Регистрация
    19.01.2017
    Адрес
    г. Арзамас
    Сообщений
    2,133
    Записей в дневнике
    38
    Спасибо Благодарностей отдано 
    1
    Спасибо Благодарностей получено 
    36
    Поблагодарили
    23 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    меня постоянно радуют подобные подходы. Например, исходник, написанный не пойми на чем, не скомпилируешь на доступных компиляторах.
    и Си полное дерьмо вообще.

  5. #4
    Master
    Регистрация
    27.01.2005
    Сообщений
    905
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Шынни Посмотреть сообщение
    меня постоянно радуют подобные подходы. Например, исходник, написанный не пойми на чем, не скомпилируешь на доступных компиляторах.
    и Си полное дерьмо вообще.
    В смысле "не пойми на чем"? На SDCC. Другого для спека нет.
    И там же есть pdf в каталоге doc. В котором немного описано что это и как рабоатет.

    С то с чего "дерьмо"?

    - - - Добавлено - - -

    Я просто сейчас реализую все мысли, что приходят в соответствии с наличием времени. По-другому никак пока что

  6. #5
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от SfS Посмотреть сообщение
    В смысле "не пойми на чем"? На SDCC. Другого для спека нет.
    Не только SDCC. Большинство CP/M C компиляторов умеют выставлять базу(адрес) не только на 100h, но и на другие адреса, для Спека будут более высокие. Например тот же используемый мной Hitech C (который кстати нативный ANSII C Z80 компилятор, т.е. для компиляции не нужен PC с 100500 Gb ОЗУ, достаточно Z80 с его 64к )

    Цитата Сообщение от Шынни Посмотреть сообщение
    Си полное дерьмо вообще.
    Я всегда больше любил Паскаль. Но как говорится - жизнь диктует, для С несравнимо больше проектов в исходниках, которые можно портировать на Z80, притом написанных не маргиналами, а людьми с порядком в голове. Да и компиляторов Паскаля для Z80 пока что нормальных нет (сравнимых по мощности с тем же Hitech C). Вот я взял FatFS (по фукционалу на порядок лучше всех известных мне вариантов FAT32 на Z80) и за два вечера запустил. А возьми какой-нить вариант для ассемблера (других то нет) от тутошних умельцев в неповторимом стиле "сто мнемоник в строке", и что называется усрись в итоге брось не сделав.
    Последний раз редактировалось Error404; 28.04.2018 в 14:11.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  7. #6
    Master
    Регистрация
    27.01.2005
    Сообщений
    905
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ESP пока никак. Железка лежит.
    Я с нового года в ауте. Только последнюю неделю время немного было - написал что получилось вот с окнами.

  8. #7
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    364
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Error404 Посмотреть сообщение
    Вот я взял FatFS (по фукционалу на порядок лучше всех известных мне вариантов FAT32 на Z80) и за два вечера запустил.
    и сколько она занимает места, и сколько требует для работы ?

  9. #8
    Master
    Регистрация
    27.01.2005
    Сообщений
    905
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А ты не мог бы свою переделку фатфс в исходниках выложить?

  10. #9
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от shurik-ua Посмотреть сообщение
    и сколько она занимает места, и сколько требует для работы ?
    В бинарнике сама FatFS (т.е. без учета stdio и интерфейса) в коде Z80 занимает что-то порядка 18 кб в максимальной RW версии если компилировать Hitech C (SDCC не пробовал). Максимальная - это с поддержкой даты и всех атрибутов файлов, дописыванием файлов, созданием всех объектов (каталогов/файлов), поддержкой партиций схемы MBR (т.е. совместимо с PC). Без длинных имен, я их не включал т.к. в CP/M куда я копирую поддерживаются только файлы с именами "8.3". На современных микроконтроллерах тот же код помещается в 4кб (если верить автору). Версия RO или без партиций будет занимать меньше. Главная причина большого размера кода - то что там 32-битная арифметика, которая на Z80 компактно не реализуема.

    Цитата Сообщение от SfS
    А ты не мог бы свою переделку фатфс в исходниках выложить?
    Поскольку делалось все это в 2008-2010г.г., то там FatFS версии 0.4 как базовая (2008г) с патчами от 0.5 и 0.6 (до 2010г.). А сейчас у автора вроде уже 0.99 есть, но я более поздние патчи не имплементировал (т.к. приходится разбираться и кое-что править в типах), т.к. исправления серьезных ошибок там вроде не было, но автора уже там понесло в юникоды, длинные имена, навороченный разбор строк он зачем-то включил, в-общем лишние на мой взгляд вещи.
    Все лежит тут в общей кучке и FatFS (модули FF.c, FFP.c) и те модули что я упоминал постом ранее где мои попытки на тему "псевдо-ООП":
    https://github.com/serge-404/AltairD...App/source/fat
    Последний раз редактировалось Error404; 28.04.2018 в 20:45.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  11. #10
    Master
    Регистрация
    27.01.2005
    Сообщений
    905
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    176
    Поблагодарили
    142 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Добавил свойства объектов (активный-неактивный и активируемый-неактивируемый).

    Получилось вполне себе неплохо. Тормозно только. Но я предполагаю сделать стек окон и вывод на теневой экран. Тогда должно быть без подмаргиваний.

    ТАПКА тут testui-basic-multimeenu.7z

    Исходник тут: https://github.com/salextpuru/sdcc-n...ui/multimenu.c
    Русский язык - в KOI8-R. Это если у кого в исходнике ероглифы видны.

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 7
    Последнее: 24.11.2013, 17:07
  2. Ответов: 180
    Последнее: 21.12.2008, 19:30

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •