Fastayrðing gagna nauðsynleg forsenda klasa

Rakst á1 þetta viðtal við Bjarne Stroustrup höfund C++ forritunarmálsins. Mjög fróðlegt viðtal ef fólk hefur áhuga C++ eða öðrum forritunarmálum.

Það sem mér finnst áhugaverðast í viðtalinu er þegar Stroustrup gagnrýnir menn fyrir að ofnota klasa. Þetta hittir alveg í mark hjá honum. Hann segir að maður eigi ekki að gera klasa nema maður geti skrifað fastayrðingu gagna (svo maður nota orðalag Snorra Agnarssonar).

Bjarne Stroustrup: What is it that makes the object a valid object? An invariant allows you to say when the object's representation when it's good and when it isn't. Take a vector as a very simple example. A vector knows that it has n elements. It has a pointer to n elements. The invariant is exactly that: the pointer points to something, and that something can hold n elements. If it holds n+1 or n-1 elements, that's a bug. If that pointer is zero, it's a bug, because it doesn't point to anything. That means it's a violation of an invariant. So you have to be able to state which objects make sense. Which are good and which are bad. And you can write the interfaces so that they maintain that invariant. That's one way of keeping track that your member functions are reasonable. It's also a way of keeping track of which operations need to be member functions. Operations that don't need to mess with the representation are better done outside the class. So that you get a clean, small interface that you can understand and maintain.

Að sjálfsögðu eru til ýmsar skoðanir á þessum málum. Bertrand Meyer höfundur Eiffel forritunarmálsins er t.d. ekki sammála Stroutrup varðandi member föll. Hann sér ekkert athugavert við að hafa tugi member falla ef það hentar og rökstyður það ágætlega í frábærri bók sinni, Object Oriented Software Construction. Stroustrup vill aftur á móti færa allar aðgerðir út úr klasanum ef þær þurfa ekki að vera þar.

Mér finnst C++ skemmtilegt forritunarmál. Ef maður hefur aðgang að góðum klasasöfnum (libraríum) er í raun afskaplega þægilegt að forrita með C++. En vandamálið er að maður er stundum gjarn á að fara út í of flókna forritun án gildrar ástæðu. Stundum þegar menn agnúast út í C++ og benda á aðra valkosti held ég að munurinn sé fyrst og fremst aðgangur að klasasöfnum. Helsti kostur Java og Python (vafalítið Perl líka) er að libraríin sem koma með standard dreifingunum eru gríðarlega öflug. Maður þarf að leita betur til að finna sambærilega hluti fyrir C++ en þeir eru til.
Með forritunaraðferðum eins og roii getur maður oft skrifað mun snyrtilegri kóða með C++ en mörgum öðrum forritunarmálum.

Ég bíð spenntur eftir öðrum hluta viðtalsins.

1: Sá vísun í þessum umræðuþræði á Joel On Software.

15.10.2003 23:16 forritun
Mynd sem Kolla teiknaði af mér

Nýjar athugasemdir

www.flickr.com