Как сломать и снова собрать склад ума? От процедур к ООП.Какие книги почитать? Как переучить себя?
#1
Отправлено 10.01.2012, 12:20:18
А теперь собственно по существу.
Начинал учить программирование с Паскаля. Причем пропустил тему указателей, из-за производственной практики. Так по сей день небольшой пробел в этой области. Но самая большая проблема - ООП. Я понимаю общие принципы, и даже периодически освежаю в памяти определения таких понятий как полиморфизм, наследование и инкапсуляция. НО! Что бы я ни делал, у меня все получается на манер процедурного программирования.
Я год занимался программингом под 1С 7.7. И ещё пять лет программировал на Delphi+SQL.
Сейчас я вообще отошел от этих дел. Возможно временно, возможно на всегда, не знаю. Занимаюсь тестированием ПО.
Но в глубине души, чисто для себя очень хочется изучить C++ или C# под Net, либо Java, либо что-нить такое настоящее ООПшное, и один из своих домашних проектов переписать под это дело. Но каких-то базовых понятий мне видимо не хватает. Сколько не пытался начать писать на С подобных языках, упираюсь в то что не понимаю как это делать, потому что сильно привык к не ООП стилю, к которому прямо таки располагает Delphi. Хотя были элементы ООП которые использовались в проекте, но с нуля такое написать я бы наверное не смог бы.
В общем, кто что посоветует, для апгрейда мышления? Буду благодарен
#2
Отправлено 10.01.2012, 13:00:32
Но вот проблема Вы озвучиваете слишком уж абстрактно.
Если хотите конкретные ответы - то ставьте конкретные вопросы. Например с описанием задачи и примером кода.
А может быть это лишь Ваше ощущение, что что-то не ООП-исто, а на самом деле ООп-исто
Иначе ничего не остается как отсылать к первоисточникамм знаний
#3
Отправлено 10.01.2012, 14:03:56
Иначе ничего не остается как отсылать к первоисточникамм знаний
Самый главный вопрос Имел случай общаться с одним опытным и хорошим программером. Разработчик приезжал к нам из Москвы, внедрять проект, их производства. Он как-то в беседе назвал автора, одной книги, про ООП. В качестве языка там берется С++, но на самом деле, автор максимально абстрагируется от языка и дает самые основы ООП, и как он сказал, лишь прочитав его труды он смог понять все глубины глубин
Если кто-то знает такую хорошую книгу, хотелось бы узнать автора и название книги что бы иметь возможность её скачать и прочитать
Это по сути основной конкретный вопрос
А так в основном понимаю что гугл рулит И не мало всего находил, но как-то вот закостенелые привычки не могу сломить, мне код С подобных языков кажется вражеским и не понятным))
#4
Отправлено 10.01.2012, 14:12:56
Delphi и есть ООП, Чуть менее чем полностью.Я год занимался программингом под 1С 7.7. И ещё пять лет программировал на Delphi+SQL.
Не париться. Если задача решается без объхектов, то и решать ее так.В общем, кто что посоветует...
Все одно, что ООП, что процедурное программирование - разницы почти нет.
#5
Отправлено 10.01.2012, 14:51:45
Иначе ничего не остается как отсылать к первоисточникамм знаний
Если кто-то знает такую хорошую книгу, хотелось бы узнать автора и название книги что бы иметь возможность её скачать и прочитать
Это по сути основной конкретный вопрос
А так в основном понимаю что гугл рулит И не мало всего находил, но как-то вот закостенелые привычки не могу сломить, мне код С подобных языков кажется вражеским и не понятным))
Да не возлятьса на меня модераторы, но человеку помочь надо http://__.kz/topic/389545-knigu-po-c/
в место двух слешей вставить две буквы ct
И книгу надо не скачивать, а покупать, потому как читать скан удовольствия не доставляет.
Заказать можно на flip.kz, могут доставить на дом, это не реклама сам там заказывал.
Сообщение отредактировал russo_turisto: 10.01.2012, 16:27:23
#6
Отправлено 11.01.2012, 00:39:14
Все одно, что ООП, что процедурное программирование - разницы почти нет.
Не совсем это одно и то же конечно, но цель у них одна - сокращение времени на кодинг.
А по сабжу - надо исходить из задачи. Если программу можно написать быстро и просто, то зачем городить Наследование, Полиморфизм и т.д.?
#7
Отправлено 11.01.2012, 15:23:20
1С типа тоже хотя и реализация там очень ущербная
Вообще была у меня такая проблема, но на мой взгляд активная практика лечит все.
Просто постарайтесь сначала представить свою задачу, подумайте какие узлы можно выделить.
ООП ведь не самоцель, а лишь способ разбить большую программу, но группу взаимодействующих независимых компонентов дабы упростить понимание и отладку.
Грубо говоря подумайте сколько нужно роботов и каких чтоб решить вашу задачу это и есть ООП
#8
Отправлено 11.01.2012, 16:07:35
Просто если смотреть на С#, там невозможно написать даже простейшую программу не используя классов. Даже любая простейшая функция должна быть в классе
В Дельфи такого нет, и поэтому сложилась привычка полезные функции раскладывать по юнитам, и для моих задачь этого в общем-то хватало.. Ну в общем вы правы)) Просто видимо надо подойти к решению задачи изначально мысля объектами. И с самого нуля все разложить по полкам оперируя именно понятиями ООП
#9
Отправлено 11.01.2012, 22:58:06
#10
Отправлено 12.01.2012, 22:24:26
Сам начинал еще с библиотеки Turbo Vision в Borland Pascal.
Автор книги, которая упоминается судя по всему Гради Буч.
Просто если смотреть на С#, там невозможно написать даже простейшую программу не используя классов. Даже любая простейшая функция должна быть в классе
Наиболее близкий к процедурному стилю будет подобный код в C#:
using System; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); int C = NumberUtils.Sum(2, 3); int D = NumberUtils.Mul(2, 3); Text = String.Format("C = {0}, D = {1}", C, D); } } public class NumberUtils { public static int Sum(int A, int B) { return A + B; } public static int Mul(int A, int B) { return A * B; } } }
Если смотреть поверхностно, тут есть класс NumberUtils. Но так как не создается никаких объектов, можно считаеть его аналогом модуля в Delphi, в котором описаны 2 функции Sum и Mul.
Далее приведу код, делающий то же самое, но более похожий на ООП код:
using System; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); Number C = new Number(2); C.Add(new Number(3)); Number D = new Number(2); D.Multiply(new Number(3)); Text = String.Format("C = {0}, D = {1}", C.AsInteger, D.AsInteger); } } public class Number { private int data; public Number(int NewValue) { data = NewValue; } public int AsInteger { get { return data; } set { data = value; } } public void Add(Number N) { this.AsInteger += N.AsInteger; } public void Multiply(Number N) { this.AsInteger *= N.AsInteger; } } }Преимущество 2 подхода в том, что теперь можно описывать классы-потомки от Number (например класс вещественных чисел и класс комплексных чисел), изменив у них методы Add и Multiply соответствующим образом.
#11
Отправлено 17.01.2012, 18:23:55
Прошу прощения если похожие темы существуют, но как-то плохо у меня с поиском получалось и похожего не нашел.
А теперь собственно по существу.
Начинал учить программирование с Паскаля. Причем пропустил тему указателей, из-за производственной практики. Так по сей день небольшой пробел в этой области. Но самая большая проблема - ООП. Я понимаю общие принципы, и даже периодически освежаю в памяти определения таких понятий как полиморфизм, наследование и инкапсуляция. НО! Что бы я ни делал, у меня все получается на манер процедурного программирования.
Я год занимался программингом под 1С 7.7. И ещё пять лет программировал на Delphi+SQL.
Сейчас я вообще отошел от этих дел. Возможно временно, возможно на всегда, не знаю. Занимаюсь тестированием ПО.
Но в глубине души, чисто для себя очень хочется изучить C++ или C# под Net, либо Java, либо что-нить такое настоящее ООПшное, и один из своих домашних проектов переписать под это дело. Но каких-то базовых понятий мне видимо не хватает. Сколько не пытался начать писать на С подобных языках, упираюсь в то что не понимаю как это делать, потому что сильно привык к не ООП стилю, к которому прямо таки располагает Delphi. Хотя были элементы ООП которые использовались в проекте, но с нуля такое написать я бы наверное не смог бы.
В общем, кто что посоветует, для апгрейда мышления? Буду благодарен
Если читаешь книшки то наверника знаешь....
1. Класс - Автомобиль
2 Свойство -
- Название Not Null
- Модель Not Null
- VIN код Not Null
- Цвет кузова Null
3. Метод -
- Ехать
- Остановиться
- Повернуть
4. Событие -
Если остановиться То включаем стоп фонари
Если Повернуть То включаемя поворотники
Всё это и есть Класс Автомобиль, получилось ООП, осталось только его перевести на язык программирования, или же нарисовать UML диаграмму.
я незнаю как нужно мыслить... но так нужно строить свои алгоритм решения
Сообщение отредактировал Developer.Net: 17.01.2012, 18:27:00
#13
Отправлено 19.01.2012, 08:49:05
Добрый день, вот все говорят об ООП а чем оно лучше процедурного программирования для маленьких программ написанных одним программистом?
ПРивет... тем что есть конструкция, конечно если создавать маленькие приложения - можно обойтись процедурным, ООП тут не уместно т.к. затраты будут больше.
ООП :
- тем что можно создать классы и в будущем их использовать в других классах т.е. наследование, что приводит в будущем к меньшим затратам
- конструкция
- объеденение всё в одну сущность т.е. в класс, что позволяет быстро ориентироваться в коде - методы, события, свойство
- ну и конечно Инкапсуляция информации - т.е. можно создать интерфейс и тем самым инкапсулировать свой класс
- можно рисовать диаграммы, что позволяет очень высокую читабельность архитектуры
#14
Отправлено 19.01.2012, 08:49:50
Добрый день, вот все говорят об ООП а чем оно лучше процедурного программирования для маленьких программ написанных одним программистом?
ПРивет... тем что есть конструкция, конечно если создавать маленькие приложения - можно обойтись процедурным, ООП тут не уместно т.к. затраты будут больше.
ООП :
- тем что можно создать классы и в будущем их использовать в других классах т.е. наследование, что приводит в будущем к меньшим затратам
- конструкция
- объеденение всё в одну сущность т.е. в класс, что позволяет быстро ориентироваться в коде - методы, события, свойство
- ну и конечно Инкапсуляция информации - т.е. можно создать интерфейс и тем самым инкапсулировать свой класс
- можно рисовать диаграммы, что позволяет очень высокую читабельность архитектуры
#15
Отправлено 19.01.2012, 08:50:29
Добрый день, вот все говорят об ООП а чем оно лучше процедурного программирования для маленьких программ написанных одним программистом?
ПРивет... тем что есть конструкция, конечно если создавать маленькие приложения - можно обойтись процедурным, ООП тут не уместно т.к. затраты будут больше.
ООП :
- тем что можно создать классы и в будущем их использовать в других классах т.е. наследование, что приводит в будущем к меньшим затратам
- конструкция
- объеденение всё в одну сущность т.е. в класс, что позволяет быстро ориентироваться в коде - методы, события, свойство
- ну и конечно Инкапсуляция информации - т.е. можно создать интерфейс и тем самым инкапсулировать свой класс
- можно рисовать диаграммы, что позволяет очень высокую читабельность архитектуры
#16
Отправлено 19.01.2012, 08:50:56
Добрый день, вот все говорят об ООП а чем оно лучше процедурного программирования для маленьких программ написанных одним программистом?
ПРивет... тем что есть конструкция, конечно если создавать маленькие приложения - можно обойтись процедурным, ООП тут не уместно т.к. затраты будут больше.
ООП :
- тем что можно создать классы и в будущем их использовать в других классах т.е. наследование, что приводит в будущем к меньшим затратам
- конструкция
- объеденение всё в одну сущность т.е. в класс, что позволяет быстро ориентироваться в коде - методы, события, свойство
- ну и конечно Инкапсуляция информации - т.е. можно создать интерфейс и тем самым инкапсулировать свой класс
- можно рисовать диаграммы, что позволяет очень высокую читабельность архитектуры
#17
Отправлено 19.01.2012, 08:51:46
Добрый день, вот все говорят об ООП а чем оно лучше процедурного программирования для маленьких программ написанных одним программистом?
ПРивет... тем что есть конструкция, конечно если создавать маленькие приложения - можно обойтись процедурным, ООП тут не уместно т.к. затраты будут больше.
ООП :
- тем что можно создать классы и в будущем их использовать в других классах т.е. наследование, что приводит в будущем к меньшим затратам
- конструкция
- объеденение всё в одну сущность т.е. в класс, что позволяет быстро ориентироваться в коде - методы, события, свойство
- ну и конечно Инкапсуляция информации - т.е. можно создать интерфейс и тем самым инкапсулировать свой класс
- можно рисовать диаграммы, что позволяет очень высокую читабельность архитектуры
#18
Отправлено 19.01.2012, 08:51:50
Добрый день, вот все говорят об ООП а чем оно лучше процедурного программирования для маленьких программ написанных одним программистом?
ПРивет... тем что есть конструкция, конечно если создавать маленькие приложения - можно обойтись процедурным, ООП тут не уместно т.к. затраты будут больше.
ООП :
- тем что можно создать классы и в будущем их использовать в других классах т.е. наследование, что приводит в будущем к меньшим затратам
- конструкция
- объеденение всё в одну сущность т.е. в класс, что позволяет быстро ориентироваться в коде - методы, события, свойство
- ну и конечно Инкапсуляция информации - т.е. можно создать интерфейс и тем самым инкапсулировать свой класс
- можно рисовать диаграммы, что позволяет очень высокую читабельность архитектуры
#19
Отправлено 19.01.2012, 08:51:50
Добрый день, вот все говорят об ООП а чем оно лучше процедурного программирования для маленьких программ написанных одним программистом?
ПРивет... тем что есть конструкция, конечно если создавать маленькие приложения - можно обойтись процедурным, ООП тут не уместно т.к. затраты будут больше.
ООП :
- тем что можно создать классы и в будущем их использовать в других классах т.е. наследование, что приводит в будущем к меньшим затратам
- конструкция
- объеденение всё в одну сущность т.е. в класс, что позволяет быстро ориентироваться в коде - методы, события, свойство
- ну и конечно Инкапсуляция информации - т.е. можно создать интерфейс и тем самым инкапсулировать свой класс
- можно рисовать диаграммы, что позволяет очень высокую читабельность архитектуры
#20
Отправлено 19.01.2012, 08:51:51
Добрый день, вот все говорят об ООП а чем оно лучше процедурного программирования для маленьких программ написанных одним программистом?
ПРивет... тем что есть конструкция, конечно если создавать маленькие приложения - можно обойтись процедурным, ООП тут не уместно т.к. затраты будут больше.
ООП :
- тем что можно создать классы и в будущем их использовать в других классах т.е. наследование, что приводит в будущем к меньшим затратам
- конструкция
- объеденение всё в одну сущность т.е. в класс, что позволяет быстро ориентироваться в коде - методы, события, свойство
- ну и конечно Инкапсуляция информации - т.е. можно создать интерфейс и тем самым инкапсулировать свой класс
- можно рисовать диаграммы, что позволяет очень высокую читабельность архитектуры
Количество пользователей, читающих эту тему: 2
пользователей: 0, неизвестных прохожих: 2, скрытых пользователей: 0