Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1

Классы требуется разъяснение

16.08.2016, 07:54. Показов 4547. Ответов 94

Студворк — интернет-сервис помощи студентам
Начал изучение классов и тут возникли вопросы, может кто подсказать и прояснить ситуацию?
1. Не могу понять зачем создавать дочерние классы, можно же обойтись одним родительским классом?
2. На примере:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class OtherClass extends MyClass {
   public static $my_static = 'статическая переменная';
 
   public static function doubleColon() {
      echo parent::CONST_VALUE . "\n";
      echo self::$my_static . "\n";
   }
}
 
OtherClass::doubleColon();
?>
Как я понял, после extends указывается родительский класс MyClass?
Слово parent указывает что константа будет вызвана из родительского класса, а self из дочернего класса?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.08.2016, 07:54
Ответы с готовыми решениями:

Требуется разъяснение по типам данных
Курю книгу по Java и алгоритмам,и наткнулся на такую фразу которая поменяла моё отношение к программированию,изучаю сам программирование,и...

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

Требуется разъяснение понятий GPT и MBR применительно к SSD
Здравия желаю. пытаюсь установить windows 7 максимальная на SSD жесткий диск. понятие GPT и MBR для SSD бывает? просто UEFI надо ставить на...

94
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
16.08.2016, 12:15
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Programust Посмотреть сообщение
Тогда его создание теряет смысл нет?
Набор реализаций методов "по-умолчанию" + запрет создания экземпляра класса
0
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
16.08.2016, 12:16  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
В рамках темы форума ответить на этот вопрос невозможно.
Я так понимаю пока "забить" на эти абстрактные классы, а использовать "обычные" классы?
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
16.08.2016, 12:18
Цитата Сообщение от Gcom Посмотреть сообщение
Класс, который включает абстрактные методы, должен быть объявлен как abstract.
Это никак не противоречит тому, что абстрактный класс может не иметь абстрактный метод

Добавлено через 43 секунды
Цитата Сообщение от Gcom Посмотреть сообщение
Я так понимаю пока "забить" на эти абстрактные классы, а использовать "обычные" классы?
нет, нужно же понять как они работают
0
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
16.08.2016, 12:30  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
нет, нужно же понять как они работают
Дак как то не получается понять как они работают Может на очень простых примерах покажешь?

Добавлено через 27 секунд
Я не вижу отличия между ними.

Добавлено через 9 минут
Цитата Сообщение от Programust Посмотреть сообщение
Прости нет времени долго писать, просто зачитай статейку... может и разберёшся)))
http://phpclub.ru/detail/article/oop_classes
Читаю:
Эта статья предназначена для опытных PHP-программистов, которые хотят разобраться в том, как работать с типами классов в PHP 5 через приведение типов , абстрактные классы и интерфейсы. Предполагается, что читатели уже знакомы с объектно-ориентированным программированием, включая устройство самих классов и механизм наследования.
Наверно я такое не потяну
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
16.08.2016, 12:32
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
abstract class Foo {
    abstract public function test();
}
 
/*
Тут будет ошибка
class Bar1 extends Foo
{}
*/
 
// тут все хорошо.
// Абстрактный класс заставляет во всех дочерних неабстрактных классах
// реализовать все абстрактные методы
class Bar2 extends Foo {
    public functio test() { return 42; }
}
0
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
16.08.2016, 12:45  [ТС]
Jewbacabra, А почему нету "тела" у функции?
PHP
1
abstract public function test();
Добавлено через 6 минут
Дальше больше, зачем нужны интерфейсы, пример:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
interface ITemplate
{
   public function setVariable($name, $var);
   public function getHtml($template);
}
 
class Template implements ITemplate
{
   private $vars = array();
   
   public function setVariable($name, $var)
   {
     $this->vars[$name] = $var;
   }
   
   public function getHtml($template)
   {
     foreach($this->vars as $name => $value) {
       $template = str_replace('{'.$name.'}', $value, $template);
     }
     
     return $template;
   }
}
?>
В классе как не как описаны методы (функции) setVariable и getHtml
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
16.08.2016, 12:56
А почему нету "тела" у функции?
А документацию почитать?
зачем нужны интерфейсы
Сначала почитай документацию и разберись как они работают, для чего нужны оставь на потом
0
16.08.2016, 12:57  [ТС]

Не по теме:

Цитата Сообщение от Jewbacabra Посмотреть сообщение
А документацию почитать?
У меня от нее уже видать просто каша в голове...

0
23 / 23 / 7
Регистрация: 27.07.2015
Сообщений: 149
16.08.2016, 13:03
Цитата Сообщение от Gcom Посмотреть сообщение
Наверно я такое не потяну
Ну зачем тогда браться за абстрактные классы???
Освой хотя бы базово ООП для начала...
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
16.08.2016, 13:27
Цитата Сообщение от Gcom Посмотреть сообщение
статья предназначена для опытных PHP-программистов, которые хотят разобраться в том, как работать с типами классов в PHP 5 через приведение типов , абстрактные классы и интерфейсы
Автор -- шутник, видимо. Опытным его статья тыщу лет не нужна. Скорее для продвинутых новичков.
Цитата Сообщение от Gcom Посмотреть сообщение
зачем нужны интерфейсы
Пока можете оставить их. Нужны они, чтобы строить приложения, без жёсткой привязки клиентского кода (я не JS имею в виду) к реализации.

Добавлено через 17 минут
Цитата Сообщение от Gcom Посмотреть сообщение
зачем клонировать объекты методом __clone()
Они клонируются с помощью ключевого слова clone, а этот метод вызывается, когда происходит клонирование.
Цитата Сообщение от Gcom Посмотреть сообщение
где это на практике может пригодиться?
Когда нужна копия объекта, а не ссылка на него.
1
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
17.08.2016, 13:19  [ТС]
Продолжаем
Читая статью наткнулся на такой момент:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
class Route
{
    static function start()
    {
        // контроллер и действие по умолчанию
        $controller_name = 'Main';
        $action_name = 'index';
        
        $routes = explode('/', $_SERVER['REQUEST_URI']);
 
        // получаем имя контроллера
        if ( !empty($routes[1]) )
        {   
            $controller_name = $routes[1];
        }
        
        // получаем имя экшена
        if ( !empty($routes[2]) )
        {
            $action_name = $routes[2];
        }
 
        // добавляем префиксы
        $model_name = 'Model_'.$controller_name;
        $controller_name = 'Controller_'.$controller_name;
        $action_name = 'action_'.$action_name;
 
        // подцепляем файл с классом модели (файла модели может и не быть)
 
        $model_file = strtolower($model_name).'.php';
        $model_path = "application/models/".$model_file;
        if(file_exists($model_path))
        {
            include "application/models/".$model_file;
        }
 
        // подцепляем файл с классом контроллера
        $controller_file = strtolower($controller_name).'.php';
        $controller_path = "application/controllers/".$controller_file;
        if(file_exists($controller_path))
        {
            include "application/controllers/".$controller_file;
        }
        else
        {
            /*
            правильно было бы кинуть здесь исключение,
            но для упрощения сразу сделаем редирект на страницу 404
            */
            Route::ErrorPage404();
        }
        
        // создаем контроллер
        $controller = new $controller_name;
        $action = $action_name;
        
        if(method_exists($controller, $action))
        {
            // вызываем действие контроллера
            $controller->$action();
        }
        else
        {
            // здесь также разумнее было бы кинуть исключение
            Route::ErrorPage404();
        }
    
    }
    
    function ErrorPage404()
    {
        $host = 'http://'.$_SERVER['HTTP_HOST'].'/';
        header('HTTP/1.1 404 Not Found');
        header("Status: 404 Not Found");
        header('Location:'.$host.'404');
    }
}

Тут не понятен следующий момент:
PHP
1
2
3
4
        {
            // вызываем действие контроллера
            $controller->$action();
        }
Что за интересная конструкция: $controller->$action();
Я понимаю конструкции вида:
PHP
1
$a->example();
если
PHP
1
2
3
4
5
class A {
     function example() {
         # ....
     }
}
А тут $action()
0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
17.08.2016, 13:21
Gcom,
PHP
1
2
$method = 'show';
echo $method();
Вызовется функция show.
Это просто способ вызвать функцию, название которой заранее неизвестно.

Собственно, задача роутера и заключается в том, чтобы по URL понять, какой контроллер (и метод контроллера) дёргать.
1
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
17.08.2016, 13:29  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Собственно, задача роутера и заключается в том, чтобы по URL понять, какой контроллер (и метод контроллера) дёргать.
Ну с этим сложностей в понимании не было.

Ну теперь буду знать про это:
Цитата Сообщение от Jodah Посмотреть сообщение
$method = 'show';
echo $method(); - вызовется функция show.
Это просто способ вызвать функцию, название которой заранее неизвестно.
Что так тоже делать можно

Добавлено через 6 минут
В частном случае получается:
PHP
1
$Controller_Main->action_index();
0
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
25.08.2016, 08:07  [ТС]
И опять абстрактные классы.
Есть код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
abstract class Person {
 
  private $firstName = "";
  private $lastName = "";
 
  public function setName( $firstName, $lastName ) {
    $this->firstName = $firstName;
    $this->lastName = $lastName;
  }
 
  public function getName() {
   return "$this->firstName $this->lastName";
  }
   
  abstract public function showWelcomeMessage();
}
Комментарий к нему:
В классе также есть абстрактный метод showWelcomeMessage(). Этот метод выводит приветствие, когда пользователь входит на сайт. Опять же, мы добавляем ключевое слово abstract в описание данного метода, чтобы сделать его абстрактным. Так как он абстрактный, в нем нет ни строчки кода, это просто его объявление. Тем не менее, любой дочерний класс обязан добавить и описать метод showWelcomeMessage().
Вопрос зачем вообще описать метод showWelcomeMessage() в этом родительском классе? А просто нельзя описать этот метод в дочерних классах?

Добавлено через 4 минуты
Еще вопрос, есть код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class Member {
 
 private $username;
 
 public function __construct( $username ) {
   $this->username = $username;
 }
 
 public function getUsername() {
   return $this->username;
 }
}
 
class Topic {
 
 private $member;
 private $subject;
 
 public function __construct( $member, $subject ) {
   $this->member = $member;
   $this->subject = $subject;
 }
 
 public function getSubject() {
   return $this->subject;
 }
 
 public function __call( $method, $arguments ) {
   return $this->member->$method( $arguments );
 }
}
 
$aMember = new Member( "fred" );
$aTopic = new Topic( $aMember, "Hello everybody!" );
echo $aTopic->getSubject() . "<br>"; // отобразит "Hello everybody!"
echo $aTopic->getUsername() . "<br>"; // отобразит "fred"
Я так и не понял логику переходов и "обработки"
PHP
1
echo $aTopic->getUsername() . "<br>"; // отобразит "fred"
как получилось "на выходе"
отобразит "fred"
Может кто "на пальцах" объяснить это, либо продемонстрировать на другом примере?
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
25.08.2016, 08:19
Цитата Сообщение от Gcom Посмотреть сообщение
Вопрос зачем вообще описать метод showWelcomeMessage() в этом родительском классе? А просто нельзя описать этот метод в дочерних классах?
Для полиморфизма.
Цитата Сообщение от Gcom Посмотреть сообщение
Я так и не понял логику переходов и "обработки"
Это называется перегрузка. Вот тут же есть примеры: http://php.net/manual/ru/langu... bject.call

Добавлено через 3 минуты
То есть, если вызываемый метод не найден, вызывается "магический" метод __call(), который получает имя не найденного метода. В теле метода программист пишет то, что посчитает нужным.
В Вашем случае он обращается к объекту класса Member и вызывает одноимённый метод в нём.
0
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
25.08.2016, 08:37  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
Для полиморфизма.
Читаю:
Полиморфизм (многоформенность) является следствием идеи наследования. В общих словах, полиморфность класса — это свойство базового класса использовать функции производных классов, даже если на момент определения еще неизвестно, какой именно класс будет включать его в качестве базового и, тем самым, становиться от него производным.
Зачем объявлять метод в родительском классе, а потом его переопределять в дочернем, просто нельзя создать метод в дочернем классе и все? Я вот этого понять не могу, зачем лишние телодвижения? Какой от них прок?

Добавлено через 10 минут
Цитата Сообщение от Para bellum Посмотреть сообщение
В Вашем случае он обращается к объекту класса Member и вызывает одноимённый метод в нём.
Я так понимаю что во время "передачи" это:
PHP
1
return $this->member->$method( $arguments );
заменяется на это:
PHP
1
return $aTopic->member->getUsername()
а далее:
PHP
1
$aTopic->member
"заменяется" на
PHP
1
$aMember
Что в итоге даст:
PHP
1
$aMember->getUsername()
Я правильно рассуждаю?
0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
25.08.2016, 09:26
Лучший ответ Сообщение было отмечено Para bellum как решение

Решение

Цитата Сообщение от Gcom Посмотреть сообщение
Зачем объявлять метод в родительском классе, а потом его переопределять в дочернем, просто нельзя создать метод в дочернем классе и все?
Попробую описать. Начну с интерфейсов, так имхо проще объяснить.

Представим, вы решили сделать класс, который пишет уведомления в текстовый файл. Назовём его FileLogger. Вы написали нечто вроде:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class FileLogger
{
    public function addLog($log){
        // ...
    }
 
    public function addLogs(array $logs){
        // ...
    }
 
    public function getLogs(){
        // ...
    }
}
Потом вы сказали Васе, чтобы он сделал такой же класс, только для БД. Он сделал:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class DbLogger
{
    public function newLog($string){
        // ...
    }
 
    public function newLogs(array $data){
        // ...
    }
 
    public function showLogs(){
        // ...
    }
}
А потом вы ушли на месяц в отпуск, и за это время Петя успел создать класс отправки почтовых уведомлений:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
class MailLogger
{
    public function sendMail($message){
        // ...
    }
 
    public function showSendedMails()
    {
        // ...
    }
}
}
Что в итоге? У вас 3 похожих класса, которые делают практически одно и то же (логирование данных - в файл, в БД и на почту), но с разными названиями методов, да ещё и в последнем классе нет возможности отправить массив, что есть в первых двух классах.

Что нужно сделать, чтобы отправить сообщение на почту? Посмотреть в реализацию класса MailLogger и найти там метод sendMail. Что нужно сделать, чтобы посмотреть логи БД? Открыть файл с нужным классом и изучить его методы. Это не очень удобно, особенно если количество логгеров в будущем будет расти.

Интерфейс позволяет стандартизировать все эти 3 класса. Вы можете указать, что любой логгер, создаваемый в будущем, должен иметь 3 метода: addLog, addLogs и getLogs.

Теперь если вы захотите отправить почту, вы уже будете знать, что нужно вызвать метод addLog. А если Вася напишет новый логгер, скажем, в XML файл? Вам даже не надо смотреть, как устроен его класс! Просто запустили addLog() и всё.

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

Это интерфейсы. А разница между ними и абстрактными классами в том, что в абстрактном классе вы можете реализовать методы, а в интерфейсе - нет, в нём можно указать только какие методы могут быть у потомков.

Например, в примере выше нам может понадобиться метод getErrors, получающий ошибки, произошедшие во время логирования. Если мы решим, что у каждого логгера должно быть свойство errors, тогда нет смысла 3 раза писать один и тот же метод:
PHP
1
2
3
4
public function getErrors()
{
    return $this->errors;
}
Разумней поместить его в предка, чтобы потомки реализовали только те методы, реализация которых может различаться.

Получается, если вы хотите просто описать схему, по которой должны создаваться логгеры - имеет смысл создать для них общий интерфейс. Если же вы хотите не только описать схему, но и создать для потомков какие-то общие методы, чтобы не копипастить их из класса в класс (как метод getErrors), можете использовать абстрактный класс.
3
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
25.08.2016, 09:33
Цитата Сообщение от Gcom Посмотреть сообщение
Я правильно рассуждаю?
Абсолютно правильно. Только
PHP
1
$aTopic->member
не "заменяется" на
PHP
1
$aMember
А является ссылкой на тот же объект.
В целом -- Вы верно цепочку выстроили.

Вот самая суть:
Цитата Сообщение от Gcom Посмотреть сообщение
полиморфность класса — это свойство базового класса использовать функции производных классов, даже если на момент определения еще неизвестно, какой именно класс будет включать его в качестве базового
Это нужно для ослабления связи клиентского кода с конкретной реализацией.
Цитата Сообщение от Gcom Посмотреть сообщение
зачем лишние телодвижения? Какой от них прок?
Цель -- сделать приложение/сайт легко расширяемым и поддерживаемым.
0
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
25.08.2016, 10:01  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
А является ссылкой на тот же объект.
Походу ссылки так и будут вне моего понимаю, сколько не читаю так и не могу понять суть этих ссылок.

Jodah, за отличное разъяснение огромное спасибо, про интерфейсы и абстрактные классы, я кстати тоже подумывал что они нужны для "шаблонизации" создаваемых дочерних классов.

А еще такой нубский вопрос А можно ли в качестве "родительского" класса использовать дочерний класс? Типа наследование наследования
0
Эксперт PHP
3900 / 3238 / 1353
Регистрация: 01.08.2012
Сообщений: 10,914
25.08.2016, 10:47
Цитата Сообщение от Gcom Посмотреть сообщение
А можно ли в качестве "родительского" класса использовать дочерний класс? Типа наследование наследования
Да, конечно.

Добавлено через 12 минут
Цитата Сообщение от Gcom Посмотреть сообщение
Походу ссылки так и будут вне моего понимаю, сколько не читаю так и не могу понять суть этих ссылок.
Пример с обычными переменными:

PHP
1
2
3
4
5
6
7
8
function increment($a)
{
    $a++;
}
 
$a = 1;
increment($a);
echo $a;
Что выведет echo? Конечно 1, поскольку $a внутри и вне функции - это разные переменные, в разных областях видимости.

А теперь сделаем так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
class Obj
{
    public $id = 1;
}
 
function increment($obj)
{
    $obj->id++;
}
 
$obj = new Obj();
increment($obj);
echo $obj->id;
Выведет 2. Почему? Потому что в increment передаётся не переменная $obj (и получается клонирование объектов, что было бы странно), а ссылка на этот объект.
И получается, куда бы мы не передали объект, мы будем работать именно с ним, а не с его копиями.

Добавлено через 5 минут
Gcom, кстати, тоже самое можно сделать с обычными переменными:

PHP
1
2
3
4
5
6
7
8
function increment(&$a)
{
    $a++;
}
 
$a = 1;
increment($a);
echo $a;
Выведет 2. Знак & означает, что нужно не создать локальную копию переменной, а использовать оригинальную переменную (т.е. внутри функции $a - это не значение, а ссылка на переменную).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.08.2016, 10:47

Задача (разъяснение) в алгоритм (программа, используя базовый и производный классы, создавала массив объектов типа производного класса)
Задача на наследование классов, базовый класс - &quot;люди&quot;, производный - &quot;студенты&quot;...как я понял, а базовом надо создать символьную...

Требуется разработать классы для объектов и вывести списки
Мальчики, помогите решить задание, никак не могу разобраться что и как делать, я новенькая в пхп, начала проходить курс и не могу...

Механизм наследования. В программе требуется описать базовый и производные классы
В программе требуется описать базовый и производные классы. Базовый класс (возможно, абстрактный) с помощью виртуальных или абстрактных...

Разъяснение
Ребят, может кто-то сможет объяснить новичку в данном языке программирования, что требуется сделать в данной работе

Разъяснение по ТЗ
Доброго времени суток, суть вопроса состоит в том что бы вы помогли мне разобраться с данным ТЗ. Что вам не ясно в данном ТЗ и какой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru