Системное программирование и объектно-ориентированное проектирование - на что обратить внимание

Системное программирование и объектно-ориентированное проектирование - на что обратить внимание
Системное программирование и объектно-ориентированное проектирование - на что обратить внимание - nordwood @ Unsplash

В следующем семестре (он начнется чуть менее чем через 5 недель) я буду одновременно изучать системное программирование и OOD. Очевидно, что в SP основное внимание уделяется работе на C в Linux, а у меня есть только опыт работы с Java и Python, поэтому я немного нервничаю по этому поводу.

Те из вас, кто проходил эти предметы в университете, подскажите, на что мне следует обратить внимание?

Я уже проходил курс "Организация ЭВМ", который включал обзор ассемблера. За исключением реализации циклов на ассемблере, я получил от B+ до A- в проектах по ассемблеру. Однако создание схем было совсем другой историей.

Что ж, именно то, что вам понадобится, будет зависеть от класса, хотя некоторые общие положения, скорее всего, останутся. Я бы предложил получить книгу C, предназначенную для программистов Java. Вероятно, это укажет на основные ловушки и поможет вам перейти.

Самые большие вещи, о которых вы будете беспокоиться в C и о которых вы не беспокоитесь в Java, — это указатели и управление памятью. Технически ссылки Java являются указателями, но они являются серьезно упрощенными указателями, и, судя по тому, что я видел, Java-программисты на самом деле не видят в них указатели, которыми они являются, и часто изначально имеют некоторые проблемы с указателями. В дополнение к этому у вас не будет сборщика мусора, поэтому все, что выделяется в куче, не только должно быть выделено вручную, но вам придется вручную освобождать его, когда вы покончил с этим. Итак, вам придется познакомиться с malloc и free. У вас также не будет классов, а структуры в C не могут содержать функций, поэтому вы обычно не программируете на C в объектно-ориентированной манере. Это может или не может быть большой проблемой для вас. Однако это означает, что то, что вы будете изучать на курсе системного программирования и на курсе объектно-ориентированного проектирования, скорее всего, будет сильно различаться.

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

Не зная точного набора навыков и опыта, а также не зная точных курсов, дать более подробный совет было бы сложно, но, в первую очередь, проблема, вероятно, будет заключаться в том, как C не управляет вещами для вас и не Я пытаюсь уберечь тебя от самого себя. Вам придется быть более осторожным при программировании на C, чем на Java или Python. Есть много вещей, которые совершенно легальны для C, но незаконны для многих других языков и могут вас удивить. Однако главное, о чем нужно беспокоиться, это указатели и ручное управление памятью.


LetsCodeIt, 27 мая 2023 г., 09:30