Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];

Вниз

смогу ли я быть программистом   Найти похожие ветки 

 
@!!ex ©   (2007-10-26 00:52) [120]

> [119] oxffff ©   (26.10.07 00:40)
> Тогда поясни почему при передачи var параметра его тип должен
> точно соответствовать типу параметру метода.

Не должен. Вы это откуда взяли?


 
DevilDevil ©   (2007-10-26 08:18) [121]

такс...

> Валентин   (25.10.07 14:19) [0]
станешь ты программистом или нет - зависит только от тебя.
предупреждаю заранее: нет предела совершенству, втянешься - будешь прогить круглосуточно )

по поводу непонимания указателей

указатели даются сложно потому, что не понятно, зачем вообще они нужны. Непонятно так же, зачем вообще нужны динамические переменные.

Указатели нужны для работы с памятью. А у типичного кнопкошлёпа или просто начинающего, нет абсолютно никакой потребности работы с памятью. Лично мне стала понятна суть, когда попробовал ScanLines[ ].

> @!!ex ©   (25.10.07 17:48) [32]
Разработчики Pascal/Delphi - молодцы. Если в Си++ ты используешь -> для обращения к данным по указателю (Form1->Caption), точку для обрашения к структуре (Rect.Left = 5), четыре точки для определения пространства имён ( Graphics::TBitmap* B = NULL ) или при реализации класса ( void __fastcall TMainForm::FormCreate(TObject *Sender) ), то в Delphi ВО ВСЕХ этих случаёх обходишься ТОЧКОЙ !

Если придерживаться указательной логики, то ты должен обращаться Bitmap^.Canvas^.MoveTo(...);

ИМХО про обращение к данным без "крышечки" они правы. Код с многообразием таких "крышечек" смотрится поуродски как то.

Ссылки...
В Delphi они реализованы более изящно: через var, out и const для неперечисляемых типов.

Проще на примере:

procedure SomeProcWithVar(var R : TRect);
begin
  if @R = nil then ShowMessage("Fuck off!");
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SomeProcWithVar( TRect(nil^) );
end;


Благодарю за внимание.


 
oxffff ©   (2007-10-26 08:34) [122]


> @!!ex ©   (26.10.07 00:52) [120]
> > [119] oxffff ©   (26.10.07 00:40)
> > Тогда поясни почему при передачи var параметра его тип
> должен
> > точно соответствовать типу параметру метода.
>
> Не должен. Вы это откуда взяли?


Тогда читай help.
И теорию типов заодно. :)


 
KSergey ©   (2007-10-26 09:27) [123]

> DevilDevil ©   (26.10.07 08:18) [121]
>   SomeProcWithVar( TRect(nil^) );

Да вы извращенец, товарисч! Такого я еще не встречал :)


 
KSergey ©   (2007-10-26 09:53) [124]

> @!!ex ©   (25.10.07 22:05) [78]
> Нипанятна каким образом у адреса(читай числа) появляются
> какие то методы, поля и свйоства.
> Объясните мне, откуда они берутся?

Тут все очень просто, думаю.
Да, формально правильно надо бы писать p^.field, однако я не знаю ни одного примера, когда конструкция p.field могла бы быть интерпретирована как-то иначе, чем p^.field. Отсюда и введеное в синтаксис сокращение, а вовсе не "наделение указателя свойствами". (Говорится, что в [20] приведен какой-то пример, но мне сейчас лень это словоблудие читать, сорри.)


 
Игорь Шевченко ©   (2007-10-26 10:09) [125]

Таких не берут в программисты


 
DevilDevil ©   (2007-10-26 10:28) [126]

> KSergey ©   (26.10.07 09:27) [123]
> Да вы извращенец, товарисч! Такого я еще не встречал :)

SomeProcWithVar( PRect(nil)^ );


 
KSergey ©   (2007-10-26 10:29) [127]

> Игорь Шевченко ©   (26.10.07 10:09) [125]
> Таких не берут в программисты

Сказал - как отрезал! :)


 
@!!ex ©   (2007-10-26 10:52) [128]

> [122] oxffff ©   (26.10.07 08:34)

Да что вы ерунду говорите.
Где тут строгое соответствие:
type
 TVR = record
   X:byte;
   Y:byte;
   Z:byte;
   W:byte;
 end;

 TVA = array[0..1] of word;

Procedure Check(var v:TVA);
begin
end;

var
 a:TVR;
begin
 Check(TVA(a));


 
boriskb ©   (2007-10-26 10:57) [129]


> смогу ли я быть программистом


А "программист" это кто?
Кто программирует?
Так ты уже он.


 
isasa ©   (2007-10-26 11:14) [130]

@!!ex ©   (26.10.07 10:52) [128]

:)

TVR = packed record

забыл, а то можно нарваться ...


 
oxffff ©   (2007-10-26 11:17) [131]


> @!!ex ©   (26.10.07 10:52) [128]
> > [122] oxffff ©   (26.10.07 08:34)
>
> Да что вы ерунду говорите.
> Где тут строгое соответствие:
> type
>  TVR = record
>    X:byte;
>    Y:byte;
>    Z:byte;
>    W:byte;
>  end;
>
>  TVA = array[0..1] of word;
>
> Procedure Check(var v:TVA);
> begin
> end;
>

Ты не понял. Попробуй без явного приведения.
Объясни почему нельзя передавать в качестве var параметра совместимые типы, например передать потомка в метод, сигнатура которого включает прием только базового типа с точки зрения теории типов.
То есть с доказательством. :)

> var
>  a:TVR;
> begin
>  Check(TVA(a));


 
Игорь Шевченко ©   (2007-10-26 11:28) [132]

"В последнее время наметилась одна тенденция. Дело в том, что сейчас для того, чтобы выйти на рынок программных средств и занять в нём свою нишу, фирма, а, соответственно, и программисты должны делать продукт как можно быстрее. При этом, естественно, достаточно часто вопросы эффективности, быстродействия, минимизации размера используемой памяти и тому подобные во внимание просто не принимаются. Зачем, дескать, думать о таких «мелочах», если современные компьютеры достаточно мощные и «переваривают» почти любые объёмы. Подумаешь, мегабайт памяти туда, мегабайт сюда… Кроме того, очень сильное влияние на квалификацию программистов оказывают многочисленные средства быстрой разработки, бурное развитие которых наблюдается в последнее время. Средства, предназначенные для повышения производительности труда квалифицированных программистов, заняли на рынке совершенно другое место. Достаточно часто эти средства используются программистами низкой квалификации для того, чтобы в кратчайшее время создать работающую программу, прикладывая при этом минимум усилий. Более того, средства быстрой разработки позволяют программисту скрыть недостаток квалификации, ибо вся черновая работа делается без участия программиста. Вместо того, чтобы овладеть необходимым для профессиональной деятельности минимумом, можно недостаток квалификации скрыть посредством использования программы, которая всё сделает сама. Таким образом, средства быстрой разработки используются превратились в средства создания неэффективных программ неквалифицированными программистами. Что поделаешь, рынок диктует свои условия…

Соответственно, такой подход приводит к тому, что достаточно часто у программистов появляется завышенная самооценка. Раз я могу «накропать» программу за неделю, значит, я – ВЕЛИКИЙ ПРОГРАММИСТ, всё умею, всё могу. Зачем мне чему-то учиться, я (при помощи конкретного средства) всегда сделаю то, что хочу! Появилось даже расхожее определение – «программист, пишущий мышкой»… Но стоит у подобных, с позволения сказать, программистов, забрать средство быстрой разработки, как они становятся беспомощными. Ведь они являются программистами на конкретном средстве! Другими словами, они являются ПОЛЬЗОВАТЕЛЯМИ конкретного средства… А пользователи и программисты – это совершенно различные классы людей, использующих компьютер в своей профессиональной деятельности. И если пользователю необходимо знать только порядок использования и взаимодействие частей одной или нескольких программ (WinWord, бухгалтерская или банковская программы, программа обработки изображений и так далее), то программист помимо всего прочего должен, почти обязан понимать то, как функционирует компьютер, на основе каких принципов построена операционная система, понимать принципы организации данных и быть в состоянии написать эффективную программу, решающую поставленную перед программистом задачу. В том случае, если программист является профессионалом, то использование средств быстрой разработки только поможет ему, позволив сократить время, необходимое для разработки программы, и минимизировать усилия, необходимые для разработки таковой. "

http://www.techbook.ru/rumyantsev.html


 
Petr V. Abramov ©   (2007-10-26 11:40) [133]

> Появилось даже расхожее определение – «программист, пишущий мышкой»
такого сотрудника надо назвать "разработчик интерфейса", и все встанет на свои места.

> почти обязан понимать то, как функционирует компьютер, на основе каких
> принципов построена операционная система, понимать принципы
> организации данных и быть в состоянии написать эффективную программу
как правило, таким человеком написанная программа будет эффективной, но с ужасным интерфейсом -> шанс, что ее эффектвность кто-нить оценит, невелик.

Да здравствует разделение труда


 
KSergey ©   (2007-10-26 11:54) [134]

> Игорь Шевченко ©   (26.10.07 11:28) [132]

Один представитель MS говорил на какой-то кнференции следующее (и у меня сложилось впечатление - совершенно без стеба, на полном серьезе, на основе собственного опыта управлением проектами) :
"Я не люблю программистов на C++, т.к. они постоянно заботятся лишь о каких-то микросекундах и сэкономленных байтах, готовы ночами просиживать и получать кайф от экономии очередной микросекунды и очередного байта. А вот программисты на VB мне нравятся, т.к. они делают продукт, они ориентуруются на конечный бизнес-результат, на создание инструмента, пригодного бизнесу. Я их называю computer-ориентированные и business-ориентированные сортудники."


 
oxffff ©   (2007-10-26 12:11) [135]

Подходы и средства все это направлено на борьбу со сложностью.
Поэтому чем выше поколение средства(языка ) разработки, т.е 2GL,3GL,4GL и т.д, тем легче борьба со сложностью.
И те и другие программисты только разных уровней. :)


 
megabyte ©   (2007-10-26 12:13) [136]

Я вот тоже не то, что не понимаю указатели, скорее почти никогда их не использовал))) Понимание приходит, когда используешь что-то на реальной задаче. Ну не было необходимости и самостоятельно изучать не тянуло...
С ассемблером тоже не знаком.
Мне вообще ближе создание серверной части: построение и проектирование структуры БД, безопастность, нормализация, построение запросов, оптимизация и т.д. Здесь я тоже буду материться, когда человек будет говорить, что рюхает работу с БД и знает SQL, но при этом не понимает, что такое нормализация, уровни изолированности, транзакция, хранимые процедуры, триггеры, индексы, а знает только как сделать выбору и вставить запись(и то через какой-нить Грид только).

Насчет IDE, согласен, многие только батоны кидать умеют...


 
Валентин   (2007-10-26 13:26) [137]

Привет еще раз.
Я тут послушал про указатели. В том смысле, в каком они описывались здесь, я никогда с ними не сталкивался (с#). Я привык понимать их как ссылку на область памяти, содержащий объект, т.е. адрес. Какое-то специальное их использование никогда не осуществлял, а только как необходимость при создании объекта класса.
Сейчас читаю Рихтера, про сборку мусора. Мне нравится. Но что я хотел сказать в первом посте - так это то, что больше люблю строить логигку программы, повышать ее функциональность, но никак не держание в голове способов от утечки, минимизации использования памяти ит.д., т.е. чисто системные такие вещи...Я понимаю без этого не обойтись. Просто я ставлю приоритет для таких задач далеко не высокий..И очень далеко.


 
@!!ex ©   (2007-10-26 13:42) [138]

> [131] oxffff ©   (26.10.07 11:17)

НЕ понял вопроса...
Не опнимаю как можно применить теорию типов к доказательству строгой типизации в применении Var"a.
Было бы интересно это доказательство увидеть.


 
oxffff ©   (2007-10-26 13:47) [139]


> @!!ex ©   (26.10.07 13:42) [138]
> > [131] oxffff ©   (26.10.07 11:17)
>
> НЕ понял вопроса...
> Не опнимаю как можно применить теорию типов к доказательству
> строгой типизации в применении Var"a.
> Было бы интересно это доказательство увидеть.


Просто ты упомянул фразу, что это "старо".
в @!!ex ©   (26.10.07 00:37) [118].

Что ты имел под этим?

P.S. А между тем, на этом "старо" все до сих пор и работает.
Я привел тебе часть требований .NET. Это тоже старо?


 
Alkid ©   (2007-10-26 13:54) [140]


> Валентин   (26.10.07 13:26) [137]

В принципе для тебя определённая ниша на рынке существует - это разная бизнес-логика на Java/.NET, ASP.NET, возможно специализированные языки для систем. 1C, опять же :)

Однако ты должен понимать, что хороший специалист в области разработки софта должен обладать достаточно широким кругозором и иметь хотя бы общее представление о том, как это всё работает, начиная от самых тёмных и мистических "низов", заканчиваю сияющими вершинами архитектуры :) Потому что как бы красиво не выглядела архитектура, она зиждется на этих самых "низах" и по полной огребает от подводных камней, которые там раскиданы.


 
@!!ex ©   (2007-10-26 14:02) [141]

> [139] oxffff ©   (26.10.07 13:47)

нам это в ВУЗе преподавали.
Так вы не ответили на свой же вопрос.
Приведите доказательство. а?


 
Маша Шрайбер ©   (2007-10-26 14:53) [142]

>> Валентин   (25.10.07 14:19)  
> смогу ли я быть программистом

А смысл? (с)


 
oxffff ©   (2007-10-26 15:00) [143]


> @!!ex ©   (26.10.07 14:02) [141]
> > [139] oxffff ©   (26.10.07 13:47)
>
> нам это в ВУЗе преподавали.
> Так вы не ответили на свой же вопрос.
> Приведите доказательство. а?


Я то доказательство могу привести. Только правда на английском.
Подожду от вас его.
Вы же утверждали, что это старо, а между тем его даже не знаете.
:)


 
@!!ex ©   (2007-10-26 15:05) [144]

> [143] oxffff ©   (26.10.07 15:00)

Стоп-стоп-стоп. Я же сказа. Не знаю.
Не надо на английском. На русском. Мне же от вас хочеться доказательство узнатЬ, а не от гугля. Вы разве на английском мыслите?

P.S.
Я, кстати, все еще не понимаю связи между: теорией типов, требованиями к NET., и delphi.


 
oxffff ©   (2007-10-26 15:24) [145]


> @!!ex ©   (26.10.07 15:05) [144]
> > [143] oxffff ©   (26.10.07 15:00)
>
> Стоп-стоп-стоп. Я же сказа. Не знаю.


-Не знаю
-Старо

Это разве одно и тоже?

Я думаю вы намек поняли.

>P.S.
>Я, кстати, все еще не понимаю связи между: теорией типов, требованиями >к NET., и delphi.

А то, что в .NET языках, Delphi есть типы и есть определенные правила ( требования) по их использованию. Вы что не знали?

:)


 
oxffff ©   (2007-10-26 15:27) [146]

Type theory
Suppose that formal var parameter p is declared to have type T1, and actual parameter a is declared to have type T2. Since the function is implemented assuming it receive a value of type T1 in p, the compiler needs to ensure that all possible values of a are valid values of type T1. That is, T2 must be a subtype of T1. In addition, the caller is written to assume that it receives a value of type T2 in a when the function returns. Since the function is only implemented to return values of type T1, any value of type T1 also needs to be a valid value of type T2, so T1 must be a subtype of T2. In order for T1 and T2 to be subtypes of each other, they must be identical types. (Any type is considered to be a subtype of itself.)


 
@!!ex ©   (2007-10-26 15:35) [147]

> [145] oxffff ©   (26.10.07 15:24)

Нет, где тут связь? Теорию типов нам читали на дискретной математике, но вот почему нельзя передавать разные типы в var"е нам не доказывали.

Кстати, в приведенном тексте этого доказательства тоже нет. Есть лишь требования комплиятора. из которых вытекает, что типы должны быть опдтипами друг друга - сооветственно идеентичными. Требования компилятора и доказательство - это разве одно и тоже?
Или я сликшмо плохо пнимаю английский. просил же на русском...


 
oxffff ©   (2007-10-26 15:59) [148]


> @!!ex ©   (26.10.07 15:35) [147]
/I>

А где объяснение твоего высказывания "это старо"?

Что сейчас этим уже не пользуются?
Что уже никаких требований и правил?


 
KSergey ©   (2007-10-26 16:31) [149]

Ну как, Валентин, ясности в вопросе прибавляется?


 
@!!ex ©   (2007-10-26 16:32) [150]

> [148] oxffff ©   (26.10.07 15:59)


> нам это в ВУЗе преподавали.

Не объяснение?


 
oxffff ©   (2007-10-26 16:58) [151]


> Не объяснение?


И это уже устарело?
Безнадежно?

P.S.

Зачем быть таким упрямым, если можно просто сказать, что выразился некорректно.

С уважением Антонов Сергей.

Хорошей пятницы и выходных. ;)


 
KSergey ©   (2007-10-26 17:03) [152]

> @!!ex ©   (26.10.07 16:32) [150]

Я вот тут слежу за вашей дискуссией и одного не могу понять признаться: лично вы этого ("строгой типизации в применении Var"a") правда не понимаете или тут уже не о сути спор, а о том кто первый виноватым назовется?


 
@!!ex ©   (2007-10-26 17:07) [153]

> [152] KSergey ©   (26.10.07 17:03)

Почему не понимаю? Понимаю. потому что так захотели разработчики. Мне действительно интересно увидеть доказательство. Причины, по которым так сделано, а не констатацию факта: так требует компилятор.


> [151] oxffff ©   (26.10.07 16:58)

Если понимать "старо" как "это уже устарело", это одно, если понимать "старо" как "я это уже видел", это другое, что я и пытаюсь объяснить.
Собственно то что я не правлиьно выразился давно понятно, я думал это очевидно, сорри...


 
KSergey ©   (2007-10-26 17:13) [154]

> @!!ex ©   (26.10.07 17:07) [153]
>  Причины,  по которым так сделано,

Т.е. вы их вообще хотите узнать или вы хотите их услышать именно от oxffff ?


 
@!!ex ©   (2007-10-26 17:15) [155]

> [154] KSergey ©   (26.10.07 17:13)

Вообще. Гугль не помог, я честно пытался сам найти.


 
oxffff ©   (2007-10-26 17:29) [156]


>
> Если понимать "старо" как "это уже устарело", это одно,
> если понимать "старо" как "я это уже видел", это другое,
>  что я и пытаюсь объяснить.


То есть, если ты говоришь человеку "Ты старый" - это по твоему значит
"Мне кажется я вас где-то уже видел". Железная логика.

:)


 
@!!ex ©   (2007-10-26 17:34) [157]

> [156] oxffff ©   (26.10.07 17:29)

По вашей логике старый == устаревший?

Вопрос звучал как : "Интересно?"
Нет не интересно, так как "старо", видел я это уже.


 
oxffff ©   (2007-10-26 17:45) [158]


> @!!ex ©   (26.10.07 17:34) [157]


Я уже понял, что ты еще тот ЖУК. :)


 
KSergey ©   (2007-10-26 17:45) [159]

> @!!ex ©   (26.10.07 17:15) [155]

Ну это же вполне очевидно!
var-переменная компилятором передается как указатель. Т.е. в функцию приезжает просто адрес куска памяти, где внутренности функции ожидают увидеть экземпляр объекта, определенного в параметрах. И, соответсвтенно, смело в эту область памяти пишут.
Понятно, что на этапе выполнения никто уже не может проверить что же за адрес на самом деле подсунули. А вот при компиляции - как раз можно.
Так что никакой тут блажи нет.


 
@!!ex ©   (2007-10-26 17:52) [160]

> [159] KSergey ©   (26.10.07 17:45)

Это не объясянет, почему нельзя передать в качестве параметра наследника класса, который требуется передать. Ведь наследник в точности повторяет структуру родителя+ еще свои поля имеет, которые будут просто игнорироваться.



Страницы: 1 2 3 4 5 вся ветка

Форум: "Прочее";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.83 MB
Время: 0.055 c
2-1194517429
{ент
2007-11-08 13:23
2007.12.02
Карты


2-1194430383
allucard
2007-11-07 13:13
2007.12.02
Помогите по компоненту TComPort


3-1184590706
Zabludshiy
2007-07-16 16:58
2007.12.02
FireBird BLOB


11-1179159919
Даддитс
2007-05-14 20:25
2007.12.02
Снова KOLReport


3-1184772562
olevacho_
2007-07-18 19:29
2007.12.02
защта базы.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский