Объектно-ориентированное программирование на примере размножения и развития живых организмов





Скачать 90.71 Kb.
НазваниеОбъектно-ориентированное программирование на примере размножения и развития живых организмов
Дата публикации25.06.2014
Размер90.71 Kb.
ТипУрок
100-bal.ru > Информатика > Урок


Казанский государственный университет

Механико-математический факультет
Кафедра общей математики

Квалификационная работа по курсу

«Методика преподавания курсов информатики

и информационных технологий»

Объектно-ориентированное программирование

на примере размножения и развития

живых организмов

или

OOPs... I did it again... Baby one more time!






Выполнила

Арсланова А.Р., гр. 503

Проверил

доцент Тагиров Т.С.

Казань — 2004

Данная работа представляет собой методическую разработку четырёх уроков информатики, посвящённых объектно-ориентированному программированию. ООП изучается на примере объектно-ориентированного языка C++ (предполагается, что учащиеся уже владеют в достаточной мере языком C).

В уроках избегаются сложные объяснения. Отдаётся предпочтение такому подходу, при котором материал усваивается интуитивно. Берётся всем знакомое понятие из каждодневной жизни и «переводится» на объектно-ориентированный язык. В том числе, затрагивается тема, столь волнующая лиц подросткового и юношеского возраста — размножение.

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

#include

#include

#include

#include

#include
using namespace std;
const yes=1, no=0,

male=0, female=1;
Урок 1. О том, что объединяет Ньютона, Mac и Beatles

Eсли мы попробуем описать в терминах программирования, скажем, яблоко, то логично рассмотреть его по частям: пусть area представляет площадь кожуры, juice представляет содержащийся в яблоке объем жидкого сока, weight представляет вес фрукта, seeds — число семечек...

double area, weight, juice;

int seeds;

Однако таким образом мы не получаем представления о яблоке как о целостном объекте. Воспринимать объект как целое позволяет класс (class). Напишем класс Apple.

class Apple {

public:

double area, weight, juice;

int seeds;

};
void main() {

Apple* apple1;

apple1 = new Apple();
apple1->area=10;

apple1->weight=400;

apple1->juice=200;

apple1->seeds=16;
delete apple1;

}



Таким образом, мы уже работаем не отдельно с переменными area, weight, juice, seeds, а с объектом apple1 типа Apple*, что позволяет нам мыслить о яблоке как о целом.

Экземпляр класса создаётся с помощью оператора new и удаляется с помощью оператора delete. Неиспользуемые более объекты обязательно следует удалять, иначе они продолжают занимать место в памяти. Важно следить за тем, чтобы в тексте программы количество операторов delete равнялось количеству операторов new.

Членами класса (class members) могут быть как переменные, так и функции. В частности, конструктор (constructor) класса. Функция-конструктор вызывается всякий раз при выполнении оператора new. (При выполнении оператора delete вызывается функция-деструктор (destructor).) Только что мы написали класс Apple, не включив в его описание конструктор. Напишем класс Apple с конструктором.

class Apple {

public:

double area, weight, juice;

int seeds;

Apple(double area, double weight,

double juice, int seeds) {

this->area=area;

this->weight=weight;

this->juice=juice;

this->seeds=seeds;

};

};
void main() {

Apple* apple1;

apple1 = new Apple(10, 400, 200, 16);
delete apple1;

}


Конструктор класса
Чтобы различать area – параметр функции-конструктора и area – поле класса Apple, используют слово this.


В предыдущем примере было просто Apple()

В двух предыдущих примерах у нас был всего один объект типа Apple*. А пусть нам требуется задать не одно яблоко, а двадцать. Тогда функция main в последнем примере заменится на следующую функцию main.

void main() {

Apple* apple[20];

for(int i=0; i<20; i++)

apple[i] = new Apple(10+i/2, 300+rand(100), 180+rand(10*i), i);
...
for(int i=0; i<20; i++)

delete apple[i];

}

Всего яблок 20, и каждое из них имеет своё значение area, своё значение weight, своё значение juice и своё значение seeds.

Урок 2. Raining cats and dogs

Установим соотношения между понятиями «организм», «млекопиающее», «растение», «собака» и «кошка». Млекопитающее является организмом, растение, кошка и собака также являются организмами. Кошка и собака являются и млекопитающими. Эти соотношения можно изобразить в виде диаграммы.



«Переведём» это на объектно-ориентированный язык программирования. Напишем классы Organism, Mammal, Plant, Dog и Cat.

class Organism {

public:

int age;
Organism() {

age=0;

};
void birthday() {

age++;

}

};



Все живые организмы имеют возраст
Конструктор класса Organism

Когда организм только появляется, его возраст равняется 0.
«День рождения» организма


Всё, что присуще организму, присуще и млекопитающему. Класс Mammal будет наследником (inheritor) класса Organism.

class Mammal: public Organism {

public:

int sex;
Mammal(int sex): Organism() {

this->sex=sex;

};

};




У млекопитающего есть пол
Конструктор:

пол задаётся при рождении

Всё, что присуще млекопитающему, и, соответственно, организму, присуще и собаке. Класс Dog — наследник класса Mammal.

class Dog: public Mammal {

public:

Dog(int sex): Mammal(sex) {};
void bark() {

cout<<"Bark! Bark!\n";

};

};

Функция «лай»


Класс Cat — также наследник класса Mammal.

class Cat: public Mammal {

public:

Cat(int sex): Mammal(sex) {};
void miaow() {

cout<<"Miaow!\n";

};

};

Функция «мяуканье»


Вот как может выглядеть функция main программы, использующей наши классы:

void main() {

Dog* Spike=new Dog(male);

Dog* Lessy=new Dog(female);

Cat* Vanessa=new Cat(female);

Spike->birthday();

Lessy->birthday();

Spike->bark();

Vanessa->miaow();

Vanessa->birthday();

Spike->birthday();

delete Spike, Lessy, Vanessa;

}


Рождается пёс Спайк

Рождается собака Лесси

Рождается кошка Ванесса

Спайк «празднует день рожденья»

Спайк «празднует день рожденья»

Спайк лает

Ванесса мяукает

Ванесса «празднует день рожденья»

Спайк «празднует день рожденья»

Освобождаем память


Класс Plant — наследник класса Organism — пишется подобно классу Mammal:

class Plant: public Organism {

public:

/* Свойства, присущие растениям */

};


Урок 3. У людей всё сложнее…

Человек является млекопитающим. Класс Human будет наследником класса Mammal.

class Human: public Mammal {

public:

/* Кроме возраста, присущего всем организмам, и пола, присущего млекопитающим, у человека есть также собственное имя, уровень образования и, может быть, супруг(а). */

int education, married;

char name[30];

Human* spouse;
/* Конструктор класса. Когда человек рождается, его возраст равен 0 (как и у всякого организма), уровень образования также равен 0, и он не женат. При рождении человеку даётся имя. */

Human(int sex, char* name): Mammal(sex) {

strcpy(this->name, name);

education=0;

married=no;

cout<
};
/* Функция ответа на вопрос: «Сколько тебе лет?» */

void howOld() {

cout<
};
/* Функция «жениться/выйти замуж». В качестве параметра выступает жених/невеста (тоже типа Human*). Вступить в брак можно только с человеком противоположного пола, когда обоим более 18 лет и когда оба неженаты. */

void marry(Human* fiance) {

if(sex!=fiance->sex &&

age>=18 && fiance->age>=18 &&

married==no && fiance->married==no) {

spouse = fiance;

fiance->spouse = this;

married=yes;

fiance->married=yes;

cout<name

<<" since now are legally wed.\n";

}

else {

cout<name

<<": the wedding is illegal.\n";

}

}
/* Функция «развестись». Развестись можно только будучи предварительно женатым/замужем. */

void divorce() {

if(married) {

cout<
<name<<".\n";

married=no;

spouse->married=no;

spouse->spouse = NULL;

spouse = NULL;

}

else {

cout<
}

}

};




void live(Human* human1,

Human* human2, int years) {

for(int i=0; i
human1->birthday();

human2->birthday();

}

human1->howOld();

human2->howOld();

}
void main() {

Human* John=new Human(male,

"John");

for(int i=0; i<3; i++)

John->birthday();
Human* Cherlie=new Human(female,

"Cherlie");
live(John, Cherlie, 15);

John->marry(Cherlie);
live(John, Cherlie, 4);

John->marry(Cherlie);
live(John, Cherlie, 20);

Cherlie->divorce();
delete John, Cherlie;

}

Вспомогательная функция

Рождается Джон
Проходит 3 года

Рождается Чёрли

Проходит 15 лет

Джон хочет жениться на Чёрли,

но нельзя!

Проходит ещё 4 года

Джон ещё раз хочет жениться на

Чёрли и женится

Они живут вместе 20 лет

Чёрли решает развестись
Освобождаем память


Урок 4. Размножение и развитие

На прошлом уроке был написан класс Human. Посмотрим, как с помощью этого класса можно написать программу, моделирующую реальную жизнь людей: свадьбы, рождение детей и разводы.


void main() {

const nmax=200, hNmax=6;

Human* human[nmax];

int n=5, years;

char hName[2][hNmax][10];
// Задаём возможные мужские имена:

strcpy(hName[0][0], "Herman");

strcpy(hName[0][1], "Victor");

strcpy(hName[0][2], "Jacques");

strcpy(hName[0][3], "Peter");

strcpy(hName[0][4], "George");

strcpy(hName[0][5], "Paul");

strcpy(hName[0][6], "John");

// Задаём возможные женские имена:

strcpy(hName[1][0], "Mary");

strcpy(hName[1][1], "Ann");

strcpy(hName[1][2], "Lisa");

strcpy(hName[1][3], "Raquel");

strcpy(hName[1][4], "Charlotte");

strcpy(hName[1][5], "Kath");

strcpy(hName[1][6], "Lucy");
randomize();
// Первые n=5 человек будут уже взрослыми

for(int i=0; i
int sex=random(2);

human[i] = new Human(sex, hName[sex][random(hNmax)]);

human[i]->age=20+random(20);

}
do {

/* С клавиатуры вводится число лет, жизнь в течение которых программа будет моделировать. Если будет введено число 0, это приведёт к завершению программы. */

cin>>years;

for(int y=0; y
i=0;

while(i
int r=random(20);

/* Если i-й человек женат, то вероятность завести ребёнка – 1/5, вероятность развестись – 1/20. Если не женат, то вероятность желания жениться – 1/4. */

if(human[i]->married) {

if(r<4) {

if(n<=nmax) {

int sex=random(2); // пол будущего ребёнка

n++; // число людей увеличивается на 1

cout<name<<" and "<spouse->name<<": ";

human[n] = new Human(sex, hName[sex][random(hNmax)]);

} else

cout<<"Overpopulated\n"; // Если людей больше nmax

if(r==4)

human[i]->divorce();

}

}

else

if(r>15&&human[i]->age>=20) {

int j=random(n); // Индекс потенциального жениха/невесты

if(human[i]->sex!=human[j]->sex

&&abs(human[i]->age-human[j]->age)<10) {

human[i]->marry(human[j]);

}

}
// Каждый год человек справляет день рожденья:

human[i]->birthday();

i++;

}

}

}

while(years>0);
for(i=0; i
delete human[i];

}


Источники


  1. Borland C++ 3.1 Help

  2. Borland C++ Builder 4.0 Help

  3. http://athena.vvsu.ru/carina/oop/Opn_oop_o.htm

  4. http://www.codenet.ru/progr/vbasic/oop.php

  5. http://detail.phpclub.net/article/2000-12-10


Добавить документ в свой блог или на сайт

Похожие:

Объектно-ориентированное программирование на примере размножения и развития живых организмов iconУрок №4 Тема: Введение в объектно -ориентированное программирование
Познакомить учащихся с базовыми понятиями объектно-ориентированного программирования
Объектно-ориентированное программирование на примере размножения и развития живых организмов iconИнтегрированная среда разработки языка Visual Basic
...
Объектно-ориентированное программирование на примере размножения и развития живых организмов icon«Объектно-ориентированное программирование» в 10 – 11 классе
Икт: Практикум по программированию, 10-11 класс. Он содержит поурочные разработки по данному учебнику и диск с готовыми проектами...
Объектно-ориентированное программирование на примере размножения и развития живых организмов iconПояснительная записка к курсовому проекту по дисциплине «Объектно-ориентированное...
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
Объектно-ориентированное программирование на примере размножения и развития живых организмов iconУрок №6 Тема урока: Объектно-ориентированное программирование
Умение работать в коллективе, умение делать самоанализ, взаимоконтроль, развитие дисциплины
Объектно-ориентированное программирование на примере размножения и развития живых организмов iconУрок по предметам «Информационная безопасность» и «Объектно-ориентированное...
Необходимое оборудование и программы: пк с ос windows, среда программирования Delphi, проектор
Объектно-ориентированное программирование на примере размножения и развития живых организмов iconЗадачи урока: развивать понятие о биологическом значении вегетативного...
Обучающие. Познакомить учащихся с размножением организмов, разнообразием способов размножения, особенностями бесполого размножения;...
Объектно-ориентированное программирование на примере размножения и развития живых организмов iconПояснительная записка к курсовому проекту по дисциплине «Объектно-ориентированное...
Моделирование работы лифтов, wpf, варианты использования, uml диаграммы, пользовательский интерфейс, алгоритмы передвижений
Объектно-ориентированное программирование на примере размножения и развития живых организмов iconПояснительная записка к курсовому проекту по дисциплине «Объектно-ориентированное...
Моделирование работы лифтов, wpf, варианты использования, uml диаграммы, пользовательский интерфейс, алгоритмы передвижений
Объектно-ориентированное программирование на примере размножения и развития живых организмов iconПризнаки живых организмов. Основные отличия живых организмов и неживой природы
Решить эту задачу можно на основе преемственного развития ведущих биологических законов, теорий, идей, обеспечивающих фундамент для...
Объектно-ориентированное программирование на примере размножения и развития живых организмов iconТема урока: Бесполое размножение
Обучающие. Познакомить учащихся с размножением организмов, разнообразием способов размножения, особенностями бесполого размножения;...
Объектно-ориентированное программирование на примере размножения и развития живых организмов iconУрок на тему "Размножение голосеменных растений"
Обучающие. Познакомить учащихся с размножением организмов, разнообразием способов размножения, особенностями бесполого размножения;...
Объектно-ориентированное программирование на примере размножения и развития живых организмов iconПрограмма дисциплины Web системы для направления 080700. 62 Бизнес-информатика
Требования к студентам: для качественного усвоения материала необходимо знание курсов «Сетевые коммуникационные технологии», «Объектно-ориентированное...
Объектно-ориентированное программирование на примере размножения и развития живых организмов iconМуниципальное образовательное учреждение средняя общеобразовательная школа
Обучающие. Познакомить учащихся с размножением организмов, разнообразием способов размножения, особенностями бесполого размножения;...
Объектно-ориентированное программирование на примере размножения и развития живых организмов iconМодуль 4 Задание Проектирование урока в соответствии с требованиями фгос
Обучающие. Познакомить учащихся с размножением организмов, разнообразием способов размножения, особенностями бесполого размножения;...
Объектно-ориентированное программирование на примере размножения и развития живых организмов iconТемы вашего учебного проекта
Инструментальной системой будем называть совокупность программного продукта, обеспечивающего разработку информационно-программного...


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск