Fenix Posted October 14, 2009 Report Share Posted October 14, 2009 Что такое и зачем нужны абстрактные классы. Если можно с примерами кода и пояснениями. Quote Link to comment Share on other sites More sharing options...
0 Int Posted October 15, 2009 Report Share Posted October 15, 2009 (edited) Так был же уже этот вопрос!Разрабатываешь структуру класса типа1) Подключение к базе2) функция1(), добавляющая запись в базу3) функция2(), добывающая из базы данные14) функция3(), добывающая из базы данные2Это абстрактный класс. Дальше какой-то программист (например, опять ты) реализует описанные тобой функции:Файл1:1) Подключение к MySQL2) mysql_query($q1)3) mysql_query($q2)4) mysql_query($q3)Файл2:1) Подключение к PostgreSQL2) pg_query($q1)3) pg_query($q2)4) pg_query($q3)Файл3:1) Открытие файла2) fwrite()3) fread1()4) fread2()В итоге тот, кто пишет основной функционал, работает через описанные тобой функции, и ему глубоко фиолетово, подключена работа с файлами, mysql или postgres, ты ему дал этот файл с описанием функций и передаваемыми параметрами, он его использует, а ты в это время описываешь различные реализации этих самых функций. И конечное приложение получает возможность работать с любыми базами данных простым подключением нужного класса, который уже описан в абстрактной части.То же самое - любые API-функции, ты знаешь какие параметры им передать и чего от ниж ждать, а разработчик может менять их код хоть каждый день. Таким образом ты пользуешься абстрактным описанием. Edited October 15, 2009 by Int Quote Link to comment Share on other sites More sharing options...
0 Fenix Posted October 15, 2009 Author Report Share Posted October 15, 2009 Так был же уже этот вопрос!Разрабатываешь структуру класса типа1) Подключение к базе2) функция1(), добавляющая запись в базу3) функция2(), добывающая из базы данные14) функция3(), добывающая из базы данные2Это абстрактный класс. Дальше какой-то программист (например, опять ты) реализует описанные тобой функции:Файл1:1) Подключение к MySQL2) mysql_query($q1)3) mysql_query($q2)4) mysql_query($q3)Файл2:1) Подключение к PostgreSQL2) pg_query($q1)3) pg_query($q2)4) pg_query($q3)Файл3:1) Открытие файла2) fwrite()3) fread1()4) fread2()В итоге тот, кто пишет основной функционал, работает через описанные тобой функции, и ему глубоко фиолетово, подключена работа с файлами, mysql или postgres, ты ему дал этот файл с описанием функций и передаваемыми параметрами, он его использует, а ты в это время описываешь различные реализации этих самых функций. И конечное приложение получает возможность работать с любыми базами данных простым подключением нужного класса, который уже описан в абстрактной части.То же самое - любые API-функции, ты знаешь какие параметры им передать и чего от ниж ждать, а разработчик может менять их код хоть каждый день. Таким образом ты пользуешься абстрактным описанием.Можно просто обьяснить зачем он нужен. Quote Link to comment Share on other sites More sharing options...
0 Int Posted October 15, 2009 Report Share Posted October 15, 2009 (edited) Я сложно объяснил? о_О Он нужен чтобы один человек не тормозил всю разработку, и чтобы вся команда разработчиков пользовалась одним стандартом. Это достаточно простое объяснение?Могу на примерах:Я тебе говорю, что тебе нужно написать функцию для онлайн-игры, которая будет высчитывать результат матча между виртуальными футбольными командами, а я тем временем пишу функции, которые вычисляют характеристики игроков, погодные условия и прочее. Ты заранее не знаешь, что я напишу, поэтому написал 1000 строк кода, где много раз вызываешь $class->GetFootbolistParams($fID), имея в виду получение параметров футболиста с нужным ID. А потом оказывается, что я написал такую функцию, которая называется FootbolistGetParam и она вернёт результат только если указан порядковый номер матча, для которого ведётся расчёт. В результате ты садишься и переписываешь все свои 1000 строчек кода, вставляя ещё и подсчёт номера матча и меняя имена функции. То же самое со всеми остальными.А теперь представь, что я тебе заранее дал список всех функций и их параметров, которые я буду писать, чтобы ты ими начал пользоваться, как если бы они были уже написаны.Это пример для двух человек. А если бы разработчиков было 10, и каждый писал бы свой класс, который взаимодействовал бы со всеми остальными, но никто бы не знал ничего о том, что и как пишут другие? Edited October 15, 2009 by Int Quote Link to comment Share on other sites More sharing options...
0 Fenix Posted October 17, 2009 Author Report Share Posted October 17, 2009 Я сложно объяснил? о_О Он нужен чтобы один человек не тормозил всю разработку, и чтобы вся команда разработчиков пользовалась одним стандартом. Это достаточно простое объяснение?Я просил не в этом ключе сказать зачем. Зачем он нужен в програмировании, а не в жизни Quote Link to comment Share on other sites More sharing options...
0 gesandte Posted October 17, 2009 Report Share Posted October 17, 2009 (edited) ООП - общество обкуренных программистов видимо чтобы понять зачем нужны абстрактные классы и как их использовать, надо обкуриться, чтобы абстрагироваться от окружающего мира и тогда к тебе придут эти знания Edited October 17, 2009 by gesandte Quote Link to comment Share on other sites More sharing options...
0 Fenix Posted October 17, 2009 Author Report Share Posted October 17, 2009 "Большое спасибо" вам форумчане. Пока будешь ждать нормальный ответ, успеешь 100 раз прочитать книгу и самому понять что это за штука, где и когда её использовать. Quote Link to comment Share on other sites More sharing options...
0 gesandte Posted October 17, 2009 Report Share Posted October 17, 2009 Да ладно тебе, я бы рассказал про ооп, да сам в него въехать не как не могу...((((((((( Quote Link to comment Share on other sites More sharing options...
0 Int Posted October 18, 2009 Report Share Posted October 18, 2009 Просто не пользуйся пока не почувствуешь необходимость, в чём проблема-то? Если не знаешь куда применить абстрактные классы, значит у тебя просто нет такой потребности, вот и забей на них. Когда появится потребность, ты про них вспомнишь. Quote Link to comment Share on other sites More sharing options...
0 Fenix Posted October 18, 2009 Author Report Share Posted October 18, 2009 Да ладно тебе, я бы рассказал про ооп, да сам в него въехать не как не могу...(((((((((Так молчал бы.Просто не пользуйся пока не почувствуешь необходимость, в чём проблема-то? Если не знаешь куда применить абстрактные классы, значит у тебя просто нет такой потребности, вот и забей на них. Когда появится потребность, ты про них вспомнишь.В том то и дело. Если я не знаю цель их применения, то я про них не вспомню, когда они будут нужны. Соотвественно я должен понять, зачем их применяют. Quote Link to comment Share on other sites More sharing options...
0 Int Posted October 19, 2009 Report Share Posted October 19, 2009 Когда начнёшь искать подходящее решение для задачи, авось вспомнишь про это Quote Link to comment Share on other sites More sharing options...
Question
Fenix
Что такое и зачем нужны абстрактные классы. Если можно с примерами кода и пояснениями.
Link to comment
Share on other sites
10 answers to this question
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.