#java
#java
Вопрос:
Я хочу создать небольшое руководство по программированию, в котором будет несколько изображений, визуализирующих различные типы данных, но я не уверен, как нарисовать эти изображения типов данных.
Предположим, что у меня есть FileOutputStream
объект, который записывает данные в файл 1.txt
.
Как я могу думать об этом FileOutputStream
объекте, думаю ли я о нем как о контейнере потока данных (т. Е. канале), например:
Или я думаю об этом только как о потоке данных, например:
Я думаю, что термин «поток воды» в реальной жизни означает только текущую воду (без наличия контейнера, содержащего текущую воду).
Мой вопрос также применим к другим типам данных, например, думаю ли я о Stack
целых числах как о контейнере стека целых чисел, например:
Или я думаю об этом только как о стеке целых чисел, например:
Я думаю, что термин «стопка книг» в реальной жизни означает только сложенные книги (без наличия контейнера, содержащего сложенные книги).
То же самое для int
типа данных, думаю ли я о int
как о контейнере целого числа, например:
Или я думаю об этом только как о целом числе, например:
Комментарии:
1. Поток можно почти рассматривать как отображение, которое всегда является некоторым вводом
A
(количества0...n
) и выходомB
(количества1 ... n
). Если вы собираетесь использовать диаграммы, я бы использовал диаграммы UML. В этом смысле поток затем может быть представлен с использованием множественного отношения между двумя классами.
Ответ №1:
Взгляните на руководства по Java для потоков ввода-вывода: https://docs.oracle.com/javase/tutorial/essential/io/streams.html и как это иллюстрирует:
Я думаю, что этот вопрос несколько субъективен. «Контейнер» помогает сделать представление более четким за счет наличия четких контуров для различных компонентов на изображении (как в приведенном выше примере). Это также может дать контекст читателю: например, для стека имеет смысл представить его в виде контейнера, поскольку это коллекция, содержащая элементы. Но что это означает для int? Распределение памяти?
Имейте в виду, что в конце концов, это всего лишь абстрактное представление концепции.
Ответ №2:
Это всегда контейнеры.
Позвольте мне начать снизу, потому что я думаю, так будет проще.
Не вдаваясь слишком далеко в особенности управления памятью, вы должны думать обо всех как о КОНТЕЙНЕРЕ плюс ДАННЫЕ. Особенно в типизированных типах.
Что-то без контейнера — это просто биты.
Пример: целое число 4 — это просто ‘1000’. Но что 4, если бы это был ascii, это был бы некоторый записываемый символ, и это было бы просто ‘1000’. Контейнер — это то, что придает смысл данным внутри. Данные без contanier, необработанные данные, это просто биты.
Переходя к стеку, опять же, вы должны думать так же. Абстракция — ЭТО контейнер, и это контейнер КОНТЕЙНЕРОВ.
Итак, что-то вроде стека — это что-то вроде
_______________
|
| *top
| ==== type T==
| ==== type T==
| ==== type T==
|______________|
И затем, после, эти типы T , или целые числа, или строки, или что угодно, будут контейнерами, которые будут содержать некоторые другие фрагменты другим точным способом.
Важно всегда говорить об абстракции, блоке, потому что реализация полностью зависит от системы, языка, компиляции, архитектуры процессора … так что для as они всегда будут блоками.
Переходя к потоку, поток немного отличается от других, потому что поток, теоретически, отправляет только необработанные данные, и они преобразуются только тогда, когда вы собираетесь их использовать. Это верно для потоков ввода-вывода в Java, но не для самой концепции Streams или потоков, как в реактивном программировании, которые очень разные вещи. Но, в качестве общего упрощения, поток просто отправляет данные в сжатом виде оптимизированным способом, а затем вы или поток обрабатываете эти данные так, как это необходимо для понимания при выходе из него.
Если у вас есть еще какие-либо вопросы, не стесняйтесь задавать
Ответ №3:
Каждая переменная непримитивного типа в Java является указателем на объект. Объект любого типа является экземпляром класса. С каким бы типом данных вы ни имели дело, на самом деле это всего лишь один объект. Например, ArrayList<String> li;
это НЕ несколько строк, это 1 объект li
типа ArrayList
.
Уточнив это, поток, будь то ввод или вывод, представляет собой 1 объект, то есть контейнер. стек — это то же самое. Практически во всех языках программирования вы не можете иметь данные без контейнера.
Для всех примитивных типов, конечно, вы должны думать о них как о самих данных. Например, int a=3;
вы должны думать о a как о 3, контейнера нет. Это потому, что в Java у вас не может быть указателя на примитивный тип.
Ответ №4:
Вот краткий и, надеюсь, полезный ответ.
Для всех типов данных это должны быть «Контейнеры«, Почему? — Поскольку все является объектом (инкапсуляция) — даже «int» взаимозаменяем с «Integer».
Более конкретно
для FileIO — Сформируйте контейнеры в виде каналов, чтобы вы могли их обернуть. Вот так — Ссылка на изображение — https://i.stack.imgur.com/zRqoL.png
из самой библиотеки Oreily — https://www.oreilly.com/library/view/learning-java-4th/9781449372477/ch12s01.html
Для стеков — Контейнеры в форме коробок.
https://i.stack.imgur.com/JP7Dz.jpg
Для типов данных — Капсула вполне подходит.
https://i.stack.imgur.com/Qqhrw.png
ссылка — https://stackify.com/oop-concept-for-beginners-what-is-encapsulation /
Надеюсь, это помогло.
Ответ №5:
Мне нравятся ссылки на знакомые вещи (например, поток воды или стопку книг), это может быть очень полезно, особенно для начинающих или широкой публики. Если это ваша аудитория, не стесняйтесь добавлять это в свое описание.
Что касается stream, меня устраивает как с контейнером, так и без него, но я бы предложил указывать направление потока.
Что касается стека, я предпочитаю, чтобы у него не было контейнера в целом. Что еще более важно, это организованная куча, в которой один элемент находится явно выше другого.
Что касается int , ему не нужен контейнер, когда он объясняется как тип данных. (Однако, как только он будет помещен в переменную, «контейнер», на мой взгляд, был бы уместен).