Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Н.Р. Бухараев (3 семестр)(ООП в интегрированной...doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.41 Mб
Скачать

Открытие реализации для проектирования классов - опция protected

Для реализации ограничения доступа применяется модификатор доступа- PROTECTED.

-protected- виден классам-наследникам. Это даёт возможность скрыть от наследников переменную так, чтобы они не «напортачили» в ней.

-internal- модификатор доступа, который используется для методов, доступных всем классам, определённым в конкретной сборке

//Задача: Черепашья графика. Простая модель управления роботом-черепашкой, которая рисует на дискретной сетке.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Turtle//логически связанное определение имён

{

enum tColor {red, green, blue} //перечисляемый тип, состоящий из цветов

class cCell

{

protected internal tColor Color; // определение переменной Color типа tColor

//set-get:

public tColor GetColor() {return Color;}

cCell (tColor Color) {this.Color= Color;} // конструктор

} //class cCell

class cGrid //сетка

{

protected int Dim; //размерность

public int GetDim() {return Dim;}

protected internal cCell [,] Grid; //сама сетка(массив Grid) типа cCell (т.е. перечисляемого типа {red, green, blue})

// текущая позиция

protected internal int CurrentX; //, где internal означает то, что доступ ограничен текущей сборкой,

//а protected означает, что доступ ограничен содержащим классом или типами, которые являются производными от содержащего класса.

protected internal int CurrentY;

public int GetCurrentX() {return CurrentX; }

public int GetCurrentY() {return CurrentY; }

protected void Move (int x, int y )

{

//модульная арифметика(выход за границы)

CurrentX+=x; //эквивалентно выражению CurrentX = CurrentX + x

CurrentY+=y;

} // Move

cGrid (int Dim, tColor Color) //конструктор

{

this.Dim= Dim;

CurrentX=0;

CurrentY=0;

Grid= new cCell [Dim, Dim];

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

for (int j=0; j<Dim; j++)

Grid [i, j].Color= Color;

}

}

class TurtleGraphics: cGrid

{

//поля

public bool PenDown;// состояние пера- карандаш

public tColor PenColor;

public void GoUp()

{

Move(0,1);

if (PenDown) Grid[CurrentX, CurrentY].Color = PenColor;

}//PenGoUp

public void GoRight()

{

Move(1,0);

if (PenDown) Grid[CurrentX, CurrentY]. Color = PenColor;

}//PenRight

public void GoLeft()

{

Move(-1,0);

if (PenDown) Grid[CurrentX, CurrentY]. Color = PenColor;

}//PenLeft

public void GoDown ()

{

Move(0,-1);

if (PenDown) Grid[CurrentX, CurrentY]. Color = PenColor;

}//PenDown

}//class TurtleGraphics: cGrid

class Program

{ //запускалка

static void Main ()

{

}

}//class Program

}//namespace TurtleGraphics

Итак, появляются отношения использования и отношения наследования.