Вход на сайт
Хочу научится
NEW 29.07.09 20:41
в ответ knaz75 04.07.09 01:12
У каждого свой подход.. Есть те кто начинает с Delphi (или Pasсal), но я-бы не стал.. он действительно "другой" какой-то. Да и не так прост, как на первый взгляд кажется. Язык клёвый, надо отметить... жаль, что отмирает потихоньку.
Как-бы поступил я сейчас на Вашем месте.
Сгрузил-бы Eclipse или NetBeans для начала.
Придумал-бы себе прикладную задачку... типа "Калькулятор" или "Блокнот" или "Простой текстовый редактор" для начала.
Набрал-бы в google "Java ist auch eine Insel" сгрузил-бы PDF по Java. Например тут: http://winfuture.de/downloadvorschalt%2C2062.html
Книжка эта очень доступная для понимания. С нуля, так сказать. От элементарных вещей, до достаточно продвинутых. Про концепции в Обьекто-ориентированном Программировании типа MVC (Modell-View-Controller) тоже там есть. Там всё понятно даже для самых-пресамых блондинок (я ни на кого не намекаю).
Потом неторопясь, опираясь на этот PDF и прочие сайты по Java стал-бы медленно програмировать скажем этот калькулятор, вникая в основы языка. Рано или поздно, начнёшь разбираться что куда. Во всех этих странных, на первый взгляд "заморочках".
Потом задачку усложнил-бы и сделал-бы сам для себя что-то более прикладное и действительно нужное, но не сложное. И так шаг за шагом, день за днём. Однажды поймаешь себя на мысли, что начало получаться и даже без подсмотра в книжку :-)
Как-бы поступил я сейчас на Вашем месте.
Сгрузил-бы Eclipse или NetBeans для начала.
Придумал-бы себе прикладную задачку... типа "Калькулятор" или "Блокнот" или "Простой текстовый редактор" для начала.
Набрал-бы в google "Java ist auch eine Insel" сгрузил-бы PDF по Java. Например тут: http://winfuture.de/downloadvorschalt%2C2062.html
Книжка эта очень доступная для понимания. С нуля, так сказать. От элементарных вещей, до достаточно продвинутых. Про концепции в Обьекто-ориентированном Программировании типа MVC (Modell-View-Controller) тоже там есть. Там всё понятно даже для самых-пресамых блондинок (я ни на кого не намекаю).
Потом неторопясь, опираясь на этот PDF и прочие сайты по Java стал-бы медленно програмировать скажем этот калькулятор, вникая в основы языка. Рано или поздно, начнёшь разбираться что куда. Во всех этих странных, на первый взгляд "заморочках".
Потом задачку усложнил-бы и сделал-бы сам для себя что-то более прикладное и действительно нужное, но не сложное. И так шаг за шагом, день за днём. Однажды поймаешь себя на мысли, что начало получаться и даже без подсмотра в книжку :-)
NEW 13.08.09 22:48

В ответ на:
не НАДО начинать с С++! это язык для людей, которые уже умеют программировать!
я начинал с ассемблера К580. Сам паял компьютер "Специалист". Потом на Синклере Z80 игрушку написал, не детскую, а солидную, с музыкой в АИгрике. Потом язык С. Учил по Ритчи и Керригану. Потом и по сей день уже лет 10 как - С++. Он мне больше всего нравится. С# знаю слегка, но раздражают деструкторы которые вызваются когда захотят.не НАДО начинать с С++! это язык для людей, которые уже умеют программировать!

Проклят нарушающий межи ближнего своего (Втор.27:17)
NEW 14.08.09 10:54
в ответ anly 13.08.09 22:48
ну дык, я тоже начинал с пайки специалиста и спектрума. но разговор был про то, что для изучения программирования на существующей аппаратной базе, С++ особо не нужен, поскольку он требует знания низкоуровневых деталей, которые в вашем случае были получены из ассемблера и С. Для изучения программирования какой-нибудь Squeak лучше подходит, поскольку учит программировать в терминах предметной области, а не компьютерных внутренностей
NEW 14.08.09 17:27
всё таки в С++ удобней: точно знаешь когда деструктор вызовется. Я на это часто полагаюсь. При этом не надо никакого дополнительного кода писать вокруг использования объекта.
Почему от этого отказались? Только для быстродействия что-ли? Типа не тратить время сейчас на то, что можно сделать потом.
в ответ Murr 14.08.09 01:02
В ответ на:
Они вызываются нормально - когда есть возможность их выполнить. А в большинстве случаев достаточно GC...
Для остального есть IDisposable...
Они вызываются нормально - когда есть возможность их выполнить. А в большинстве случаев достаточно GC...
Для остального есть IDisposable...
всё таки в С++ удобней: точно знаешь когда деструктор вызовется. Я на это часто полагаюсь. При этом не надо никакого дополнительного кода писать вокруг использования объекта.
Почему от этого отказались? Только для быстродействия что-ли? Типа не тратить время сейчас на то, что можно сделать потом.
Проклят нарушающий межи ближнего своего (Втор.27:17)
NEW 14.08.09 18:18
в ответ anly 14.08.09 17:27
всё таки в С++ удобней
-----
Да ну? Ну давай, раскажи как можно, имея только простой указатель на объект,
определить, можно ли вызывать его деструктор...
При этом не надо никакого дополнительного кода
-----
Какой избыточный код требуется в C#? Даже delete не нужен... выйдет из области
существования и будет удален, когда это возможно.
Типа не тратить время сейчас на то, что можно сделать потом.
------
Быстродействие тут не причем. Причем - трудозатраты на написание и обслуживание
кода, манипулирующего объектами... он не всегда элементарный...
-----
Да ну? Ну давай, раскажи как можно, имея только простой указатель на объект,
определить, можно ли вызывать его деструктор...
При этом не надо никакого дополнительного кода
-----
Какой избыточный код требуется в C#? Даже delete не нужен... выйдет из области
существования и будет удален, когда это возможно.
Типа не тратить время сейчас на то, что можно сделать потом.
------
Быстродействие тут не причем. Причем - трудозатраты на написание и обслуживание
кода, манипулирующего объектами... он не всегда элементарный...
NEW 14.08.09 22:09
в ответ Chipolino 14.08.09 21:34
std::has_virtual_destructor<typeof(*ptr)>::value => true/false
-----
А прочитать внимательно? - Там же указано - простой ( plain, dumb ) указатель.
Все остальное - RTL - позволит\непозволит... это же не Паскаль с гарантированным
TObject в базе и виртуальными конструкторами и деструкторами...
А что будет с остальными указателями и ссылками на объект? Автоматом обнулятся?
Или как обычно - повторное освобождение и последующее AV?
-----
А прочитать внимательно? - Там же указано - простой ( plain, dumb ) указатель.
Все остальное - RTL - позволит\непозволит... это же не Паскаль с гарантированным
TObject в базе и виртуальными конструкторами и деструкторами...
А что будет с остальными указателями и ссылками на объект? Автоматом обнулятся?
Или как обычно - повторное освобождение и последующее AV?
NEW 14.08.09 23:50
в ответ Chipolino 14.08.09 23:25
Конечно шарп как язык намного приятнее плюсов ,
-----
Понятно, что не твой пост, но автор поста утверждает, что в Плюсах удобнее.
Для меня - удобнее Шарп. Можно продолжать холивор...
но реализации г. IMHO ;-)
-----
тююю... еще и реализации обсуждать... Я тут днями чуть голову не сломал на ограничителях
типов в шарповых шаблонах... до сих пор не до конца понимаю смысл new()... так что нафиг
все реализации, кроме используемой...
-----
Понятно, что не твой пост, но автор поста утверждает, что в Плюсах удобнее.
Для меня - удобнее Шарп. Можно продолжать холивор...
но реализации г. IMHO ;-)
-----
тююю... еще и реализации обсуждать... Я тут днями чуть голову не сломал на ограничителях
типов в шарповых шаблонах... до сих пор не до конца понимаю смысл new()... так что нафиг
все реализации, кроме используемой...

NEW 14.08.09 23:56
в ответ scorpi_ 14.08.09 23:42
NEW 15.08.09 00:48
пардон, я С# уже давно не трогал, потому даже ключевых слов не помню. Я помню что есть некая возможность определить область при выходе из которой будет вызвана какаято стандартная функция объекта, типа так:
Try
{
Объект а = new Объект
....
}
catch
{
// вот здесь эта функция и будет вызвана
}
Что то вроде, только конечно не try и catch, но я не помню какие ключслова. Вот описание этих блоков типа try и catch - и есть дополнительный труд.
В С++ десктуктор вызовется как только delete вызовешь. Но это мелочь, не слишком важно для меня. Меня больше волнуют объекты созданные в стеке без new.
в с++ их деструктор вызовется при выходе из области видимости.
{
A a;
...
...
// здесь будет вызван a.~a(), т.е. деструктор объекта a, даже если в "..." произошло исключение.
}
Такая фишка нужна не только для освобождения рессурсов (памяти, файлов и т.п.). Смысл - сделать чтото при выходе из области видимости. Вот простенькие классы чтобы не забыть записать переменную или булевкий флажок:
template< class T > class CSetRestore
{
T* m_p;
T m_v;
public:
CSetRestore( T* p, T v ){ m_p = p, m_v = *m_p, *m_p = v; }
~CSetRestore(){ *m_p = m_v; }
};
template< class T, T on, T off > class COnOff
{
T* m_p;
public:
COnOff( T* p ){ m_p = p, *m_p = on; }
~COnOff(){ *m_p = off; }
};
typedef COnOff<bool, true, false> COnOff_bool;
typedef COnOff<bool, false, true> COffOn_bool;
в ответ Murr 14.08.09 18:18
В ответ на:
всё таки в С++ удобней
-----
Да ну? Ну давай, раскажи как можно, имея только простой указатель на объект,
определить, можно ли вызывать его деструктор...
При этом не надо никакого дополнительного кода
-----
Какой избыточный код требуется в C#? Даже delete не нужен... выйдет из области
существования и будет удален, когда это возможно.
всё таки в С++ удобней
-----
Да ну? Ну давай, раскажи как можно, имея только простой указатель на объект,
определить, можно ли вызывать его деструктор...
При этом не надо никакого дополнительного кода
-----
Какой избыточный код требуется в C#? Даже delete не нужен... выйдет из области
существования и будет удален, когда это возможно.
пардон, я С# уже давно не трогал, потому даже ключевых слов не помню. Я помню что есть некая возможность определить область при выходе из которой будет вызвана какаято стандартная функция объекта, типа так:
Try
{
Объект а = new Объект
....
}
catch
{
// вот здесь эта функция и будет вызвана
}
Что то вроде, только конечно не try и catch, но я не помню какие ключслова. Вот описание этих блоков типа try и catch - и есть дополнительный труд.
В С++ десктуктор вызовется как только delete вызовешь. Но это мелочь, не слишком важно для меня. Меня больше волнуют объекты созданные в стеке без new.
в с++ их деструктор вызовется при выходе из области видимости.
{
A a;
...
...
// здесь будет вызван a.~a(), т.е. деструктор объекта a, даже если в "..." произошло исключение.
}
Такая фишка нужна не только для освобождения рессурсов (памяти, файлов и т.п.). Смысл - сделать чтото при выходе из области видимости. Вот простенькие классы чтобы не забыть записать переменную или булевкий флажок:
template< class T > class CSetRestore
{
T* m_p;
T m_v;
public:
CSetRestore( T* p, T v ){ m_p = p, m_v = *m_p, *m_p = v; }
~CSetRestore(){ *m_p = m_v; }
};
template< class T, T on, T off > class COnOff
{
T* m_p;
public:
COnOff( T* p ){ m_p = p, *m_p = on; }
~COnOff(){ *m_p = off; }
};
typedef COnOff<bool, true, false> COnOff_bool;
typedef COnOff<bool, false, true> COffOn_bool;
Проклят нарушающий межи ближнего своего (Втор.27:17)