Беспорядок понятий ООП?

Проигнорируйте этот бит и посмотрите ниже на РЕДАКТИРОВАТЬ:

Я не понимаю, почему вы используете fread? Почему бы не использовать imread, что означает не для чтения изображений? Используя это печально известное исходное изображение , в качестве основы для моего тестового сценария, я мог отобразить YCbCr изображение, как показано в небольшом сценарии ниже.

original = imread("lenna.jpg");
% figure, imshow(original); % if you want to see how the original image looks
YCbCr_version = rgb2ycbcr(original);
% figure, imshow(YCbCr_version);  % if you want to see how the YCbCr image looks
imwrite(YCbCr_version, "out.jpg");

YCbCr_fromFile = imread("out.jpg");
figure, imshow(YCbCr_fromFile);
blockquote>

РЕДАКТИРОВАТЬ:

  • ЕСЛИ у вас есть бинарная версия файла, и вы можете только прочитать ее, используя fread, [1112 ]

, тогда должен работать следующий скрипт:

clc;
clear;
close all;

original = imread("lenna.jpg");
% figure, imshow(original); % if you want to see how the original image looks
YCbCr_version = rgb2ycbcr(original);
% figure, imshow(YCbCr_version);  % if you want to see how the YCbCr image looks

fileID = fopen('out.bin','w');
fwrite(fileID, YCbCr_version, 'uint8');
fclose(fileID);

fileID = fopen('out.bin','r');
fromFile = fread(fileID, 512*600*3, 'uint8=>uint8');
fclose(fileID);
image = reshape(fromFile, 512, 600, 3);
imagesc(image)

Дело в том, что в операции чтения вы должны также указать 3 канала в множителе, поскольку у цветных изображений этот третий размерность, т. е. 512*600*3. Если вы дадите 512*600, как вы делали, у вас не будет информации о цвете. Также необходимо изменить функцию изменения формы, чтобы учесть 3-е измерение. Следовательно, reshape(fromFile, 512,600, 3).

  • Версия YCbCr, загруженная из файла

YCbCr version loaded from the file

6
задан Gerrie Schenck 4 February 2009 в 11:21
поделиться

9 ответов

Animal троп работает при объяснении этого большинству людей.

(Дальнейшие полезные ссылки здесь и здесь)

4
ответ дан 8 December 2019 в 13:50
поделиться

Много беспорядка при изучении ООП прибывает из попытки выбрать правильные отношения между объектами и классами объектов, особенно ли:

  • Object содержит Some other Object (или Object1 имеет Object2)
  • Object экземпляр Class

Если я могу думать о хорошем примере, который показывает случай, где любой мог бы быть соответствующим, я добавлю его...

3
ответ дан 8 December 2019 в 13:50
поделиться

ООП проявляет "проблемно-ориентированный" подход к программированию в противоположность традиционной "машине, ориентированной" подход, используемый на языках как C и Паскаль. Изучение ООП может быть довольно жестким, если Вы запрограммировали экстенсивно на процедурных/функциональных языках. Именно этим программистам вещи имеют тенденцию более сбивать с толку. Если Вы будете плохо знакомы с программированием, то Вы, вероятно, найдете вещи намного менее сбивающими с толку, так как Вы начинаетесь с новым умом.

Однако я видел многих программистов, которые работали экстенсивно с языками как Java и утверждают, что были хорошими программистами ООП, когда они были на самом деле отнюдь нет. Уверенный они используют функции языка Java как интерфейсы, наследование и т.д., и создают объекты, "которые являются экземплярами классов", и "отправляют сообщение в объект". Большинство людей использует много жаргона ООП, потому что они выставляются ему. Но когда это сводится к записи простого приложения, их получающийся код выставляет их плохое понимание.

Мой советовать Вам, не становятся пойманными в использовании одного только жаргона. Вопрос и изучает базовые понятия старательно. У Вас могла бы быть своя первая полунирвана (как, я сделал), когда Вы изучаете полиморфизм и преимущества, это приносит для кодирования возможности многократного использования. Другая полунирвана, когда Вы понимаете компромиссы между повторным использованием через наследование и повторным использованием через состав. В конце Вы будете знать о понимании ООП хорошо, если Вы способный разработать хорошо, или скорее хороший дизайн OO являетесь легко хорошей мерой того, как хорошо Вы понимаете ООП.

Если Вы серьезно относитесь к ООП, необходимо прочитать первые две главы книги GOF по Шаблонам разработки. Это могло бы быть немного жестко на новых программистах, но это кладет затруднение взглядов позади ООП. Эта книга является важной ссылкой, которую должен иметь любой серьезный программист ООП. Если Вы понимаете понятия в этой книге хорошо, считаете, что хороший программист OO.

3
ответ дан 8 December 2019 в 13:50
поделиться

Да, я испытал немного беспорядка первоначально. Это вернулось в день, когда OO только начинало становиться господствующей тенденцией, таким образом, было много книг там, которые касались его, но не объяснили его хорошо для людей, которые уже не знали, каково это было. В результате я начал думать, что объект и класс были в основном взаимозаменяемыми и определили новый класс для каждого объекта, который я хотел создать.

Я наконец "получил его" путем проигрывания вокруг на LambdaMOO, MUD (думайте World of Warcraft, но без графики) с объектно-ориентированным языком программирования в игре. Как ни странно, MOOCode не делает различия между классами и объектами - объекты наследовались непосредственно другим объектам. (Это действительно имело конвенцию объектов предназначенной для использования в качестве "базовых классов", которые назовут "Универсальным Нечто" как способ отличить их от определенного ("экземпляр") Foos, но это как близко к различию класса/объекта, как это имело.)

2
ответ дан 8 December 2019 в 13:50
поделиться

У меня никогда действительно был любой беспорядок, но я изучил программирование вдоль оси времени, которую это развило. таким образом, у меня были блок, c, C++, Java, c# и загрузки другого, который не релевантен здесь. То, что необходимо охватить, - то, что все должно быть выражено объектом, и объект содержит информацию, описывающую себя (свойства) и что они могут выполнить задачи, связанные с ними (методы т.е.: Автомобиль. GetAllCars () ;).

Для наследования и полиморфизма и всего остальные я рекомендую практику. практикуйте все - так как практика делает прекрасным. Попытайтесь разработать примеры, данные во всех книгах.

1
ответ дан 8 December 2019 в 13:50
поделиться

Действительно, я думаю слишком, что много акцента поставилось на понятие 'класса'.

Самые большие прыгают вперед в моем понимании, был, когда чтение о "Говорит, не Спрашивайте" принцип.

Я только начал 'чувствовать' Объектную Ориентацию при проигрывании вокруг с (и чтении о) введенные уткой среды как Ruby, JavaScript, Python и т.д.... после как 8 лет, счастливо создающих грузовики классов в C++.

Статически типизированные языки являются большими для производственного кода, но Вы платите много издержек при попытке получить чувство для Объектной Ориентации.

Кроме того, рядом с наиболее часто используемым ООП термина часто каждый забывает, что сначала прибывает OOA и OOD.

2
ответ дан 8 December 2019 в 13:50
поделиться

Я думаю, что особенно программисты, которые были испытаны в разработке с функционально-ориентированными языками, испытали затруднения при понимании понятия ООП. По крайней мере, это действительно сбивало с толку меня, и я сделал целый набор вещей программировать функциональный при использовании языка ООП (Java).

Но я также думаю, что подход ООП является большой вещью новичкам потому что этот подход ist очень "естественный".

1
ответ дан 8 December 2019 в 13:50
поделиться

Спасибо за Ваши ответы.

Я думаю, давая работы в качестве примера лучше всего, но не каждый раз, правильно?!

Я слышал создателя C++, когда он сказал, он занимает время и терпение, и Вы поймете это лучше путем попытки.

0
ответ дан 8 December 2019 в 13:50
поделиться

После того как Вы понимаете, что oo основы смотрят на шаблоны разработки и принципы разработки (например, считывающей головкой Первые Шаблоны разработки). Это будет учить Вас, как необходимо на самом деле использовать инструменты, которые oo дает Вам. В то время как это не замена для практического опыта, он может, конечно, ускорить процесс обучения.

1
ответ дан 8 December 2019 в 13:50
поделиться