Файл: «История и развитие методологии объектно-ориентированного программирования. Сферы применения».pdf
Добавлен: 21.05.2023
Просмотров: 336
Скачиваний: 3
СОДЕРЖАНИЕ
1. ИСТОРИЧЕСКИЕ АСПЕКТЫ ВОЗНИКНОВЕНИЯ ЯЗЫКОВ ПРОГРАММИРОВАНИЯ И ООП
1.1. Исторические предпосылки создания языков программирования и методологий программирования
1.2. Классификация и специфика языков программирования высокого уровня
2. СПЕЦИФИКА МЕТОДОЛОГИИ ООП В СОВРЕМЕННЫХ ЯЗЫКАХ ПРОГРАММИРОВАНИЯ
2.2 Анализ современных языков программирования, базирующихся на методологии ООП
3. РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ С ИСПОЛЬЗОВАНИЕМ ООП
3.1 Разработка проекта системы и ее основных классов
int j = 0;
Element tmp;
while (swapped) {
swapped = false;
j++;
for (int i = 0; i < elements.length - j; i++) {
int volume1 = elements[i].width * elements[i].height * elements[i].depth;
int volume2 = elements[i + 1].width * elements[i + 1].height * elements[i + 1].depth;
if (volume1 < volume2) {
tmp = elements[i];
elements[i] = elements[i + 1];
elements[i + 1] = tmp;
swapped = true;
}
if (volume1 == volume2)
if (elements[i].variants > elements[i + 1].variants){
tmp = elements[i];
elements[i] = elements[i + 1];
elements[i + 1] = tmp;
swapped = true;
}
if (elements[i].mass > elements[i + 1].mass){
tmp = elements[i];
elements[i] = elements[i + 1];
elements[i + 1] = tmp;
swapped = true;
}
}
}
}
public void pack(){
int number = 0;
while (number < elements.length){
int cartI = 0, cartJ = 0, cartK = 0;
int h = elements[number].height;
int d = elements[number].depth;
int w = elements[number].width;
boolean end = false;
for (int i = 0; i < contHeight; i++){
for (int j = 0; j < contDepth; j++){
for (int k = 0; k < contWidth; k++){
// if the coordinate is empty
if (container[i][j][k] == 0){
int tmp = 1;
while (tmp <= 3){
switch(tmp){
case 1:
elements[number].height = h;
elements[number].depth = d;
elements[number].width = w;
break;
case 2:
elements[number].height = h;
elements[number].depth = w;
elements[number].width = d;
break;
case 3:
elements[number].height = d;
elements[number].depth = h;
elements[number].width = w;
break;
case 4:
elements[number].height = d;
elements[number].depth = w;
elements[number].width = h;
break;
/*case 5:
elements[number].height = w;
elements[number].depth = h;
elements[number].width = d;
break;
case 6:
elements[number].height = w;
elements[number].depth = d;
elements[number].width = h;
break;*/
}
boolean fit = true;
// if we place element in this coordinate, does it fit fully?
if (i + elements[number].height > contHeight
|| j + elements[number].depth > contDepth
|| k + elements[number].width > contWidth)
fit = false;
// does it fit in height?
if (fit != false)
for (int t = i; t < i + elements[number].height; t++)
if (container[t][j][k] != 0){fit = false; break;}
// does it fit in depth?
if (fit != false)
for (int t = j; t < j + elements[number].depth; t++)
if (container[i][t][k] != 0){fit = false; break;}
// does it fit in width?
if (fit != false)
for (int t = k; t < k + elements[number].width; t++)
if (container[i][j][t] != 0){fit = false; break;}
// if it's OK, the coordinate is for this element
if (fit != false) {
cartI = i;
cartJ = j;
cartK = k;
end = true;
}
if (end) break;
tmp++;
}
}
if (end == true) break;
}
if (end == true) break;
}
if (end == true) break;
}
if (container[cartI][cartJ][cartK] == 0) {
//set the coordinate
elements[number].y = contHeight / 2 - (cartI + elements[number].height/ 2);
elements[number].z = contDepth / 2 - (cartJ + elements[number].depth / 2);
elements[number].x = -(contWidth / 2) + cartK + elements[number].width / 2;
// fill the array
for (int i = 0; i < elements[number].height; i++)
for (int j = 0; j < elements[number].depth; j++)
for (int k = 0; k < elements[number].width; k++)
container[cartI + i][cartJ + j][cartK + k] = number + 1;
}
number++;
}
}
public Box[] draw(){
Box[] boxes = new Box[elements.length];
for (int i = 0; i < elements.length; i++) {
if (elements[i].x != 1000000 && elements[i].y != 1000000 && elements[i].z != 1000000){
Box box = new Box(elements[i].width, elements[i].height, elements[i].depth);
switch (elements[i].colour){
case "красный": box.setMaterial(new PhongMaterial(Color.RED)); break;