Перейти к содержимому

Фотография

Как сломать и снова собрать склад ума? От процедур к ООП.Какие книги почитать? Как переучить себя?


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 41

#1
Иксилимьюз

Иксилимьюз
  • Свой человек
  • 966 сообщений
Прошу прощения если похожие темы существуют, но как-то плохо у меня с поиском получалось и похожего не нашел.

А теперь собственно по существу.

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

Я год занимался программингом под 1С 7.7. И ещё пять лет программировал на Delphi+SQL.

Сейчас я вообще отошел от этих дел. Возможно временно, возможно на всегда, не знаю. Занимаюсь тестированием ПО.

Но в глубине души, чисто для себя очень хочется изучить C++ или C# под Net, либо Java, либо что-нить такое настоящее ООПшное, и один из своих домашних проектов переписать под это дело. Но каких-то базовых понятий мне видимо не хватает. Сколько не пытался начать писать на С подобных языках, упираюсь в то что не понимаю как это делать, потому что сильно привык к не ООП стилю, к которому прямо таки располагает Delphi. Хотя были элементы ООП которые использовались в проекте, но с нуля такое написать я бы наверное не смог бы.

В общем, кто что посоветует, для апгрейда мышления? :) Буду благодарен :)
  • 0

#2
rhs72

rhs72
  • Частый гость
  • 59 сообщений
Ваше желание изучить и познать для себя что-либо новое очень похвально :beer:
Но вот проблема Вы озвучиваете слишком уж абстрактно.

Если хотите конкретные ответы - то ставьте конкретные вопросы. Например с описанием задачи и примером кода.
А может быть это лишь Ваше ощущение, что что-то не ООП-исто, а на самом деле ООп-исто
Иначе ничего не остается как отсылать к первоисточникамм знаний :lol:
  • 0

#3
Иксилимьюз

Иксилимьюз
  • Свой человек
  • 966 сообщений

Иначе ничего не остается как отсылать к первоисточникамм знаний :lol:


Самый главный вопрос :) Имел случай общаться с одним опытным и хорошим программером. Разработчик приезжал к нам из Москвы, внедрять проект, их производства. Он как-то в беседе назвал автора, одной книги, про ООП. В качестве языка там берется С++, но на самом деле, автор максимально абстрагируется от языка и дает самые основы ООП, и как он сказал, лишь прочитав его труды он смог понять все глубины глубин :)

Если кто-то знает такую хорошую книгу, хотелось бы узнать автора и название книги что бы иметь возможность её скачать и прочитать :)

Это по сути основной конкретный вопрос :)

А так в основном понимаю что гугл рулит :) И не мало всего находил, но как-то вот закостенелые привычки не могу сломить, мне код С подобных языков кажется вражеским и не понятным))
  • 0

#4
idaa

idaa
  • Частый гость
  • 60 сообщений

Я год занимался программингом под 1С 7.7. И ещё пять лет программировал на Delphi+SQL.

Delphi и есть ООП, Чуть менее чем полностью.

В общем, кто что посоветует...

Не париться. Если задача решается без объхектов, то и решать ее так.
Все одно, что ООП, что процедурное программирование - разницы почти нет.
  • 1

#5
russo_turisto

russo_turisto
  • Постоялец
  • 359 сообщений


Иначе ничего не остается как отсылать к первоисточникамм знаний :lol:



Если кто-то знает такую хорошую книгу, хотелось бы узнать автора и название книги что бы иметь возможность её скачать и прочитать :)

Это по сути основной конкретный вопрос :)

А так в основном понимаю что гугл рулит :) И не мало всего находил, но как-то вот закостенелые привычки не могу сломить, мне код С подобных языков кажется вражеским и не понятным))



Да не возлятьса на меня модераторы, но человеку помочь надо http://__.kz/topic/389545-knigu-po-c/

в место двух слешей вставить две буквы ct


И книгу надо не скачивать, а покупать, потому как читать скан удовольствия не доставляет.

Заказать можно на flip.kz, могут доставить на дом, это не реклама сам там заказывал.

Сообщение отредактировал russo_turisto: 10.01.2012, 16:27:23

  • 1

#6
Offspring

Offspring
  • В доску свой
  • 1 040 сообщений

Все одно, что ООП, что процедурное программирование - разницы почти нет.


Не совсем это одно и то же конечно, но цель у них одна - сокращение времени на кодинг.
А по сабжу - надо исходить из задачи. Если программу можно написать быстро и просто, то зачем городить Наследование, Полиморфизм и т.д.?
  • 0

#7
darkfire

darkfire
  • Постоялец
  • 383 сообщений
Верно сказано Delphi изначально объектно-ориентирован и если вы не отключаете все специально, то как минимум один объект (Форма) у вас есть.
1С типа тоже хотя и реализация там очень ущербная :D
Вообще была у меня такая проблема, но на мой взгляд активная практика лечит все.
Просто постарайтесь сначала представить свою задачу, подумайте какие узлы можно выделить.
ООП ведь не самоцель, а лишь способ разбить большую программу, но группу взаимодействующих независимых компонентов дабы упростить понимание и отладку.

Грубо говоря подумайте сколько нужно роботов и каких чтоб решить вашу задачу это и есть ООП :D
  • 1

#8
Иксилимьюз

Иксилимьюз
  • Свой человек
  • 966 сообщений
Всем спасибо за ответы :) Тема конечно скользкая получается. :)

Просто если смотреть на С#, там невозможно написать даже простейшую программу не используя классов. Даже любая простейшая функция должна быть в классе :)

В Дельфи такого нет, и поэтому сложилась привычка полезные функции раскладывать по юнитам, и для моих задачь этого в общем-то хватало.. Ну в общем вы правы)) Просто видимо надо подойти к решению задачи изначально мысля объектами. И с самого нуля все разложить по полкам оперируя именно понятиями ООП :)
  • 0

#9
batyrLAN

batyrLAN
  • В доску свой
  • 1 722 сообщений
У меня схожая проблема: в своё время научившись процедурному программированию на Си и Visual Basic, очень нелегко порой бывает сейчас работать на Си#. нет-нет, от неимения времени и нежелания напрягать мозги, для разных форм и методов присваиваю некоторые значения с помощью глобальных переменных. :D
  • 1

#10
kostya100

kostya100
  • Случайный прохожий
  • 3 сообщений
Могу посоветовать способ, который сам использовал: читать и изучать хороший ООП код.
Сам начинал еще с библиотеки 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 соответствующим образом.
  • 0

#11
Developer.Net

Developer.Net
  • Гость
  • 21 сообщений

Прошу прощения если похожие темы существуют, но как-то плохо у меня с поиском получалось и похожего не нашел.

А теперь собственно по существу.

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

Я год занимался программингом под 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

  • 0

#12
Dmitriy_N

Dmitriy_N
  • Гость
  • 49 сообщений
Добрый день, вот все говорят об ООП а чем оно лучше процедурного программирования для маленьких программ написанных одним программистом?
  • 0

#13
Developer.Net

Developer.Net
  • Гость
  • 21 сообщений

Добрый день, вот все говорят об ООП а чем оно лучше процедурного программирования для маленьких программ написанных одним программистом?


ПРивет... тем что есть конструкция, конечно если создавать маленькие приложения - можно обойтись процедурным, ООП тут не уместно т.к. затраты будут больше.

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

#14
Developer.Net

Developer.Net
  • Гость
  • 21 сообщений

Добрый день, вот все говорят об ООП а чем оно лучше процедурного программирования для маленьких программ написанных одним программистом?


ПРивет... тем что есть конструкция, конечно если создавать маленькие приложения - можно обойтись процедурным, ООП тут не уместно т.к. затраты будут больше.

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

#15
Developer.Net

Developer.Net
  • Гость
  • 21 сообщений

Добрый день, вот все говорят об ООП а чем оно лучше процедурного программирования для маленьких программ написанных одним программистом?


ПРивет... тем что есть конструкция, конечно если создавать маленькие приложения - можно обойтись процедурным, ООП тут не уместно т.к. затраты будут больше.

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

#16
Developer.Net

Developer.Net
  • Гость
  • 21 сообщений

Добрый день, вот все говорят об ООП а чем оно лучше процедурного программирования для маленьких программ написанных одним программистом?


ПРивет... тем что есть конструкция, конечно если создавать маленькие приложения - можно обойтись процедурным, ООП тут не уместно т.к. затраты будут больше.

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

#17
Developer.Net

Developer.Net
  • Гость
  • 21 сообщений

Добрый день, вот все говорят об ООП а чем оно лучше процедурного программирования для маленьких программ написанных одним программистом?


ПРивет... тем что есть конструкция, конечно если создавать маленькие приложения - можно обойтись процедурным, ООП тут не уместно т.к. затраты будут больше.

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

#18
Developer.Net

Developer.Net
  • Гость
  • 21 сообщений

Добрый день, вот все говорят об ООП а чем оно лучше процедурного программирования для маленьких программ написанных одним программистом?


ПРивет... тем что есть конструкция, конечно если создавать маленькие приложения - можно обойтись процедурным, ООП тут не уместно т.к. затраты будут больше.

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

#19
Developer.Net

Developer.Net
  • Гость
  • 21 сообщений

Добрый день, вот все говорят об ООП а чем оно лучше процедурного программирования для маленьких программ написанных одним программистом?


ПРивет... тем что есть конструкция, конечно если создавать маленькие приложения - можно обойтись процедурным, ООП тут не уместно т.к. затраты будут больше.

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

#20
Developer.Net

Developer.Net
  • Гость
  • 21 сообщений

Добрый день, вот все говорят об ООП а чем оно лучше процедурного программирования для маленьких программ написанных одним программистом?


ПРивет... тем что есть конструкция, конечно если создавать маленькие приложения - можно обойтись процедурным, ООП тут не уместно т.к. затраты будут больше.

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


Количество пользователей, читающих эту тему: 2

пользователей: 0, неизвестных прохожих: 2, скрытых пользователей: 0

Размещение рекламы на сайте     Предложения о сотрудничестве     Служба поддержки пользователей

© 2011-2022 vse.kz. При любом использовании материалов Форума ссылка на vse.kz обязательна.