Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2009, 22:32   #31
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от atomicxp Посмотреть сообщение
Здесь как бы разные варианты есть. Можно считать стандартной библиотекой STL, а можно Qt SDK, или вообще, что-либо другое. Суть не в них, а в собственных понятиях. Если рассматривать файл как набор байт с доступом по индексу, то он таким и будет. Если надо разложить его на биты, то это уже будет битовый файл. Можно получать доступ по итератору, но итератор это не последовательность, а проход по чему-либо что можно так представить.

А может я хочу рассматривать файл как набор символов в кодировке юникода по два байта на один символ или ещё как. Важно не то, как сделать ту или иную операцию на конкретной библиотеке, важно сформировать абстракции позволяющие делать весь спектр операций с минимальной сложностью.
Хочу то, пока не знаю что?
Вообще файл по своему определению не должен знать что он хранит. Это тупое хранилище и всё. Посмотрите на различные реализации сериализации и шаблон DataMapper
pu4koff вне форума Ответить с цитированием
Старый 09.05.2009, 23:30   #32
atomicxp
Форумчанин
 
Аватар для atomicxp
 
Регистрация: 01.05.2009
Сообщений: 110
Радость

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Хочу то, пока не знаю что?
Именно, если бы я точно знал, какие абстракции мне нужны, то за программированием дело бы не встало. Потому и нахожусь в поиске совершенных абстракций.

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Вообще файл по своему определению не должен знать что он хранит. Это тупое хранилище и всё. Посмотрите на различные реализации сериализации и шаблон DataMapper
Посмотрел, смешение insert, delete и update. Insert и delete для меня это addition и subtraction, так же operator+ и operаtor-. В данном случае прослеживается нарушение абстракции, так как обновление завязано на тип элемента. Если у тебя ещё есть примеры приводи не стесняйся. Свои я скорее всего выведу просто видоизменив до нужной мне степени чужие.
atomicxp вне форума Ответить с цитированием
Старый 09.05.2009, 23:44   #33
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Вообще основная суть DataMapper'a не в insert, update и т.п.
С одной стороны от преобрабзователя лежат данные, которыми оперирует приложение (классы, записи,...), а по вторую сторону - хранилище данных (файл, база данных,...). Этот самый DataMapper просто преобразует данные из вида, в котором они хранятся, в вид, в котором они обрабатываются и наоборот. Так что все эти insert'ы и update'ы легко выносятся в свою "абстракцию"
pu4koff вне форума Ответить с цитированием
Старый 09.05.2009, 23:49   #34
atomicxp
Форумчанин
 
Аватар для atomicxp
 
Регистрация: 01.05.2009
Сообщений: 110
По умолчанию

Цитата:
Сообщение от pu4koff Посмотреть сообщение
Этот самый DataMapper просто преобразует данные из вида, в котором они хранятся, в вид, в котором они обрабатываются и наоборот. Так что все эти insert'ы и update'ы легко выносятся в свою "абстракцию"
Ну не знаю, я встречался с DataAdapter'ом в .NET. Ещё со строгой типизацией. В других система навроде Qt используют MVC. Вот конкретно этот датамапер я не хочу никуда выносить, от таких абстракций у меня всегда возникало больше проблем, чем пользы.
atomicxp вне форума Ответить с цитированием
Старый 13.05.2009, 00:20   #35
mustaf0id
 
Регистрация: 05.05.2009
Сообщений: 9
Стрелка

По способу доступа к данным файл можно рассматривать как блок с произвольным доступом (напр. Memory mapped file) или поток данных (те же stream-ы в STL), кстати и сокеты тоже рассматриваются обычно как поток данных.

Цитата:
Вопрос папки они или директории очень важен, так как директории по смыслу являются направляющими и представляют весь путь к директории или файлу, а вот папка она как сущность хранящая что-то внутри себя.
Можно просто считать файловую систему деревом с файлами в листьях.
mustaf0id вне форума Ответить с цитированием
Старый 13.05.2009, 00:41   #36
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Цитата:
кстати и сокеты тоже рассматриваются обычно как поток данных
Эммм откуда ж такие сведения?

Если и считать потоками данных(и то, грубо говоря), то только сокеты, которые поддерживают соединение (TCP/SOCK_STREAM), но уж никак не датаграмные, или никсовые.
MaTBeu вне форума Ответить с цитированием
Старый 13.05.2009, 03:32   #37
atomicxp
Форумчанин
 
Аватар для atomicxp
 
Регистрация: 01.05.2009
Сообщений: 110
Лампочка

Как бы понятно, что есть потоки данных, средство которое объединяет в себе работу с файлами, памятью, сетью и так далее. Есть и другие потоки, которые не вышеупомянутые потоки, а нити процессов. Для примера код из вики плюс откомпилированная версия для Windows.

Код:
#include <boost/thread/thread.hpp>
#include <iostream>

using namespace std;

void hello_world()
{
    for(int i = 0; i < 1000; i++)
    {
        cout << "Hello world!!! ";
    }
}

void hello_galaxy()
{
    for(int i = 0; i < 1000; i++)
    {
        cout << "Hello galaxy!!! ";
    }
}

int main(int argc, char* argv[])
{
  // запустить новый поток, вызывающий функцию "hello_world"
  boost::thread my_thread1(&hello_world);
  // запустить новый поток, вызывающий функцию "hello_galaxy"
  boost::thread my_thread2(&hello_galaxy);
  // ждем завершения потоков
  my_thread1.join();
  my_thread2.join();

  return 0;
}
По сути использование любой технологии, хоть потоки данных, хоть нити процессов, да и всё что угодно на низком уровне сложности не представляют никаких проблем. А что если надо взять данные, но не в прямом порядке, а в обратном, или брать их в несколько потоков с взаимоисключением для передачи по разным соединениям чем-то с чем-то.

Задач может быть много, хорошая абстракция позволила бы написать лаконичный код. Но самое главное изменила бы мышление программиста до уровня, который при стиле в приведённом мною примере просто недоступен.
atomicxp вне форума Ответить с цитированием
Старый 13.05.2009, 14:20   #38
mustaf0id
 
Регистрация: 05.05.2009
Сообщений: 9
По умолчанию

Цитата:
Сообщение от MaTBeu Посмотреть сообщение
Эммм откуда ж такие сведения?

Если и считать потоками данных(и то, грубо говоря), то только сокеты, которые поддерживают соединение (TCP/SOCK_STREAM), но уж никак не датаграмные, или никсовые.
Согласен, именно сокеты SOCK_STREAM я и имел в виду

Цитата:
А что если надо взять данные, но не в прямом порядке, а в обратном, или брать их в несколько потоков с взаимоисключением для передачи по разным соединениям чем-то с чем-то.
Фактически это будут разные видов data-mapper-ов, или нет?
mustaf0id вне форума Ответить с цитированием
Старый 13.05.2009, 19:01   #39
atomicxp
Форумчанин
 
Аватар для atomicxp
 
Регистрация: 01.05.2009
Сообщений: 110
Радость

Цитата:
Сообщение от mustaf0id Посмотреть сообщение
Фактически это будут разные видов data-mapper-ов, или нет?
Смысла нет так делать. Я думаю надо создавать полиморфные интерфейсы, одним из которых может стать поток данных. Впрочем если у кого-то есть идеи лучше выкладывайте.
atomicxp вне форума Ответить с цитированием
Старый 10.06.2009, 10:06   #40
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

Кстати, раз речь идет об ООП языках, какой язык был первым использовавшим ОО парадигму? По моему это SmallTalk. И как обычно бывает - первый язык, пионер так сказать, содержал идеи которые нашли применение гараздо позже. Другой такой пример - Lisp, вот где целый "сундук" "совершенных абстракций", которые пока очень меедленно входят в современное программирование.

Вот в обычных императивных языках бывают ПРОСТО ЧИСЛА, или ПРОСТО СЛОЖЕНИЕ, т.е. не объекты и методы, а просто представления машинных структур, ячеек памяти, и команд процессора - ближе к ассамблеру скорее, зато эфективно.

В SmallTalk вовсе нет ничего ПРОСТО, число - это экземпляр класса, у класса объявлены методы арифметики, присваивания, булевы методы и т.д., поэтому число наследует эти методы и для него определены соответствующие операции.

Вот и в Ruby например, по примеру SmallTalk такие опарации, как + - * / - это просто методы числовых классов. Т.е. код

Код:
x = a + b + c  (*)
Это на самом деле соглашение для упрощения записи

Код:
x.= a.+ b.+ c
или, ещё точнее:

Код:
x.=(a.+(b.+(c)))
Если заменить привычные знаки на имена функций, то имеем:

Код:
x.setq(a.add(b.add(c)))
То что эта композиция функций может быть сведена к (*) без потери информации - это связано с тем что композиция полностью каррирована, т.е. все функции от одного аргумента, и что операция сложения ассоциативна.

Если код

Код:
x = a + b + c
интерпретируется как

Код:
x.setq(a.add(b.add(c)))
это значит имеет место левое связывание методов с объектами, но ни что не мешает написать например, ближе к функциональному стилю:

Код:
(x, y).setq(a.add(b.add(c)), m.add(f, g))
что эквивалентно

Код:
x, y = a + b + c, m + (f + g)
Тут скобки уже не арифметические а функциональные.

В лиспе наоборот методы связываются с объектами направо:

Код:
(= x (+ a (+ b (c)))
Если определить в С связывание направо, то ничего не мешает писать "как на лиспе":

Код:
=.x(+.a(+.b(c)))
И наоборот префиксное выражение в лиспе может быть записано в инфиксной форме

Код:
(x.= (a.+ (b.+ (c)))) ;;; x = a + b + c
Соль этих маленьких примеров в следующем. ООП и ФунП - это Не противоположности. Антоганисты это скорее императивные и декларативные парадигмы, процедурный и функциональный стиль. А ООП это как раз мост между ними, эти два стиля переходят в друг друга просто при замене левого связывания на правое и наоборот.

НО запись в процедурном стиле, если её расписать в граф. нотации - это просто линия, т.е. вырожденное дерево. А вот фун. запись это именно дерево. Примечательно что языки которые сейчас появляются (это и D и Nemerle и Scala) стремятся использовать и функциональное программирование, и ООП. кажется что единственной целью может быть только удобство программирования.

Последний раз редактировалось BaronTreep; 10.06.2009 в 10:12.
BaronTreep вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в поисках органайзера crazy horse Софт 6 11.02.2008 16:56
Нахождение совершенных чисел. Паскаль NikLik Помощь студентам 3 23.11.2007 22:19