Личный кабинет

Информатика и преподавание ООП

Евгений Тюленев ( Пользователь )
Вот так можно ОБЪЯСНИТЬ ООП?:
Класс — основное понятие объектно ориентированного программирования.
Объект — экземпляр класса.
Класс определяется свойствами и методами.
Свойство — это объект, отражающий особенность(и) экземпляра класса.
Метод — действие которое может выполнить экземпляр класса над собой или другими объектами(экземплярами).

Основная задача ООП: Создание класса, к которому относится исследуемый процесс или явление.

Пробовал на примере:
#include <iostream>
using namespace std;
class CRect{
public:
CRect(float x,float y){prx=x;pry=y;}
CRect(){prx=pry=0;}
float GetX(){return prx;}

float GetY(){return pry;}

float GetSq(){return prx*pry;}

void Draw()
{
int i,j;
cout<<endl;
for(i=0;i<pry;i++){
if((i==0) || (i== pry-1)) for(j=0;j<prx;j++) cout<<"*";
else {cout<<"*"; for(j=1;j<prx-1;j++) cout<<" "; cout<<"*";}
cout<<endl;

}

}

private:
float prx,pry;
};


int main(int argc, char** argv)
{
CRect pr1(5,4),pr2(6,5),pr3;

cout<<"Spr1="<<pr1.GetSq()<<endl;

pr1.Draw();

cout<<"Spr2="<<pr2.GetSq()<<endl;
pr2.Draw();
cout<<pr3.GetSq();
return 0;

}

Понимают, делают, только определить новый метод - проблема. Думаю, потому что, не надо им это на данном этапе развития.

ЗЫ; Для разработчиков: А чего нет фишки - КОД? Код равнять отступами - издевательство
Олег Деревенец ( Пользователь )
Цитата (Евгений Анатольевич, 10.07.2011, 14:18) <{POST_SNAPBACK}>
Вот так можно ОБЪЯСНИТЬ ООП?:
Класс — основное понятие объектно ориентированного программирования.
Объект — экземпляр класса.
Класс определяется свойствами и методами.
Свойство — это объект, отражающий особенность(и) экземпляра класса.
Метод — действие которое может выполнить экземпляр класса над собой или другими объектами(экземплярами).


Так то оно так, только для новичка, едва освоившего азы программирования все это «слова, слова, слова...». Не проймешь его этими формулировочками. Сам ощутил на своей шкуре высоту ступеньки между «объектной» и «дообъектной» эпохами программирования, - разные стили мышления. Много бойцов старой школы выпало из профессии в тот переломный момент.

Почему так трудно дается ООП новичкам? Во-первых, приходится сразу вводить много новых взаимосвязанных понятий. Во-вторых, преимущества ООП проявляются только на относительно сложных задачах, к которым новичок еще не готов.

В то же время суть объектов, их иерархию и взаимодействие не так уж сложно уяснить на бытовом, интуитивном уровне, - примеров вокруг пруд пруди. Так что, все не так уж безнадежно. Как я понял, уважаемый Станислав хочет подойти с этой стороны. По-моему, это разумно и вполне реально (хотя и не просто).

Серж Андреев ( Пользователь )
Цитата (Евгений Багоцкий, 08.07.2011, 22:23) <{POST_SNAPBACK}>
Да наследование-мощная вещь но стоит ли идти по проторенной Дельфийской дорожке?


Да никто вроде и не предлагает по "дельфийской дорожке идти", а, наоборот, я предлагаю по-сути то же самое, о чем говорит Станислав - создать некоторый "мир" объектов, которые можно было бы в дальнейшем развивать, создавая новые. И вариант со школой, как пространством объектов, замечателен. А можно лес взять с деревьями и зверями, аквариум с различными рыбками, ... Да мало ли интересных примеров!

Цитата (Евгений Багоцкий, 08.07.2011, 22:23) <{POST_SNAPBACK}>
А если по другому взглянуть на вещи? Объект класса - носитель некоей информации. Отличается от структуры наличием методов. И рассмотрите примеры когда по модели надо создавать и хранить множество таких объектов. Какой вы путь выберете - традиционный -запихнуть все в файл и базу данных (то что называлось даталогическая модель) и доставать наборы по запросу. А попробуйте обосновать когда и для каких задач все же преимущество модели будет именно от создания объектов класса. Сразу тогда возникнут дополнительные вопросы о хранении таких объектов в БД. Ведь методики проектирования на основе UML очень сильно отличаются от даталогической модели. Надо дать почувствовать разницу .
В этом по-моему и есть суть проектирования - тонко чувствовать модель, не скатываться к упрощенке.
Уметь пользоваться ООП - это не только владение приемами написания класса а еще и умение разработать инфологическую модель, даже не на языке а пусть хотя бы на BPWin. Архитектор, CASE-аналитик (помните в 90-е было повальное увлечение CASE) мне кажется не менее востребован чем программист.
Вульгарное представление об информатике - это мешанина всяких технологий и направлений - от теоретической информатики (кодироваине и пр) до обзорно-классификационной, разных практических навыков- изгот. презентаций , рисование рис, игры с Flash...все бегом и по верхам...
И если в информатике нельзя объять необъятного, то мне кажется Case -проектирование (технологии работы с данными)ближе к сути информатики чем программирование. Пусть ребята учатся программировать, но это не информатика.


По поводу БД, то есть БД, которые имеют объектную модель. Другое дело, что совсем не обязательно храниить некую объектную структуру в БД - достаточно хранить данные объектов. Т.е. применять объектную модель к данным, а не данные к объектной модели (хотя.... масло-масляное). В свое время у меня получилось засунуть обычные данные о семействе, роде и виде растений и некоторую другую информацию в объектную модель, когда объект "семейство", "род" и "вид" сами себя выводили на форму в соответствии с различными их модификаторами (эндемики, аборигены, агрегатные, культурные, ...). Для меня было важно то, чтобы объект сам себя отображал, а я его только в список засовывал. Это сильно помогало сэкономить время на разработке, т.к. не пришлось думать лишнего - "все украдено до нас" (с).

По поводу "повального увлечения CASE", то мне это вообще ни о чем не говорит. Для меня кейсы - это набор ситуация для ситуационного обучения, когда преподаватель дает вводную, а ученики пытаются принять те или иные решения для "разруливания" оной. И там важен процесс, а не результат (если иначе, то такой кейс-метод вряд ли чему научит). Что под этим понимаете вы - мне неизвестно.
Александр Горячев ( Пользователь )
Цитата (Серж Андреев, 11.07.2011, 09:48) <{POST_SNAPBACK}>
По поводу "повального увлечения CASE", то мне это вообще ни о чем не говорит. Для меня кейсы - это набор ситуация для ситуационного обучения, когда преподаватель дает вводную, а ученики пытаются принять те или иные решения для "разруливания" оной.

CASE - богатое слово.
Автор всё-таки имел в виду computer-aided software engineering.
Это немножечко не ситуационное обучение. Просто совпадает по написанию.
Евгений Тюленев ( Пользователь )
Цитата (Олег Деревенец, 11.07.2011, 00:24) <{POST_SNAPBACK}>
Так то оно так, только для новичка, едва освоившего азы программирования все это «слова, слова, слова...». Не проймешь его этими формулировочками. Сам ощутил на своей шкуре высоту ступеньки между «объектной» и «дообъектной» эпохами программирования, - разные стили мышления. Много бойцов старой школы выпало из профессии в тот переломный момент.

Да ладно Вам!

Вы линейное программирование изучать не пробовали(assembler и т.п.)? Как после него тяжело к структурному перейти.

А теперь мы почему-то сразу учим структурам. Странно, нет?

Объектно ориентированное воспринимается также как структурное в 80-х годах. Помнится удобство оператора goto.

А объект, класс — это же очевидные понятия. Все науки классифицируют объекты. И дети понимают это. Зачем говорить, что ООП это только для звезд. Нет ООП для людей, простых людей, которые привыкли все классифицировать, так проще разобраться в путанице.

И чем меньше слов — тем лучше, качественнее, быстрее. А иначе: "ПОРОЖНЯК ГОНЯТЬ"
Михаил Крекин ( Пользователь )
Цитата (Евгений Анатольевич, 11.07.2011, 17:30) <{POST_SNAPBACK}>
Вы линейное программирование изучать не пробовали(assembler и т.п.)? Как после него тяжело к структурному перейти.

Ну, допустим, меня учили программировать на FORTRAN IV, где из всех структурных конструкций более или менее присутствовал цикл с параметром. А всё остальное — через арифметический и логический IF и GOTO. (это, правда, не линейное программирование; термин «линейное программирование» — совсем из другой оперы)
Так вот переходить с этого на структурное совсем не сложно. Фактически, меняется только организация тех же самых действий, а если изначально мозги направляли в нужную сторону (см. Ван Тассел), то вообще только запись становится более компактной и читабельной.

ООП — это уже, в значительной степени, иная идеология, иной подход к проектированию.
Олег Деревенец ( Пользователь )
Цитата (Евгений Анатольевич, 11.07.2011, 17:30) <{POST_SNAPBACK}>
Объектно ориентированное воспринимается также как структурное в 80-х годах. Помнится удобство оператора goto.


:-) Да уж! Взращенным на Васике, Фортране и Ассемблере печальней всего было от GOTO отказаться.

Цитата (Евгений Анатольевич, 11.07.2011, 17:30) <{POST_SNAPBACK}>
А объект, класс — это же очевидные понятия.


Как и то, что Земля круглая. А сколько столетий ушло на доказательство этого «очевидного» факта!

Цитата (Евгений Анатольевич, 11.07.2011, 17:30) <{POST_SNAPBACK}>
И чем меньше слов — тем лучше, качественнее, быстрее. А иначе: "ПОРОЖНЯК ГОНЯТЬ"


Хм... Стало быть, проблемы с преподаванием ООП нет? Все просто? И зря мы тут копья ломаем?

Цитата (Михаил_К, 11.07.2011, 18:39) <{POST_SNAPBACK}>
ООП — это уже, в значительной степени, иная идеология, иной подход к проектированию.


Вот именно, - к проектированию.

Станислав Михалкович ( Пользователь )
Цитата (Евгений Анатольевич, 10.07.2011, 14:18) <{POST_SNAPBACK}>
Вот так можно ОБЪЯСНИТЬ ООП?:
Класс — основное понятие объектно ориентированного программирования.
Объект — экземпляр класса.
Класс определяется свойствами и методами.
Свойство — это объект, отражающий особенность(и) экземпляра класса.
Метод — действие которое может выполнить экземпляр класса над собой или другими объектами(экземплярами).

Основная задача ООП: Создание класса, к которому относится исследуемый процесс или явление.

Пробовал на примере:
...

Очень хорошо, что в топике начались примеры. Приведу ответный пример: использование класса-штампа прямоугольника. Интуитивно: задаём параметры и штампуем. Потом меняем параметры (свойства) и снова штампуем.

Вот этот пример. Не открывайте в IE - не сработает.

По методике.
Утверждение 1. Вначале - использование классов (конструирование объектов, обращение к свойствам, изменение свойств, вызов методов) и только затем - написание собственных. Для этого нужны некоторые заготовки. Заставлять писать с нуля - плохо.

Утверждение 2. Код первого примера должен быть простым, совсем простым. И таким чтобы его можно было модифицировать.

Задумываемся, как бы мы написали, используя только графические процедуры. Печалимся. Радуемся, что есть классы

Прошу судить лишь идею - языки и средства могут быть самыми разными.

По определениям. Они - не вполне точные. Пробую написать свои.

Класс — множество объектов одного типа.
Объект — представитель класса.

В программе класс - это составной тип, внутри которого могут быть переменные (свойства) и подпрограммы (методы)

Пример класса: ученик
Объекты класса (переменные): уч1, уч2: ученик

Класс имеет свойства и методы.

Свойство — это характеристика класса. Например, ученик имеет свойства Имя и Возраст
Пример:
Ученик=класс
  Имя: строка
  Возраст: целое
конецКласса

Обращение к свойству - точечная нотация:
уч1.Имя := 'Света'; уч1.Возраст := 15;

Метод — действие, определенное в классе, которое может выполнить объект класса над собой
Пример определения:
Ученик=класс
  Имя: строка
  Возраст: целое
  ПовзрослетьНаГод
  нач
     Возраст += 1
  кон
  Вывести
  нач
     Вывести(Имя,Возраст)
  кон
конецКласса

Пример использования:
уч1.Имя := 'Света'; уч1.Возраст := 15;
уч1.Вывести
уч1.ПовзрослетьНаГод
уч1.Вывести

Замечание. Видимо, C++ - не лучший язык для демонстрации классов школьникам.
Олег Деревенец ( Пользователь )
Цитата (Михалкович Станислав, 12.07.2011, 00:01) <{POST_SNAPBACK}>
По определениям. Они - не вполне точные. Пробую написать свои.
Класс — множество объектов одного типа.
Объект — представитель класса.

Нет ли в этих определениях кольцевых ссылок?




Цитата (Михалкович Станислав, 12.07.2011, 00:01) <{POST_SNAPBACK}>
Замечание. Видимо, C++ - не лучший язык для демонстрации классов школьникам.


Я бы короче сказал: «Видимо, C++ - не лучший язык» :-)
Станислав Михалкович ( Пользователь )
Цитата (Олег Деревенец, 12.07.2011, 08:39) <{POST_SNAPBACK}>
Нет ли в этих определениях кольцевых ссылок?

Нет :) Скажите лучше

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

То есть, я предлагаю не убивать топик высказываниями типа "ООП не нужен школьникам", "Вы представляете, что творится в реальной школе" и т.п. Потому что убить топик - легко. А написать что-то близкое к конструктивному - сложно.


Цитата (Михаил_К, 11.07.2011, 18:39) <{POST_SNAPBACK}>
ООП — это уже, в значительной степени, иная идеология

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

footer logo © Образ–Центр, 2019. 12+