Deutsch   English   Français   Italiano  
<ca1b6f0bae05427d5a715146df77c60cbcd1c014.camel@gmail.com>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: wij <wyniijj5@gmail.com>
Newsgroups: comp.lang.c++
Subject: Re: What is OOP?
Date: Wed, 04 Dec 2024 22:31:00 +0800
Organization: A noiseless patient Spider
Lines: 319
Message-ID: <ca1b6f0bae05427d5a715146df77c60cbcd1c014.camel@gmail.com>
References: <d8a5a0d563f0b9b78b34711d12d4975a7941f53a.camel@gmail.com>
	 <gog0ljdjdhdekscrcbpprte8788aerq05h@4ax.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Injection-Date: Wed, 04 Dec 2024 15:31:01 +0100 (CET)
Injection-Info: dont-email.me; posting-host="480ecf5338b3395793e3ae85a24ec6b2";
	logging-data="975792"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX18Gu/t1932pMltIpCEyEjw+"
User-Agent: Evolution 3.50.2 (3.50.2-1.fc39)
Cancel-Lock: sha1:2zs21s308KJx4e2lJ3tet6DVleE=
In-Reply-To: <gog0ljdjdhdekscrcbpprte8788aerq05h@4ax.com>
Bytes: 13317

On Wed, 2024-12-04 at 13:14 +0100, Rosario19 wrote:
> On Mon, 02 Dec 2024 01:17:49 +0800, wij=C2=A0 wrote:
> > There are several understandings:
> > https://www.quora.com/As-an-experienced-OOP-programmer-in-your-opinion-=
whats-the-biggest-problem-of-OOP-object-oriented-programming
> >=20
> > ...
> > OO can have many meaning. I took OO to mean object, the basic entity of=
 the
> > programming model and the operation of the object. The concept, as foun=
dmental,
> > has to be solid, practical and easily usable. Otherwise, more codes and=
 efforts
> > will be needed latter to fix it, making the original goal ,practically,=
 a lie.
> > IOW, (nearly) a flawless model is all the basics. ...
> > https://sourceforge.net/projects/cscall/files/MisFiles/ClassGuidelines.=
txt/download
> >=20
> > From my view, programming language has to provide a model, so that prog=
rammers=20
> > know what they are dealing with, to solve the problem (recent C++ seems=
 solving
> > just syntax problems).
> > In (my) OOP, 'portability' (or reusable) is first achieved by making th=
e=20
> > probramming object compatible (form platform to platfrom or from time t=
o time
> > in the same platform, but libwy only considers linux, but the idea shou=
ld be
> > generally applicable), i.e. like pod types, structures, union may not b=
e portable.
> >=20
> > Programming object or 'concept' are 'better' represented/wrapped by cla=
ss (keyword)
> > All should be simple, I don't know how to make the idea of 'object' mor=
e simpler.
> > See the guidelines.
>=20
> oop
> what is oo programming?
> 1 definition
> object=3Dmemory layout and all the label to access to it, even that
> layout apply to the pc memory in the machine
> oop=3D programming way use objects and functions and operations on
> objects=20
> with this definition even C would be oop, int and all operation with
> that would be one object
>=20
> change definition
> 2 definition
> a object is a memory layout that have a routine for inizialize that
> memory (constructor) and one routine for end the object (distructor)
> and the programmer can define all the functions and operations to it
> and othe objects or types in language
>=20
> oop is the programming of objects in definition 2

That (the beginning of OOP) is RAII. But, not C++ programs are automaticall=
y RAII.=20
You still need to make it RAII.

[Snippet] Object life cycle view
+----------------------------------------------------------+
| Creating objects to program:                             |
| Sequence of acquisition incident: Object life cycle view |
+----------------------------------------------------------+
 1. Name binding
    (there might be anonymous object)
 2. Size binding
    Information to allocate memory
 3. Address binding
    Object in this stage is called in random state.
 4. Semantics binding
    Object is in responsible state of the occupied space and contents.
    (external resource may be associated in the semantics)
 5. Reversal is the object destruct process

    Note: Class of objects that can be randomly overwritten is referred to =
as
          discardable in this library. Often, such object has no user defin=
ed
          destructor.
-----

More to continue:

----- Result of the life cycle view is the basic rule of class members

 Constructor(..):
   Constructor forms are in basic the Cartesian product view of problem dom=
ain
   in tupple. IOW, the class (concept) is defined by the arguments of ctor.
   Constructor brings an object in random state to responsible state.

 Destructor:
   The destructed object is no longer considered existing in the C++ langua=
ge
   (ref. [12.4.14]). Since destructing an object the second time results to
   undefined behavior, destructor must make sure destructing it once is eno=
ugh.
   In another word, destructor must succeed to the language. Object destruc=
tion
   actually magnifies the effect of common ignorance of the implicitly crea=
ted
   rollback function (or a design).... The program execution from return/th=
row/
   exit.. to its caller(e.g. main, init..) shall succeed.

   Note: C++ language had enforced the semantics that 'destructor must succ=
eed'.

 Const member functions:
   A set of const function members, often referred to as property or attrib=
ute
   members, defines whether or not two objects function 'identically'. In
   general, a minimum set of such members must exist. These members are oft=
en
   in complexity O(1), and provide the basic proofs that the class is prope=
rly
   designed.

 Reset(..) members:
   Reset member brings the object from responsible state back to random sta=
te
   and then does whatever the argument corresponding constructor does.
   Therefore, If a reset member exists then the argument(s) corresponding
   constructor also exists.

   Construct/destruct/reset are implemented as composite operations of obje=
ct
   initialization process of the life cycle view (and the symmetrical rever=
se).
   Implementation can optimize the theoretical sequence.

   Since this library adopts an implicit rule that object has to be in a 'v=
alid'
   state, the reset() postcondition is thus required to be default. Default
   state is among the easiest check points to ensure object constructed, in
   whatever valid state, can always be successfully destructed. Note that r=
eset
   members normally exist but not necessary. For instance, if the class
   contains const or reference data members, then the reset would be diffic=
ult
   to implement.

 Move Constructor:
   The motivation of devising is from the need to avoid costly and unnecess=
ary
   copy operations found in classes that contain allocated resources and th=
e
   objects movement in a dynamic array. It has been practiced that such
   motivation basically just need a *move constructor*. This library uses
   "enum ByMove_t { ByMove }" as the signature denoting a move constructor =
(for
   the moment), which is defined to move the source referenced object to 't=
his'
   pointed address (source object is treated non-existent). The reason is t=
hat
   such an operation is conceptually elementary, thus, it can enable the
   definition of a no-throw swap function template (note: implementation ne=
eds
   a buffer type, e.g. type_store<T>, but this is a different issue).

   Many other libraries do not contain the move constructor. Bit-wise copy
   (memcpy) may mostly do the job, e.g. QString of Qt library, so far. Just
   make sure that destructor of the moved object won't be called.

   Note: C++11 introduced rv-reference and defined another name 'std::move'=
,
   a constructor taking a rv-reference argument is therefore called a move
   constructor. This library decided to continue the development using this=
 now
   standard-confusing move constructor. Simply because ByMove is relatively
   more elementary. Many reasons can eventually be translated to being ligh=
t
   weight, which in a way means it can transform easier. Again, This librar=
y's
   guide "No room should be left for lower-level implement". Another reason=
========== REMAINDER OF ARTICLE TRUNCATED ==========